diff options
author | Markus Hihn <markus.hihn@dcso.de> | 2017-12-15 19:58:16 +0100 |
---|---|---|
committer | Markus Hihn <markus.hihn@dcso.de> | 2017-12-15 19:58:16 +0100 |
commit | 60676b4a8e6dea18a215df76f4dbd6fdf8176638 (patch) | |
tree | 139b0ee5d7f801efe62a7682fba73208c4bef184 /krebs/5pkgs/simple/cidr2glob.nix | |
parent | 98e5141a8d43064daf6dc75fc9eefb9cb5bb29b7 (diff) | |
parent | 5b86fe1cd63a5c4cf5a83b7afabe5be34016e8a7 (diff) |
Merge branch 'master' of prism.r:stockholm
Diffstat (limited to 'krebs/5pkgs/simple/cidr2glob.nix')
-rw-r--r-- | krebs/5pkgs/simple/cidr2glob.nix | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/krebs/5pkgs/simple/cidr2glob.nix b/krebs/5pkgs/simple/cidr2glob.nix new file mode 100644 index 000000000..9b0b3f86b --- /dev/null +++ b/krebs/5pkgs/simple/cidr2glob.nix @@ -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 + + '' |