aboutsummaryrefslogtreecommitdiff
path: root/scripts/rpki/ipaddrs.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/rpki/ipaddrs.py')
-rw-r--r--scripts/rpki/ipaddrs.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/scripts/rpki/ipaddrs.py b/scripts/rpki/ipaddrs.py
new file mode 100644
index 00000000..e041e801
--- /dev/null
+++ b/scripts/rpki/ipaddrs.py
@@ -0,0 +1,27 @@
+# $Id$
+
+import socket, struct
+
+class v4addr(long):
+ bits = 32
+
+ def __new__(cls, x):
+ if isinstance(x, str):
+ y = struct.unpack("!I", socket.inet_pton(socket.AF_INET, x))
+ x = y[0]
+ return long.__new__(cls, x)
+
+ def __str__(self):
+ return socket.inet_ntop(socket.AF_INET, struct.pack("!I", long(self)))
+
+class v6addr(long):
+ bits = 128
+
+ def __new__(cls, x):
+ if isinstance(x, str):
+ y = struct.unpack("!QQ", socket.inet_pton(socket.AF_INET6, x))
+ x = (y[0] << 64) | y[1]
+ return long.__new__(cls, x)
+
+ def __str__(self):
+ return socket.inet_ntop(socket.AF_INET6, struct.pack("!QQ", long(self) >> 64, long(self) & 0xFFFFFFFFFFFFFFFF))