1

嘿,如何使用 python 将 ip 地址转换为 DWORD?

我搜索了一段时间,但没有发现任何有用的东西。

感谢帮助者!

4

3 回答 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

于 2010-02-07T18:24:29.823 回答
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])
于 2010-02-07T17:48:37.087 回答
-1

Python 没有 DWORD 类型。如果您需要它作为 4 字节字符串,请使用:

struct.pack('bbbb', *(int(x) for x in '127.0.0.1'.split('.')))
于 2010-02-07T17:49:14.790 回答