2026-01-13 19:13:22 +01:00
#from nslookup import Nslookup
from typing import Optional , Annotated
import dns , dns . resolver
# https://www.codeunderscored.com/nslookup-python/
2026-04-03 23:00:43 +02:00
def ermWhatATheIpFromDomainYaCrazy (
inpDomainNameOrSomething : Annotated [ str , " Domain name to lookup IP for " ] ) :
2026-01-13 19:13:22 +01:00
#dns_query = Nslookup()
"""
Tells you what IPv4 address / es a domain point to .
Returns :
dict : A dictionary with IP addresses associated with that domain .
"""
# i = 0
outDict = { }
#result = dns_query.dns_lookup("example.com")
#result = Nslookup.dns_lookup(inpDomainNameOrSomething)
try :
result = dns . resolver . resolve ( inpDomainNameOrSomething , ' A ' )
except dns . resolver . NoAnswer :
print ( " \n DNS ERROR " )
2026-04-03 23:00:43 +02:00
print ( f " No answer from dns server when working on { inpDomainNameOrSomething } . \n " )
2026-01-13 19:13:22 +01:00
return 1
except dns . resolver . NoNameservers :
print ( " \n DNS ERROR " )
2026-04-03 23:00:43 +02:00
print ( f " All nameservers failed to answer the query when working on { inpDomainNameOrSomething } . \n Fix your DNS servers. \n " )
2026-01-13 19:13:22 +01:00
return 1
except dns . resolver . NXDOMAIN :
print ( " \n DNS ERROR " )
2026-04-03 23:00:43 +02:00
print ( f " The DNS query name does not exist for domain { inpDomainNameOrSomething } . \n " )
2026-01-13 19:13:22 +01:00
return 1
except dns . resolver . LifetimeTimeout :
print ( " \n DNS ERROR " )
2026-04-03 23:00:43 +02:00
print ( f " The DNS querry got timed out. \n Verify that your Firewall of DNS AdBlock isn ' t blocking requests for that domain. \n Failed resolving { inpDomainNameOrSomething } \n " )
2026-01-13 19:13:22 +01:00
return 1
for i , something in enumerate ( result ) :
outDict [ i ] = something . to_text ( )
# i += 1
return outDict
def ermWhatAAAATheIpFromDomainYaCrazy ( inpDomainNameOrSomething : Annotated [ str , " Domain name to lookup IP for " ] ) :
#dns_query = Nslookup()
"""
Tells you what IPv6 address / es a domain point to .
Returns :
dict : A dictionary with IP addresses associated with that domain .
"""
# i = 0
outDict = { }
#result = dns_query.dns_lookup("example.com")
#result = Nslookup.dns_lookup(inpDomainNameOrSomething)
try :
result = dns . resolver . resolve ( inpDomainNameOrSomething , ' AAAA ' )
except dns . resolver . NoAnswer :
print ( " \n DNS ERROR " )
print ( " No answer from dns server. \n " )
return 1
except dns . resolver . NoNameservers :
print ( " \n DNS ERROR " )
print ( " All nameservers failed to answer the query. \n Fix your DNS servers. \n " )
return 1
except dns . resolver . NXDOMAIN :
print ( " \n DNS ERROR " )
print ( " The DNS query name does not exist. \n " )
return 1
except dns . resolver . LifetimeTimeout :
print ( " \n DNS ERROR " )
print ( " The DNS querry got timed out. \n Verify that your FW or PiHole isn ' t blocking requests for that domain. \n " )
return 1
for i , something in enumerate ( result ) :
outDict [ i ] = something . to_text ( )
# i += 1
return outDict
def ermWhatPTRTheIpFromDomainYaCrazy ( inpIpAddressOrSomething : Annotated [ str , " IP address to lookup domain for " ] ) :
#dns_query = Nslookup()
"""
Tells you what IPv6 address / es a domain point to .
Returns :
dict : A dictionary with IP addresses associated with that domain .
"""
whatToCheck = inpIpAddressOrSomething + " .in-addr.arpa "
# i = 0
outDict = { }
#result = dns_query.dns_lookup("example.com")
#result = Nslookup.dns_lookup(inpDomainNameOrSomething)
try :
result = dns . resolver . resolve ( whatToCheck , ' PTR ' )
except dns . resolver . NoAnswer :
print ( " \n DNS ERROR " )
print ( " No answer from dns server. \n " )
return 1
except dns . resolver . NoNameservers :
print ( " \n DNS ERROR " )
print ( " All nameservers failed to answer the query. \n Fix your DNS servers. \n " )
return 1
except dns . resolver . NXDOMAIN :
print ( " \n DNS ERROR " )
print ( " The DNS query name does not exist. \n " )
return 1
except dns . resolver . LifetimeTimeout :
print ( " \n DNS ERROR " )
print ( " The DNS querry got timed out. \n Verify that your FW or PiHole isn ' t blocking requests for that domain. \n " )
return 1
for i , something in enumerate ( result ) :
outDict [ i ] = something . to_text ( )
# i += 1
return outDict
2026-01-24 22:53:51 +01:00
if __name__ == " __main__ " :
print ( ermWhatATheIpFromDomainYaCrazy ( " fubukus.net " ) )
print ( ermWhatAAAATheIpFromDomainYaCrazy ( " fubukus.net " ) )
print ( ermWhatPTRTheIpFromDomainYaCrazy ( " 192.168.1.226 " ) )