· 4 years ago · Dec 18, 2020, 05:02 PM
1#Record DNS con python
2'''
3Prende in imput il nome dell'host da cercare e restituisce i Records DNS.
4Libreria utilizzata dnspython - pip install dnspython
5Tutti gli identificatori si possono trovare: https://www.dnspython.org/docs/1.15.0/identifier-index.html
6I resource data (rdata) sono le informazioni utilizzate per risolvere il nome del dominio, come ad esempio l'indirizzo IP.
7Libreria utilizzata per SPF - https://pypi.org/project/pyspf/ - https://it.wikipedia.org/wiki/Sender_Policy_Framework
8'''
9import dns.resolver
10import spf
11
12#Default value
13Nome_host = 'google.com'
14
15print ('\n################################')
16print ('Nome host: ', Nome_host)
17#Record A (Address) - Indica l'indirizzo IP associato
18Record_DNS = 'A'
19richiesta = dns.resolver.resolve(Nome_host, Record_DNS)
20for rdata in richiesta:
21 print('\nRecord', Record_DNS,'=> indirizzo IP associato:', rdata.address)
22
23#Record NS (Name Server) - Indica l'indirizzo dei server di nomi per il dominio associato, almeno 2 - NSBase
24Record_DNS = 'NS'
25richiesta = dns.resolver.resolve(Nome_host, Record_DNS)
26for rdata in richiesta:
27 print('\nRecord', Record_DNS,'=> nome del server associato:', rdata.target)
28
29#Record TXT (text) - Informazioni in formato testuale - TXT record
30Record_DNS = 'TXT'
31richiesta = dns.resolver.resolve(Nome_host, Record_DNS)
32for rdata in richiesta:
33 print('\nRecord', Record_DNS,'=> informazioni testuali:', rdata.strings)
34
35'''
36#Record CNAME (Canonical Name, nome regolare) - Contiene l'alias associabile al record A, un solo record A puo' a vere + alias
37#utilizzato per nascondere i dettagli implementativi, utilizzando come alias i nomi abbreviati degli hosts
38Record_DNS = 'CNAME'
39Nome_host_2 = 'mail.google.com'
40#richiesta = dns.resolver.resolve('mail.google.com', 'CNAME')
41richiesta = dns.resolver.resolve(Nome_host_2, Record_DNS)
42for rdata in richiesta:
43 print('\nRecord ', Record_DNS,'=', Nome_host_2, 'nome del server associato', rdata.target)
44'''
45
46#Record MX(Mail eXchange) - MXBase
47Record_DNS = 'MX'
48richiesta = dns.resolver.resolve(Nome_host, Record_DNS)
49for rdata in richiesta:
50 print('\nRecord MX = Nome host:', rdata.exchange, 'preferenza:', rdata.preference)
51
52#Record SOA(Start of Authority) indica che questo server dei nomi DNS costituisce la fonte di informazione piu' attendibile per i dati nell'ambito del dominio DNS.
53#Contiene informazioni inportanti
54Record_DNS = 'SOA'
55richiesta = dns.resolver.resolve(Nome_host, Record_DNS)
56for rdata in richiesta:
57 print('\nRecord', Record_DNS,'=> valore di scadenza zona in secondi:', rdata.expire) #Se un DNS Secondario non riesce a contattare entro questo tempo uno primario, esso smettera' di inoltrare interragazioni. Rappresenta il tempo di validita' dei dati del server secondario.
58 print('\nRecord', Record_DNS,'=> info cache time:', rdata.minimum) #Specifica l’arco di tempo in cui una cache può tenere in memoria le informazioni
59 print('\nRecord', Record_DNS,'=> nome master:', rdata.mname) #Nome del master
60 print('\nRecord', Record_DNS,'=> tempo di frequenza controllo:', rdata.refresh) #Specifica la frequenza con cui i server devono controllare i dati della zona dei server DNS primari
61 print('\nRecord', Record_DNS,'=> frequenza tentativi nuova connessione:', rdata.retry) #Specifica quando uno slave deve eseguire nuovamente un tentativo di richiesta fallito
62 print('\nRecord', Record_DNS,'=> e-mail amministratore:', rdata.rname) #Indirizzo e-mail dell'amministratore responsabile
63 print('\nRecord', Record_DNS,'=> n. seriale incrementale:', rdata.serial) #Numero di serie incrementale che specifica la versione del file di zona
64
65'''
66#Record PTR (Pointer) - Indica l'indirizzo IP dei DNS a cui è associato ogni nome - PTR
67Record_DNS = 'PTR'
68richiesta = dns.resolver.resolve(Nome_host, Record_DNS)
69for rdata in richiesta:
70 print('\nRecord', Record_DNS,'=> indirizzo IP del server associato:', rdata.target)
71'''
72#Record SPF (text) - un protocollo di validazione mail per prevenire email spoofing - SPF record
73#Query spf
74IP = "216.58.208.142"
75email_addr = "qualcuno@gmail.com"
76email_dom = "gmail.com"
77print ('\n query SPF IP:',IP)
78print ('\n Indirizzo e-mail:',email_addr)
79print ('\n Dominio indirizzo mail:',email_dom)
80query_spf=(spf.check(i=IP, s=email_addr, h=email_dom, local = None, receiver = None))
81print ('\n',query_spf)
82print ('\nIl primo elemento nella tupla è "pass", "fail", "netural", "softfail", "unknown" o "error".')
83print ('\nIl secondo è il codice di stato della risposta SMTP: 550 per "errore", 450 per "errore" e 250 per tutto il resto.')
84print ('\nLa terza è una spiegazione.')
85