python中实现IP的str与long integer型互换的二个方法

发布时间:2020-06-18编辑:脚本学堂
python中实现IP的str与long integer型互换的二个方法,有需要的朋友可以参考下。

python中实现IP的str与long integer型互换的二个方法,有需要的朋友可以参考下。

方法一:
网上说得比较多的一种方法
 

复制代码 代码如下:

def ip2int (addr):
return struct.unpack('I',struct.pack('i',(socket.ntohl(struct.unpack('i', socket.inet_aton(addr))[0]))))[0]

def int2ip (addr):
return socket.inet_ntoa(struct.pack('i',socket.htonl(addr)))
ip = "192.168.1.213"
intip = 3232235823
print "%s to int is %d" % (ip, ip2int(ip))
print "%d to str is %s" % (intip, int2ip(intip))

方法二:
 

复制代码 代码如下:

def dottedQuadToNum(ip):
"convert decimal dotted quad string to long integer"

hexn = ''.join(["%02X" % long(i) for i in ip.split('.')])
return long(hexn, 16)

def numToDottedQuad(n):
"convert long int to dotted quad string"

d = 256 * 256 * 256
q = []
while d > 0:
m,n = divmod(n,d)
q.append(str(m))
d = d/256

return '.'.join(q)

print dottedQuadToNum("192.168.1.47")
print numToDottedQuad(3232235823)

说明:
1)、方法一在windows下运行正常,在ubuntu中测试出错:struct.error: long too large to convert to int。
2)、方法二在windows、ubuntu均测试通过。