Skip to content

Commit c3b732f

Browse files
Add ignore IPv4/v6 terminal options
1 parent b71d132 commit c3b732f

File tree

1 file changed

+48
-33
lines changed

1 file changed

+48
-33
lines changed

ptrgen.py

Lines changed: 48 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -50,43 +50,58 @@ def generateIpv6PtrRecord(addr, zone="", ttl="", hostname=""):
5050
def 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-
8253
if __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

Comments
 (0)