Skip to content

Commit

Permalink
Added recursive_query function, fixes #6
Browse files Browse the repository at this point in the history
  • Loading branch information
zeedo committed Jul 4, 2016
1 parent 8a51568 commit 8208ef9
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 8 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,5 @@ target/

#Ipython Notebook
.ipynb_checkpoints

.idea/
39 changes: 31 additions & 8 deletions fierce.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,21 @@ def reverse_query(resolver, ip):
return query(resolver, dns.reversename.from_address(ip), record_type='PTR')


def recursive_query(resolver, domain, record_type='NS'):

query_domain = str(domain)
query_response = None
try:
while query_response is None:
query_response = query(resolver, query_domain, record_type)
query_domain = query_domain.split('.' , 1)[1]
except IndexError:
return None

return query_response



def zone_transfer(address, domain):
try:
return dns.zone.from_xfr(dns.query.xfr(address, domain))
Expand Down Expand Up @@ -185,15 +200,23 @@ def fierce(**kwargs):
if not domain.is_absolute():
domain = domain.concatenate(dns.name.root)

ns = query(resolver, domain, record_type='NS')
domain_name_servers = [n.to_text() for n in ns]
print("NS: {}".format(" ".join(domain_name_servers)))

soa = query(resolver, domain, record_type='SOA')
soa_mname = soa[0].mname
master = query(resolver, soa_mname, record_type='A')
master_address = master[0].address
print("SOA: {} ({})".format(soa_mname, master_address))
ns = recursive_query(resolver, domain, 'NS')

if ns:
domain_name_servers = [n.to_text() for n in ns]
print("NS: {}".format(" ".join(domain_name_servers) if ns else "failure"))

soa = recursive_query(resolver, domain, record_type='SOA')
if soa:
soa_mname = soa[0].mname
master = query(resolver, soa_mname, record_type='A')
master_address = master[0].address
print("SOA: {} ({})".format(soa_mname, master_address))
else:
print("SOA: failure")
print("Failed to lookup NS/SOA, Domain does not exist")
exit(-1)

zone = zone_transfer(master_address, domain)
print("Zone: {}".format("success" if zone else "failure"))
Expand Down

0 comments on commit 8208ef9

Please sign in to comment.