123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- #! /usr/bin/python
- #
- # Read a list of domain names on stdin, look up the A records, print IPs on stdout
- #
- # Usgae:
- #
- # echo google.com | dns2ip [-a]
- #
- # or
- #
- # echo 8.8.8.8 | ip2dns
- #
- #
- # The funcion (forward or reverse lookup) keys off the program name,
- # so install by doing:
- #
- # $ ln dns2ip ip2dns
- #
- import socket
- #import fileinput
- import dns.resolver
- import sys
- import getopt
- def usage():
- sys.stderr.write("Usage: echo www.google.com | dnns2ip [options]\n")
- sys.stderr.write(" or\n")
- sys.stderr.write(" dns2ip [options]files-contianing-dns-names [files..]\n")
- sys.stderr.write("\n")
- sys.stderr.write(" options\n")
- sys.stderr.write("\n")
- sys.stderr.write(" --names|-n print name as well as resolved IPs\n")
- sys.stderr.write(" --all|-a print IPs for all A records\n")
- sys.exit(1)
- # defaults
- printName= False
- printAll = False
- verbose=False
- inputName=""
- progName=sys.argv[0]
- options, remainder = getopt.getopt(sys.argv[1:], 'ahnvi:',
- ["all",
- 'help',
- 'input='
- 'names',
- "verbose",
- ]
- )
- for opt, arg in options:
- if opt in ('-h', '--help'):
- usage()
- sys.exit(2)
- elif opt in ('-i', '--input'):
- inputName = arg
- elif opt in ('-a', '--all'):
- printAll= True
- elif opt in ('-n', '--names'):
- printName= True
- elif opt in ('-v', '--verbose'):
- verbose=True
- else:
- usage()
- sys.exit(2)
- if verbose:
- print "printName", printName
- print "printAll", printAll
- print "verbose", verbose
- print "inputName", inputName
- print "remainder", remainder
- myResolver = dns.resolver.Resolver() #create a new instance named 'myResolver'
- import fileinput
- for name in fileinput.input(remainder):
- if verbose:
- print "name", name
- name = name.strip()
- atLeastOne = False
-
- try:
- myAnswers = []
- if "dns2ip" in progName:
- myAnswers = myResolver.query(name, "A") #Lookup the 'A' record(s) for google.com
- elif "ip2dns" in progName:
- addr=dns.reversename.from_address(name)
- reverse = str(dns.resolver.query(addr,"PTR")[0])
- myAnswers.append(reverse)
- else:
- usage()
- sys.exit(2)
- for rdata in myAnswers: #for each response
-
- sys.stdout.write("%s" % (rdata))
- if printName:
- sys.stdout.write(" %s\n" % (name))
- else:
- sys.stdout.write("\n")
- atLeastOne = True
- if not printAll:
- last
- except:
- pass
-
-
-
-
-
|