python3 ip地址转int算法

61.140.24.198,1035664531
115.230.17.198,1943074195
36.6.158.117,607156768
117.67.49.165,1970656752

这个ip算法想了很久没反推出来,各位大神看得出来吗?

def ip2int(ip):

ip_list = ip.strip().split('.')SUM = 0for i in range(len(ip_list)):    SUM += int(ip_list[i])*256**(3-i)return SUM

print(str(ip2int("36.6.158.117"))+str(" -> 36.6.158.117"))

print(str(ip2int("115.230.17.198"))+str(" -> 115.230.17.198"))
604413557 -> 36.6.158.117
1944457670 -> 115.230.17.198
答案已经差不多很像了


ibeautiful
浏览 955回答 2
2回答

波斯汪

这是 IPv4 在网络传输中的常见格式,你可以通过 wireshark 抓包工具,在 IPv4 的&nbsp;Source&nbsp;或&nbsp;Destination&nbsp;字段看到。IPv4 地址占用 4 个字节,传输时采用&nbsp;big-endian&nbsp;格式。比如 IP 0x01020304,它在网络中的传输顺序是&nbsp;01 02 03 04,转换成我们日常见到的字符便是 "1.2.3.4"。你所贴的代码SUM&nbsp;+=&nbsp;int(ip_list[i])*256**(3-i)可以理解成SUM&nbsp;|=&nbsp;int(ip_list[i])&nbsp;<<&nbsp;(8*(3-i))即对数组元素依次左移 24、16、8、0 位。除此之外,还有更便捷的方法,如import&nbsp;socketimport&nbsp;struct#&nbsp;字符串&nbsp;->&nbsp;数字a&nbsp;=&nbsp;'1.2.3.4'n&nbsp;=&nbsp;struct.unpack('>I',&nbsp;socket.inet_aton(a))[0]assert&nbsp;n&nbsp;==&nbsp;0x01020304#&nbsp;数字&nbsp;->&nbsp;字符串a2&nbsp;=&nbsp;socket.inet_ntoa(struct.pack('>I',&nbsp;n))assert&nbsp;a2&nbsp;==&nbsp;a
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python