ip2dns 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #! /usr/bin/python
  2. #
  3. # Read a list of domain names on stdin, look up the A records, print IPs on stdout
  4. #
  5. # Usgae:
  6. #
  7. # echo google.com | dns2ip [-a]
  8. #
  9. # or
  10. #
  11. # echo 8.8.8.8 | ip2dns
  12. #
  13. #
  14. # The funcion (forward or reverse lookup) keys off the program name,
  15. # so install by doing:
  16. #
  17. # $ ln dns2ip ip2dns
  18. #
  19. import socket
  20. #import fileinput
  21. import dns.resolver
  22. import sys
  23. import getopt
  24. def usage():
  25. sys.stderr.write("Usage: echo www.google.com | dnns2ip [options]\n")
  26. sys.stderr.write(" or\n")
  27. sys.stderr.write(" dns2ip [options]files-contianing-dns-names [files..]\n")
  28. sys.stderr.write("\n")
  29. sys.stderr.write(" options\n")
  30. sys.stderr.write("\n")
  31. sys.stderr.write(" --names|-n print name as well as resolved IPs\n")
  32. sys.stderr.write(" --all|-a print IPs for all A records\n")
  33. sys.exit(1)
  34. # defaults
  35. printName= False
  36. printAll = False
  37. verbose=False
  38. inputName=""
  39. progName=sys.argv[0]
  40. options, remainder = getopt.getopt(sys.argv[1:], 'ahnvi:',
  41. ["all",
  42. 'help',
  43. 'input='
  44. 'names',
  45. "verbose",
  46. ]
  47. )
  48. for opt, arg in options:
  49. if opt in ('-h', '--help'):
  50. usage()
  51. sys.exit(2)
  52. elif opt in ('-i', '--input'):
  53. inputName = arg
  54. elif opt in ('-a', '--all'):
  55. printAll= True
  56. elif opt in ('-n', '--names'):
  57. printName= True
  58. elif opt in ('-v', '--verbose'):
  59. verbose=True
  60. else:
  61. usage()
  62. sys.exit(2)
  63. if verbose:
  64. print "printName", printName
  65. print "printAll", printAll
  66. print "verbose", verbose
  67. print "inputName", inputName
  68. print "remainder", remainder
  69. myResolver = dns.resolver.Resolver() #create a new instance named 'myResolver'
  70. import fileinput
  71. for name in fileinput.input(remainder):
  72. if verbose:
  73. print "name", name
  74. name = name.strip()
  75. atLeastOne = False
  76. try:
  77. myAnswers = []
  78. if "dns2ip" in progName:
  79. myAnswers = myResolver.query(name, "A") #Lookup the 'A' record(s) for google.com
  80. elif "ip2dns" in progName:
  81. addr=dns.reversename.from_address(name)
  82. reverse = str(dns.resolver.query(addr,"PTR")[0])
  83. myAnswers.append(reverse)
  84. else:
  85. usage()
  86. sys.exit(2)
  87. for rdata in myAnswers: #for each response
  88. sys.stdout.write("%s" % (rdata))
  89. if printName:
  90. sys.stdout.write(" %s\n" % (name))
  91. else:
  92. sys.stdout.write("\n")
  93. atLeastOne = True
  94. if not printAll:
  95. last
  96. except:
  97. pass