Эй, как я могу конвертировать ip-адрес в DWORD с помощью python?Как конвертировать ip-адрес в DWORD?
Я искал какое-то время, но не нашел ничего полезного.
Спасибо за помощь!
Эй, как я могу конвертировать ip-адрес в DWORD с помощью python?Как конвертировать ip-адрес в DWORD?
Я искал какое-то время, но не нашел ничего полезного.
Спасибо за помощь!
Python не имеет тип DWORD. Если вам это необходимо в качестве 4-байтовой строки, используйте:
struct.pack('bbbb', *(int(x) for x in '127.0.0.1'.split('.')))
И если энсинус не удастся, вы бы сделали наоборот ('127.0.0.1'.split ('. '))? –
Нет, я бы просто использовал '[:: - 1]' в результирующей строке. –
Я бы обработал 'struct' проблемы с контентом. – Omnifarious
Если у вас есть правильный 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])
Не катите свое собственное решение. Используйте библиотеку 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
не существует, а не сворачивает собственное решение.
Для этого есть отличный звонок для библиотеки. 'Struct.inet_pton'. Вы должны использовать его вместо того, чтобы опрокидывать свой собственный парсер. – Omnifarious
... если вы не используете Windows. Это не в библиотеке сокетов на этой платформе. inet_aton, однако. –
См. Также http://stackoverflow.com/questions/317531/python-packing-an-ip-address-as-a-ctype-c-ulong-for-use-with-dll (например). –