Articoli

DNS – Domain Name System e SPF Sender Policy Framework

Record DNS con python

”’
Prende in imput il nome dell’host da cercare e restituisce i Records DNS.
Libreria utilizzata dnspython – pip install dnspython
Tutti gli identificatori si possono trovare: https://www.dnspython.org/docs/1.15.0/identifier-index.html
I resource data (rdata) sono le informazioni utilizzate per risolvere il nome del dominio, come ad esempio l’indirizzo IP.
Libreria utilizzata per SPF – https://pypi.org/project/pyspf/https://it.wikipedia.org/wiki/Sender_Policy_Framework
”’
import dns.resolver
import spf

Default value

Nome_host = ‘google.com’

print (‘\n################################’)
print (‘Nome host: ‘, Nome_host)

Record A (Address) – Indica l’indirizzo IP associato

Record_DNS = ‘A’
richiesta = dns.resolver.resolve(Nome_host, Record_DNS)
for rdata in richiesta:
print(‘\nRecord’, Record_DNS,’=> indirizzo IP associato:’, rdata.address)

Record NS (Name Server) – Indica l’indirizzo dei server di nomi per il dominio associato, almeno 2 – NSBase

Record_DNS = ‘NS’
richiesta = dns.resolver.resolve(Nome_host, Record_DNS)
for rdata in richiesta:
print(‘\nRecord’, Record_DNS,’=> nome del server associato:’, rdata.target)

Record TXT (text) – Informazioni in formato testuale – TXT record

Record_DNS = ‘TXT’
richiesta = dns.resolver.resolve(Nome_host, Record_DNS)
for rdata in richiesta:
print(‘\nRecord’, Record_DNS,’=> informazioni testuali:’, rdata.strings)

”’

Record CNAME (Canonical Name, nome regolare) – Contiene l’alias associabile al record A, un solo record A puo’ a vere + alias

utilizzato per nascondere i dettagli implementativi, utilizzando come alias i nomi abbreviati degli hosts

Record_DNS = ‘CNAME’
Nome_host_2 = ‘mail.google.com’

richiesta = dns.resolver.resolve(‘mail.google.com’, ‘CNAME’)

richiesta = dns.resolver.resolve(Nome_host_2, Record_DNS)
for rdata in richiesta:
print(‘\nRecord ‘, Record_DNS,’=’, Nome_host_2, ‘nome del server associato’, rdata.target)
”’

Record MX(Mail eXchange) – MXBase

Record_DNS = ‘MX’
richiesta = dns.resolver.resolve(Nome_host, Record_DNS)
for rdata in richiesta:
print(‘\nRecord MX = Nome host:’, rdata.exchange, ‘preferenza:’, rdata.preference)

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.

Contiene informazioni inportanti

Record_DNS = ‘SOA’
richiesta = dns.resolver.resolve(Nome_host, Record_DNS)
for rdata in richiesta:
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.
print(‘\nRecord’, Record_DNS,’=> info cache time:’, rdata.minimum) #Specifica l’arco di tempo in cui una cache può tenere in memoria le informazioni
print(‘\nRecord’, Record_DNS,’=> nome master:’, rdata.mname) #Nome del master
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
print(‘\nRecord’, Record_DNS,’=> frequenza tentativi nuova connessione:’, rdata.retry) #Specifica quando uno slave deve eseguire nuovamente un tentativo di richiesta fallito
print(‘\nRecord’, Record_DNS,’=> e-mail amministratore:’, rdata.rname) #Indirizzo e-mail dell’amministratore responsabile
print(‘\nRecord’, Record_DNS,’=> n. seriale incrementale:’, rdata.serial) #Numero di serie incrementale che specifica la versione del file di zona

”’

Record PTR (Pointer) – Indica l’indirizzo IP dei DNS a cui è associato ogni nome – PTR

Record_DNS = ‘PTR’
richiesta = dns.resolver.resolve(Nome_host, Record_DNS)
for rdata in richiesta:
print(‘\nRecord’, Record_DNS,’=> indirizzo IP del server associato:’, rdata.target)
”’

Record SPF (text) – un protocollo di validazione mail per prevenire email spoofing – SPF record

Query spf

IP = “216.58.208.142”
email_addr = “qualcuno@gmail.com”
email_dom = “gmail.com”
print (‘\n query SPF IP:’,IP)
print (‘\n Indirizzo e-mail:’,email_addr)
print (‘\n Dominio indirizzo mail:’,email_dom)
query_spf=(spf.check(i=IP, s=email_addr, h=email_dom, local = None, receiver = None))
print (‘\n’,query_spf)
print (‘\nIl primo elemento nella tupla è “pass”, “fail”, “netural”, “softfail”, “unknown” o “error”.’)
print (‘\nIl secondo è il codice di stato della risposta SMTP: 550 per “errore”, 450 per “errore” e 250 per tutto il resto.’)
print (‘\nLa terza è una spiegazione.’)

https://pastebin.com/BpLp1pL2

Standard