@@ -50,43 +50,58 @@ def generateIpv6PtrRecord(addr, zone="", ttl="", hostname=""):
5050def getIpsFromHostname (host ):
5151 return { str (i [4 ][0 ]) for i in socket .getaddrinfo (host , 80 ) }
5252
53- def printPtrRecords (query , ipv4_zone = "" , ipv6_zone = "" , ttl = "" ):
54- if iptools .ipv6 .validate_cidr (query ) == True :
55- query = iptools .IpRangeList (query )
56- for addr in query :
57- print (generateIpv6PtrRecord (addr , zone = ipv6_zone , ttl = ttl ))
58- elif iptools .ipv6 .validate_ip (query ) == True :
59- print (generateIpv6PtrRecord (query , zone = ipv6_zone , ttl = ttl ))
60- elif iptools .ipv4 .validate_cidr (query ) == True :
61- query = iptools .IpRangeList (query )
62- for addr in query :
63- print (generateIpv4PtrRecord (addr , zone = ipv4_zone , ttl = ttl ))
64- elif iptools .ipv4 .validate_ip (query ) == True :
65- print (generateIpv4PtrRecord (query , zone = ipv4_zone , ttl = ttl ))
66- else :
67- try :
68- ips = getIpsFromHostname (query )
69- if not query .endswith ("." ):
70- query += "."
71-
72- for ip in ips :
73- if iptools .ipv6 .validate_ip (ip ):
74- print (generateIpv6PtrRecord (ip , zone = ipv6_zone , ttl = ttl , hostname = query ))
75- elif iptools .ipv4 .validate_ip (ip ):
76- print (generateIpv4PtrRecord (ip , zone = ipv4_zone , ttl = ttl , hostname = query ))
77- else :
78- sys .exit ("Error: Invalid IP address/range encountered ({})" .format (ip ))
79- except :
80- sys .exit ("Error: Invalid query" )
81-
8253if __name__ == "__main__" :
8354 parser = argparse .ArgumentParser (description = 'Generate PTR records for IP addresses' )
84- parser .add_argument ('objects' , metavar = 'O ' , type = str , nargs = '+' , help = 'IP address, subnet or domain name to create PTR record for' )
85- parser .add_argument ('-z4' , type = str , nargs = 1 , default = ['' ], dest = 'ipv4_zone' , help = 'DNS zone for IPv4 addresses' )
86- parser .add_argument ('-z6' , type = str , nargs = 1 , default = ['' ], dest = 'ipv6_zone' , help = 'DNS zone for IPv6 addresses' )
55+ parser .add_argument ('objects' , metavar = 'object ' , type = str , nargs = '+' , help = 'IP address, subnet or domain name to generate PTR record(s) for' )
56+ parser .add_argument ('-z4' , type = str , nargs = 1 , default = ['' ], dest = 'ipv4_zone' , help = 'DNS zone for IPv4 addresses with trailing dot ' )
57+ parser .add_argument ('-z6' , type = str , nargs = 1 , default = ['' ], dest = 'ipv6_zone' , help = 'DNS zone for IPv6 addresses with trailing dot ' )
8758 parser .add_argument ('-ttl' , type = str , nargs = 1 , default = ['' ], dest = 'ttl' , help = 'TTL value for PTR records' )
59+ parser .add_argument ('-no4' , action = 'store_true' , dest = 'ignore_ipv4' , help = 'ignore IPv4 addresses during record generation' )
60+ parser .add_argument ('-no6' , action = 'store_true' , dest = 'ignore_ipv6' , help = 'ignore IPv6 addresses during record generation' )
8861
8962 args = parser .parse_args ()
9063
9164 for obj in args .objects :
92- printPtrRecords (obj , ipv4_zone = args .ipv4_zone [0 ], ipv6_zone = args .ipv6_zone [0 ], ttl = args .ttl [0 ])
65+ ipv4_zone = args .ipv4_zone [0 ]
66+ ipv6_zone = args .ipv6_zone [0 ]
67+ ttl = args .ttl [0 ]
68+
69+ if iptools .ipv6 .validate_cidr (obj ) == True :
70+ if args .ignore_ipv6 == True :
71+ continue
72+ obj = iptools .IpRangeList (obj )
73+ for addr in obj :
74+ print (generateIpv6PtrRecord (addr , zone = ipv6_zone , ttl = ttl ))
75+ elif iptools .ipv6 .validate_ip (obj ) == True :
76+ if args .ignore_ipv6 == True :
77+ continue
78+ print (generateIpv6PtrRecord (obj , zone = ipv6_zone , ttl = ttl ))
79+ elif iptools .ipv4 .validate_cidr (obj ) == True :
80+ if args .ignore_ipv4 == True :
81+ continue
82+ obj = iptools .IpRangeList (obj )
83+ for addr in obj :
84+ print (generateIpv4PtrRecord (addr , zone = ipv4_zone , ttl = ttl ))
85+ elif iptools .ipv4 .validate_ip (obj ) == True :
86+ if args .ignore_ipv4 == True :
87+ continue
88+ print (generateIpv4PtrRecord (obj , zone = ipv4_zone , ttl = ttl ))
89+ else :
90+ try :
91+ ips = getIpsFromHostname (obj )
92+ if not obj .endswith ("." ):
93+ obj += "."
94+
95+ for ip in ips :
96+ if iptools .ipv6 .validate_ip (ip ):
97+ if args .ignore_ipv6 == True :
98+ continue
99+ print (generateIpv6PtrRecord (ip , zone = ipv6_zone , ttl = ttl , hostname = obj ))
100+ elif iptools .ipv4 .validate_ip (ip ):
101+ if args .ignore_ipv4 == True :
102+ continue
103+ print (generateIpv4PtrRecord (ip , zone = ipv4_zone , ttl = ttl , hostname = obj ))
104+ else :
105+ sys .exit ("Error: Invalid IP address/range encountered ({})" .format (ip ))
106+ except :
107+ sys .exit ("Error: Invalid query" )
0 commit comments