MCPcopy Index your code
hub / github.com/retspen/webvirtcloud / parseAddress

Function parseAddress

vrtManager/IPy.py:1025–1094  ·  view source on GitHub ↗

Parse a string and return the corresponding IP address (as integer) and a guess of the IP version. Following address formats are recognized: >>> parseAddress('0x0123456789abcdef') # IPv4 if <= 0xffffffff else IPv6 (81985529216486895L, 6) >>> parseAddress('123.123

(ipstr)

Source from the content-addressed store, hash-verified

1023
1024
1025def parseAddress(ipstr):
1026 """
1027 Parse a string and return the corresponding IP address (as integer)
1028 and a guess of the IP version.
1029
1030 Following address formats are recognized:
1031
1032 >>> parseAddress('0x0123456789abcdef') # IPv4 if <= 0xffffffff else IPv6
1033 (81985529216486895L, 6)
1034 >>> parseAddress('123.123.123.123') # IPv4
1035 (2071690107L, 4)
1036 >>> parseAddress('123.123') # 0-padded IPv4
1037 (2071658496L, 4)
1038 >>> parseAddress('1080:0000:0000:0000:0008:0800:200C:417A')
1039 (21932261930451111902915077091070067066L, 6)
1040 >>> parseAddress('1080:0:0:0:8:800:200C:417A')
1041 (21932261930451111902915077091070067066L, 6)
1042 >>> parseAddress('1080:0::8:800:200C:417A')
1043 (21932261930451111902915077091070067066L, 6)
1044 >>> parseAddress('::1')
1045 (1L, 6)
1046 >>> parseAddress('::')
1047 (0L, 6)
1048 >>> parseAddress('0:0:0:0:0:FFFF:129.144.52.38')
1049 (281472855454758L, 6)
1050 >>> parseAddress('::13.1.68.3')
1051 (218186755L, 6)
1052 >>> parseAddress('::FFFF:129.144.52.38')
1053 (281472855454758L, 6)
1054 """
1055
1056 if ipstr.startswith('0x'):
1057 ret = long(ipstr[2:], 16)
1058 if ret > 0xffffffffffffffffffffffffffffffffL:
1059 raise ValueError, "%r: IP Address can't be bigger than 2^128" % (ipstr)
1060 if ret < 0x100000000L:
1061 return (ret, 4)
1062 else:
1063 return (ret, 6)
1064
1065 if ipstr.find(':') != -1:
1066 return (_parseAddressIPv6(ipstr), 6)
1067
1068 elif len(ipstr) == 32:
1069 # assume IPv6 in pure hexadecimal notation
1070 return (long(ipstr, 16), 6)
1071
1072 elif ipstr.find('.') != -1 or (len(ipstr) < 4 and int(ipstr) < 256):
1073 # assume IPv4 ('127' gets interpreted as '127.0.0.0')
1074 bytes = ipstr.split('.')
1075 if len(bytes) > 4:
1076 raise ValueError, "IPv4 Address with more than 4 bytes"
1077 bytes += ['0'] * (4 - len(bytes))
1078 bytes = [long(x) for x in bytes]
1079 for x in bytes:
1080 if x > 255 or x < 0:
1081 raise ValueError, "%r: single byte must be 0 <= byte < 256" % (ipstr)
1082 return ((bytes[0] << 24) + (bytes[1] << 16) + (bytes[2] << 8) + bytes[3], 4)

Callers 2

__init__Method · 0.85
_parseAddressIPv6Function · 0.85

Calls 1

_parseAddressIPv6Function · 0.85

Tested by

no test coverage detected