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

在Python中将IP地址字符串转换为二进制,python,binary,ip,Python,Binary,Ip,作为大型应用程序的一部分,我正在尝试将IP地址转换为二进制。目的是稍后计算LAN唤醒流量的广播地址。我假设有一种比我现在的想法更有效的方法来做这件事。这就是将IP地址按八位字节分解,必要时在每个八位字节的开头添加0,将每个八位字节转换为二进制,然后合并结果。我应该看看NetAddress、套接字还是完全不同的东西 示例:从192.168.1.1到11000000.10101000.00000001.00000001是。inet\u aton()您想要什么 目的是稍后计算LAN唤醒流量的广播地址

作为大型应用程序的一部分,我正在尝试将IP地址转换为二进制。目的是稍后计算LAN唤醒流量的广播地址。我假设有一种比我现在的想法更有效的方法来做这件事。这就是将IP地址按八位字节分解,必要时在每个八位字节的开头添加0,将每个八位字节转换为二进制,然后合并结果。我应该看看NetAddress、套接字还是完全不同的东西


示例:从192.168.1.1到11000000.10101000.00000001.00000001是。
inet\u aton()
您想要什么

目的是稍后计算LAN唤醒流量的广播地址

(见):

在Python 3.3中:

要完全匹配问题中的示例,请执行以下操作:

# convert ip string to a binary number
print(bin(int(ipaddress.IPv4Address('192.168.1.1'))))
# -> 0b11000000101010000000000100000001

你想到下面这样的事情吗

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

我同意其他人的看法,您可能应该避免转换为二进制表示以实现您想要的结果。

您可以使用字符串格式函数将数字转换为二进制。我做了这个功能:

这将返回二进制IP或IP范围,因此您可以使用它来测试IP是否在以下范围内:

ip2bin('255.255.127.0') '11111111111111110111111100000000' >>>ip2bin('255.255.127.0/24') '111111111111111101111111' >>>ip2bin('255.255.127.123')。开始使用(ip2bin('255.255.127.0/24')) 真的
在变量中定义IP地址

ipadd = "10.10.20.20"
转换列表中的IP地址

ip = ipadd.split(".")
现在将IP地址转换为二进制数

print ('{0:08b}.{1:08b}.{2:08b}. 
    {3:08b}'.format(int(ip[0]),int(ip[1]),int(ip[2]),int(ip[3])))

00001010.00001010.00010100.00010100
输出

11000000.10101000.00000001.00000001

您是否希望将IPv4地址转换为其整数表示形式?或者您试图转换为什么二进制表示形式?例如:从192.168.1.1转换为11000000.10101000.00000001.00000001这是一种极不常见的表示IP地址的方式。我不认为存在任何模块来产生或使用这种格式。你的想法是非常好和有效的,IMHO。它似乎可以工作:
bin(struct.unpack(“!I',socket.inet_aton('192.168.1.1'))[0])
->
'0b11000000101000000000010000001'
这就是我想要的,但是,我不完全理解它是如何工作的。我知道您正在将ip地址按“.”拆分,然后将结果按“.”合并,并从整数转换为二进制,但这一点:“(x)+256)[3:]表示x in”,完全丢失。你能指对方向看看你在做什么吗?@pizzim13:没有魔法。你很了解它的工作原理。+256总是有一个9位的二进制数,然后很容易删除数字前面的0b1。@pizzim13:对于
[…x in…]
部分,请查看python文档中的列表理解。这正是我要找的。非常感谢。
ip = ipadd.split(".")
print ('{0:08b}.{1:08b}.{2:08b}. 
    {3:08b}'.format(int(ip[0]),int(ip[1]),int(ip[2]),int(ip[3])))

00001010.00001010.00010100.00010100
IP = '192.168.1.1'

ip2bin =  ".".join(map(str,["{0:08b}".format(int(x)) for x in IP.split(".")]))
print(ip2bin)
11000000.10101000.00000001.00000001