Как конвертировать IP-адрес в DWORD? - PullRequest
1 голос
/ 07 февраля 2010

Эй, как я могу преобразовать IP-адрес в DWORD, используя python?

Я искал некоторое время, но ничего полезного не нашел.

Спасибо за помощников!

Ответы [ 3 ]

4 голосов
/ 07 февраля 2010

Не катите свое собственное решение.Используйте библиотеку socket.

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

Она будет выдавать исключения, когда не сможет правильно проанализировать адрес, а написание собственных анализаторов для вещей - всего лишь рецепт проблем в будущем.

Выполнение этого также упрощает переход вашего кода на IPv6.И написание собственного парсера адресов для IPv6 было бы очень плохой идеей, потому что адреса IPv6 сложны и имеют несколько странных угловых случаев.

Редактировать: Очевидно, это не работает в Windows.Я не уверен, как вы должны анализировать адреса IPv6 в Windows, но все еще есть вызов библиотеки, который может анализировать адреса IPv4.Это socket.inet_aton, и вы должны использовать его, если socket.inet_pton не существует, вместо того, чтобы переходить к собственному решению.

0 голосов
/ 07 февраля 2010

Python не имеет типа DWORD. Если вам нужно 4-байтовую строку, используйте:

struct.pack('bbbb', *(int(x) for x in '127.0.0.1'.split('.')))
0 голосов
/ 07 февраля 2010

Если у вас правильный 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])
...