working v4, v6 and nsserver

This commit is contained in:
Arnold Dechamps 2024-02-25 03:44:26 +01:00
parent 62e2138d5c
commit 554564ee3c
No known key found for this signature in database
GPG key ID: AE66543374E41C89
3 changed files with 57 additions and 35 deletions

View file

@ -2,24 +2,20 @@ from admin_extra_buttons.api import ExtraButtonsMixin, button
from admin_extra_buttons.utils import HttpResponseRedirectToReferrer
from django.contrib import admin
from .models import TLD
from .models import zonecontent
import tldtester.sorter as sorter
import threading
class tlds(admin.ModelAdmin):
list_display = ('tld', 'inet', 'dnssec', 'lastEdition')
class zone(ExtraButtonsMixin, admin.ModelAdmin):
list_display = ('name', 'rtype', 'rclass', 'ttl', 'data', 'lastEdition')
class tlds(ExtraButtonsMixin, admin.ModelAdmin):
list_display = ('tld', 'nsamount', 'v4nsamount', 'v6nsamount', 'lastEdition')
@button(change_form=True, html_attrs={'style': 'background-color:#88FF88;color:black'})
def refresh(self, request):
self.message_user(request, 'refresh called')
sorter.main()
t1 = threading.Thread(target=sorter.main())
t1.start()
# Optional: returns HttpResponse
return HttpResponseRedirectToReferrer(request)
admin.site.register(TLD, tlds)
admin.site.register(zonecontent, zone)

View file

@ -5,7 +5,6 @@ class TLD(models.Model):
"""
Model for the TLDs validation
"""
INET = ((0, "IPv4"), (1, "IPv6"), (2, "IPv4 + IPv6"),)
DNSSECALGOS = (
(0, "Delete DS"),
(1, "RSA/MD5"),
@ -29,9 +28,11 @@ class TLD(models.Model):
(300, "Unknown"),
)
tld = models.CharField(max_length=30)
tld = models.CharField(max_length=30, primary_key=True)
nsamount = models.IntegerField(default=0)
v4nsamount = models.IntegerField(default=0)
v6nsamount = models.IntegerField(default=0)
dnssec = models.IntegerField(default=300, choices=DNSSECALGOS)
inet = models.IntegerField(default=0, choices=INET)
lastEdition = models.DateTimeField(auto_now=True)
def __str__(self):
@ -41,22 +42,5 @@ class TLD(models.Model):
indexes = [
models.Index(fields=["tld"]),
models.Index(fields=["dnssec"]),
models.Index(fields=["inet"]),
]
class zonecontent(models.Model):
rtype = models.CharField(max_length=10)
name = models.CharField(max_length=100)
rclass = models.CharField(max_length=10)
ttl = models.CharField(max_length=5)
data = models.CharField(max_length=1000)
lastEdition = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
class Meta:
indexes = [
models.Index(fields=["name"]),
models.Index(fields=["nsamount"]),
]

View file

@ -3,8 +3,7 @@ This file is dumping the IANA root zone and sorting it in the database
Link to IANA website : https://www.internic.net/domain/root.zone
"""
import urllib.request
import json
# from tldtester.models import zonecontent, TLD
from tldtester.models import TLD
import dns.resolver
@ -23,11 +22,54 @@ def downloader():
return raw
def dbwriter(recs):
"""
Writes the dictionnary values in the database
"""
if TLD.objects.filter(tld=recs["tld"]).exists():
db = TLD.objects.get(tld=recs["tld"])
else:
db = TLD()
db.tld = recs["tld"]
db.nsamount = recs["nsserveramount"]
db.v4nsamount = recs["v4resolvers"]
db.v6nsamount = recs["v6resolvers"]
db.save()
def grabber(data):
"""
This function takes the TLD's and makes querrys to the DNS. It looks up how many authoritative DNS's there are and
analyses the v4, v6 and DNSSEC. Returns a list of dictionaries with all the vallues to write in the database
"""
for tld in data:
nsservers = []
Arecords = 0
AAAArecords = 0
ns = dns.resolver.resolve(tld, 'NS')
for server in ns:
nsservers.append(server.to_text())
for Arecord in nsservers:
try:
dns.resolver.resolve(Arecord, 'A')
Arecords += 1
except Exception as e:
print(e)
for AAAArecord in nsservers:
try:
dns.resolver.resolve(AAAArecord, 'AAAA')
AAAArecords += 1
except Exception as e:
print(e)
results = {"tld": tld, "nsserveramount": int(len((nsservers))), "v4resolvers": Arecords,
"v6resolvers": AAAArecords}
dbwriter(results)
def main():
try:
data = sorter(downloader())
dbwriter(data)
print(data)
grabber(downloader())
except Exception as e:
print(e)