将IP地址字符串转换为二进制格式在Python中
在一个更大的应用程序中,我想把一个IP地址转换成二进制。这样做的目的是为了后面计算用于局域网唤醒的广播地址。我在想,可能有比我现在想到的方法更有效率。我现在的想法是把IP地址分成四个部分(每个部分叫做八位字节),然后在每个部分前面加上必要的0,把每个部分转换成二进制,最后把这些结果合在一起。请问我应该看看netaddr、sockets,还是其他完全不同的东西呢?
举个例子:把192.168.1.1转换成11000000.10101000.00000001.00000001
8 个回答
8
目的是为了后面计算局域网唤醒(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
9
你想要的是socket.inet_aton()
这个函数吗?
9
你是想要下面这样的东西吗?
ip = '192.168.1.1'
print '.'.join([bin(int(x)+256)[3:] for x in ip.split('.')])
我同意其他人的看法,你可能应该避免把它转换成二进制形式来实现你的目标。