summaryrefslogtreecommitdiffstats
path: root/krebs/5pkgs/simple/cidr2glob.nix
diff options
context:
space:
mode:
authorMarkus Hihn <markus.hihn@dcso.de>2017-12-15 19:58:16 +0100
committerMarkus Hihn <markus.hihn@dcso.de>2017-12-15 19:58:16 +0100
commit60676b4a8e6dea18a215df76f4dbd6fdf8176638 (patch)
tree139b0ee5d7f801efe62a7682fba73208c4bef184 /krebs/5pkgs/simple/cidr2glob.nix
parent98e5141a8d43064daf6dc75fc9eefb9cb5bb29b7 (diff)
parent5b86fe1cd63a5c4cf5a83b7afabe5be34016e8a7 (diff)
Merge branch 'master' of prism.r:stockholm
Diffstat (limited to 'krebs/5pkgs/simple/cidr2glob.nix')
-rw-r--r--krebs/5pkgs/simple/cidr2glob.nix30
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 00000000..9b0b3f86
--- /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
+
+ ''