将IP地址字符串转换为二进制格式在Python中

15 投票
8 回答
36920 浏览
提问于 2025-04-15 22:08

在一个更大的应用程序中,我想把一个IP地址转换成二进制。这样做的目的是为了后面计算用于局域网唤醒的广播地址。我在想,可能有比我现在想到的方法更有效率。我现在的想法是把IP地址分成四个部分(每个部分叫做八位字节),然后在每个部分前面加上必要的0,把每个部分转换成二进制,最后把这些结果合在一起。请问我应该看看netaddr、sockets,还是其他完全不同的东西呢?

举个例子:把192.168.1.1转换成11000000.10101000.00000001.00000001

8 个回答

8

目的是为了后面计算局域网唤醒(Wake on LAN)流量的广播地址。

ipaddr(参见PEP 3144):

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
9

你想要的是socket.inet_aton()这个函数吗?

9

你是想要下面这样的东西吗?

ip = '192.168.1.1'
print '.'.join([bin(int(x)+256)[3:] for x in ip.split('.')])

我同意其他人的看法,你可能应该避免把它转换成二进制形式来实现你的目标。

撰写回答