为什么要将ip转int,这是为了数据库保存ip地址时可以使用整形字段保存,性能更高
转换后同样可以使用整形进行访问网站,即http://47.74.189.133 = http://793427333
使用socket 和 struct
def ip_to_int(ip):
"""ip地址转数字"""
import socket
import struct
return socket.ntohl(struct.unpack("I", socket.inet_aton(str(ip)))[0])
def int_to_ip(num):
'''整形转ip地址'''
import socket
import struct
return socket.inet_ntoa(struct.pack("!I", num))
if __name__ == '__main__':
print(ip_to_int('47.74.189.133')) # 793427333
print(int_to_ip(793427333)) # 47.74.189.133
其实这是进制的转换。可以不用三方包手写转换
func = lambda x: '.'.join([str(int(x / (256 ** i) % 256)) for i in range(3, -1, -1)])
func(793427333)
func = lambda x: sum([256 ** j * int(i) for j, i in enumerate(x.split('.')[::-1])])
func('47.74.189.133')