Created
February 18, 2012 12:21
-
-
Save jpmens/1859069 to your computer and use it in GitHub Desktop.
Print results of DNS NAPTR records
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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) | |
Did you check that Python re module has *exacly" the same syntax and semantics as the Posix extended regexps of RFC 3402 ?
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
You violate section 10 of RFC 3403 (Security Considerations) by giving untrusted data blindly to Python.