(r)zonegen.py: Use ipaddress module and Python 3
This commit is contained in:
parent
047b2c31dd
commit
17e170483a
29
rzonegen.py
29
rzonegen.py
|
@ -1,9 +1,9 @@
|
||||||
#! /usr/bin/env python
|
#! /usr/bin/env python3
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import json
|
import json
|
||||||
import codecs
|
|
||||||
import re
|
import re
|
||||||
|
import ipaddress
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
def str_to_domainlabel(s):
|
def str_to_domainlabel(s):
|
||||||
|
@ -17,19 +17,7 @@ def str_to_domainlabel(s):
|
||||||
return label
|
return label
|
||||||
|
|
||||||
def ipv6_addr_to_rdns(addr):
|
def ipv6_addr_to_rdns(addr):
|
||||||
rdns = ""
|
return ".".join(reversed(addr.exploded.replace(':', ''))) + ".ip6.arpa."
|
||||||
counter = 4
|
|
||||||
|
|
||||||
for char in reversed(addr):
|
|
||||||
if char == ':':
|
|
||||||
rdns += counter * '0.'
|
|
||||||
counter = 4
|
|
||||||
else:
|
|
||||||
rdns += char + '.'
|
|
||||||
counter -= 1
|
|
||||||
|
|
||||||
rdns += 'ip6.arpa.'
|
|
||||||
return rdns
|
|
||||||
|
|
||||||
data = json.load(sys.stdin)
|
data = json.load(sys.stdin)
|
||||||
domain = sys.argv[1]
|
domain = sys.argv[1]
|
||||||
|
@ -54,12 +42,17 @@ print("""$TTL 1h
|
||||||
for node in data.values():
|
for node in data.values():
|
||||||
try:
|
try:
|
||||||
for address in node['network']['addresses']:
|
for address in node['network']['addresses']:
|
||||||
if address.startswith("fe80:"):
|
try:
|
||||||
|
address = ipaddress.IPv6Address(address)
|
||||||
|
except ValueError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if address.is_link_local or address.is_private:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
rdns = ipv6_addr_to_rdns(address)
|
rdns = ipv6_addr_to_rdns(address)
|
||||||
|
|
||||||
if rdns.endswith(domain):
|
if rdns.endswith(domain):
|
||||||
print "%s PTR %s.nodes.ffhb." % (ipv6_addr_to_rdns(address)[0:-len(domain)], str_to_domainlabel(node['hostname']))
|
print("%s PTR %s.nodes.ffhb.de." % (rdns[0:-len(domain)], str_to_domainlabel(node['hostname'])))
|
||||||
except:
|
except (KeyError, RuntimeError):
|
||||||
pass
|
pass
|
||||||
|
|
17
zonegen.py
17
zonegen.py
|
@ -1,9 +1,9 @@
|
||||||
#! /usr/bin/env python
|
#! /usr/bin/env python3
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import json
|
import json
|
||||||
import codecs
|
|
||||||
import re
|
import re
|
||||||
|
import ipaddress
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
def str_to_domainlabel(s):
|
def str_to_domainlabel(s):
|
||||||
|
@ -19,7 +19,7 @@ def str_to_domainlabel(s):
|
||||||
|
|
||||||
data = json.load(sys.stdin)
|
data = json.load(sys.stdin)
|
||||||
|
|
||||||
print """$TTL 1h
|
print("""$TTL 1h
|
||||||
@ IN SOA vpn01.bremen.freifunk.net. noc.bremen.freifunk.net. (
|
@ IN SOA vpn01.bremen.freifunk.net. noc.bremen.freifunk.net. (
|
||||||
%s ; serial
|
%s ; serial
|
||||||
1h ; refresh
|
1h ; refresh
|
||||||
|
@ -30,14 +30,19 @@ print """$TTL 1h
|
||||||
|
|
||||||
NS vpn01.bremen.freifunk.net.
|
NS vpn01.bremen.freifunk.net.
|
||||||
|
|
||||||
""" % datetime.now().strftime("%Y%m%d%H%M")
|
""" % datetime.now().strftime("%Y%m%d%H%M"))
|
||||||
|
|
||||||
for node in data.values():
|
for node in data.values():
|
||||||
try:
|
try:
|
||||||
for address in node['network']['addresses']:
|
for address in node['network']['addresses']:
|
||||||
if address.startswith("fe80:"):
|
try:
|
||||||
|
address = ipaddress.IPv6Address(address)
|
||||||
|
except ValueError:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
print "%-15s AAAA %s" % (str_to_domainlabel(node['hostname']), address)
|
if address.is_link_local or address.is_private:
|
||||||
|
continue
|
||||||
|
|
||||||
|
print("%-15s AAAA %s" % (str_to_domainlabel(node['hostname']), address))
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
Loading…
Reference in New Issue