Как часть объемного приложения, я пытаюсь преобразовать IP-адрес в двоичный файл. Причем цель состоит в том, чтобы позже вычислить широковещательный адрес для Следа на трафике LAN. Я предполагаю, что существует намного более эффективный способ сделать это затем способ, которым я думаю. Который разбивает IP-адрес октетом, добавляя 0 к началу каждого октета в случае необходимости, преобразовывая каждый октет в двоичный файл, затем комбинируя результаты. Я должен смотреть на netaddr, сокеты или что-то совершенно другое?
Пример: от 192.168.1.1 до 11000000.10101000.00000001.00000001
Вы думаете о чем-то подобном ниже?
ip = '192.168.1.1'
print '.'.join([bin(int(x)+256)[3:] for x in ip.split('.')])
Я согласен с другими, вам, вероятно, следует избегать преобразовать в двоичное представление для достижения желаемого.
Цель состоит в том, чтобы позже вычислить широковещательный адрес для трафика Wake on LAN
import ipaddr
print ipaddr.IPNetwork('192.168.1.1/24').broadcast
# -> 192.168.1.255
В Python 3.3, модуль ipaddress
:
#!/usr/bin/env python3
import ipaddress
print(ipaddress.IPv4Network('192.162.1.1/24', strict=False).broadcast_address)
# -> 192.168.1.255
Чтобы точно соответствовать примеру в вашем вопросе:
# convert ip string to a binary number
print(bin(int(ipaddress.IPv4Address('192.168.1.1'))))
# -> 0b11000000101010000000000100000001