如何将IP地址转换为DWORD?

1 投票
3 回答
3670 浏览
提问于 2025-04-15 19:00

嘿,我想用Python把IP地址转换成DWORD格式,应该怎么做呢?

我找了好一会儿,但没找到什么有用的资料。

谢谢大家的帮助!

3 个回答

0

假设你有一个正确的IPv4地址,你可以这样做,例如:

import struct

ip = "192.168.2.101"
components = map(int, ip.split("."))
asLittleEndianDword = struct.pack("<I", (components[0] << 24) |
                                        (components[1] << 16) |
                                        (components[2] << 8) |
                                        components[3])
4

别自己瞎搞解决方案,直接用 socket 库就行。

import socket
socket.inet_pton(socket.AF_INET, "127.0.0.1")

如果地址解析不正确,它会抛出异常。自己写解析器会给你带来很多麻烦。

这样做还可以让你的代码更容易适应IPv6。自己写一个IPv6地址解析器可不是什么好主意,因为IPv6地址很复杂,还有一些奇怪的情况。

补充:显然,这在Windows上不太好使。我不太确定在Windows上该怎么解析IPv6地址,但仍然有一个库可以解析IPv4地址。那就是 socket.inet_aton,如果 socket.inet_pton 不存在的话,你应该用这个,而不是自己再去写一个解决方案。

-1

Python没有DWORD这种类型。如果你需要一个4字节的字符串,可以使用:

struct.pack('bbbb', *(int(x) for x in '127.0.0.1'.split('.')))

撰写回答