Skip to content

Instantly share code, notes, and snippets.

@jpmens
Created February 18, 2012 12:21
Show Gist options
  • Save jpmens/1859069 to your computer and use it in GitHub Desktop.
Save jpmens/1859069 to your computer and use it in GitHub Desktop.
Print results of DNS NAPTR records
#!/usr/bin/env python
#(@)dddns.py by Jan-Piet Mens, February 2012
import dns.resolver
import dns.e164
from dns.exception import DNSException
import sys, re
import optparse
def enum(aus, verbose):
if verbose:
print "Trying ENUM with AUS %s" % aus
domain = dns.e164.from_e164(aus)
if domain == dns.name.from_text('e164.arpa.'):
print "AUS %s doesn't look like an ENUM" % aus
sys.exit(0)
if verbose:
print "AUS %s is in DNS domain %s" % (aus, domain)
try:
answers = dns.resolver.query(domain, 'NAPTR')
except DNSException, e:
print "Cannot resolve %s" % domain
print e.__class__, e
sys.exit(0)
for rdata in answers:
if verbose:
print "%3d %3d %-4s %-20s %s" % (rdata.order, rdata.preference, rdata.flags, rdata.regexp, rdata.replacement)
if rdata.flags == 'u': # Terminal
regex = rdata.regexp.split('!')
rf = regex[1] # from
rt = regex[2] # to
print "%s" % re.sub(rf, rt, aus)
if __name__ == '__main__':
parser = optparse.OptionParser()
parser.add_option('-v', '--verbose', dest='verbose', default=False, action='store_true', help='Verbose output')
parser.add_option('-e', '--enum', dest='enumber', help='Telephone number')
(opts, args) = parser.parse_args()
if opts.enumber:
enum(opts.enumber, opts.verbose)
@jpmens
Copy link
Author

jpmens commented Feb 18, 2012

Examples

@bortzmeyer
Copy link

You violate section 10 of RFC 3403 (Security Considerations) by giving untrusted data blindly to Python.

@bortzmeyer
Copy link

Did you check that Python re module has *exacly" the same syntax and semantics as the Posix extended regexps of RFC 3402 ?

@jpmens
Copy link
Author

jpmens commented Feb 27, 2012

Very valid comments, Stéphane, particularly the first -- patches welcome. ;-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment