1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- # coding: utf-8
- import netaddr
- import datetime
- import lglass.bird
- import lglass.route
- import lglass.database.file
- with open("routes.bird") as fh:
- routes = lglass.route.RoutingTable(lglass.bird.parse_routes(fh))
- db = lglass.database.file.FileDatabase("/home/zorun/net.dn42.registry/data")
- dn42_native = netaddr.IPNetwork("172.22.0.0/15")
- db_nets = netaddr.IPSet()
- route_nets = netaddr.IPSet()
- for type, primary_key in db.list():
- if type == "inetnum":
- addr = netaddr.IPNetwork(primary_key)
- if addr not in dn42_native:
- continue
- obj = db.get(type, primary_key)
- if "BLK" in obj.getfirst("netname", ""):
- continue
- db_nets.add(addr)
- for route in routes:
- if route.prefix not in dn42_native:
- continue
- route_nets.add(route.prefix)
- all_nets = netaddr.IPSet()
- all_nets.add(dn42_native)
- announced_nets = route_nets
- registered_nets = db_nets
- unused_nets = all_nets - announced_nets
- unregistered_nets = all_nets - registered_nets
- free_nets = unused_nets.intersection(unregistered_nets)
- print("DN42 network usage report")
- print("Date: {}".format(datetime.datetime.now()))
- print()
- print("Statistics:")
- print(" Total {}".format(len(all_nets)))
- print("-" * 80)
- print(" Announced {}\t{}%".format(len(announced_nets), len(announced_nets)/len(all_nets)*100))
- print(" Registered {}\t{}%".format(len(registered_nets), len(registered_nets)/len(all_nets)*100))
- print(" Unregistered {}\t{}%".format(len(unregistered_nets), len(unregistered_nets)/len(all_nets)*100))
- print(" Unused {}\t{}%".format(len(unused_nets), len(unused_nets)/len(all_nets)*100))
- print(" Free {}\t{}%".format(len(free_nets), len(free_nets)/len(all_nets)*100))
- print()
- print("Announced netwoks:")
- for net in announced_nets.iter_cidrs():
- print(" * {}".format(net))
- print()
- print("Registered netwoks:")
- for net in registered_nets.iter_cidrs():
- print(" * {}".format(net))
- print()
- print("Unregistered netwoks:")
- for net in unregistered_nets.iter_cidrs():
- print(" * {}".format(net))
- print()
- print("Unused netwoks:")
- for net in unused_nets.iter_cidrs():
- print(" * {}".format(net))
- print()
- print("Free netwoks:")
- for net in free_nets.iter_cidrs():
- print(" * {}".format(net))
|