working v4, v6 and nsserver
This commit is contained in:
parent
62e2138d5c
commit
554564ee3c
|
@ -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)
|
||||
|
|
|
@ -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"]),
|
||||
]
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in a new issue