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

piz*_*m13 9 python ip binary

作为更大的应用程序的一部分,我试图将IP地址转换为二进制.目的是稍后计算LAN唤醒流量的广播地址.我假设有一种更有效的方式来做我想的方式.这是通过八位字节分解IP地址,在必要时将0添加到每个八位字节的开头,将每个八位字节转换为二进制,然后组合结果.我应该看看netaddr,套接字还是完全不同的东西?

示例:从192.168.1.1到11000000.10101000.00000001.00000001

jfs*_*jfs 8

目的是稍后计算 Wake on LAN 流量的广播地址

ipaddr(见PEP 3144):

import ipaddr

print ipaddr.IPNetwork('192.168.1.1/24').broadcast
# -> 192.168.1.255
Run Code Online (Sandbox Code Playgroud)

在 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
Run Code Online (Sandbox Code Playgroud)

要完全匹配您问题中的示例:

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


EMP*_*EMP 7

套接字.inet_aton()你想要什么?

  • 它似乎工作:`bin(struct.unpack('!I',socket.inet_aton('192.168.1.1'))[0])` - >`'0b11000000101010000000000100000001'` (3认同)

kri*_*iss 7

你想到下面的东西?

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

我同意其他人,你可能应该避免转换为二进制表示来实现你想要的.