cidr2glob: init
Based on https://gist.github.com/speshak/b62fa28b49377cda8047cb227837244c
This commit is contained in:
parent
fa3c5eb1d8
commit
2a3a3248de
30
krebs/5pkgs/simple/cidr2glob.nix
Normal file
30
krebs/5pkgs/simple/cidr2glob.nix
Normal file
@ -0,0 +1,30 @@
|
||||
{ python, writeScriptBin, ... }:
|
||||
|
||||
let
|
||||
pythonEnv = python.withPackages (ps: [ ps.netaddr ]);
|
||||
in
|
||||
writeScriptBin "cidr2glob" ''
|
||||
#! ${pythonEnv}/bin/python
|
||||
|
||||
import netaddr
|
||||
import re
|
||||
import sys
|
||||
|
||||
def cidr2glob(cidr):
|
||||
net = netaddr.IPNetwork(cidr)
|
||||
|
||||
if net.prefixlen <= 8:
|
||||
return map(lambda subnet: re.sub(r'\.0\.0\.0$', '.*', str(subnet.ip)), net.subnet(8))
|
||||
elif net.prefixlen <= 16:
|
||||
return map(lambda subnet: re.sub(r'\.0\.0$', '.*', str(subnet.ip)), net.subnet(16))
|
||||
elif net.prefixlen <= 24:
|
||||
return map(lambda subnet: re.sub(r'\.0$', '.*', str(subnet.ip)), net.subnet(24))
|
||||
else:
|
||||
return map(lambda ip: str(ip), list(net))
|
||||
|
||||
if __name__ == "__main__":
|
||||
for cidr in sys.stdin:
|
||||
for glob in cidr2glob(cidr):
|
||||
print glob
|
||||
|
||||
''
|
Loading…
Reference in New Issue
Block a user