使用Python进行IP地址转换
我想将从十进制格式文件(192.168.65.72)中读取的IP地址转换为二进制格式{110000001010100001000001010001000}。我正在从文件中读取十进制格式的IP地址找到下面的代码片段。使用Python进行IP地址转换
/*contains 192.168.65.72*/
filter = open("filter.txt", "r")
for line in filter:
bytePattern = "([01]?\d\d?|2[0-4]\d|25[0-5])"
regObj = re.compile("\.".join([bytePattern]*4))
for match in regObj.finditer(line):
m1,m2,m3,m4 = match.groups()
print "%s %s %s %s" %(m1, m2, m3, m4)
我想转换M1,M2,M3和M4每进一个8位二进制value.I不能想出一个办法做到that.I是新来python.Any帮助将不胜感激。
干杯。
''.join([ bin(int(x))[2:].rjust(8,'0') for x in '123.123.123.123'.split('.')])
请注意所需的填充。无论值如何,IP中的每个字节都需要用8位表示。 – poke 2010-08-12 06:14:16
@poke哦是的,谢谢提醒:)我现在就做。 – 2010-08-12 06:15:01
'''.join('bin(256 + int(x))[3:] for'123.123.123.123'.split('。')])' – Omnifarious 2010-08-12 06:17:16
>>> bin(192)
'0b11000000'
其余的字符串操作。但是请注意,在一个IP中,除了第一部分外,所有部分都允许为零。
如果你想包含原始数据的32位IP地址的字符串:
import struct
struct.pack('4B', *(int(x) for x in '123.123.123.123'.split('.')))
或者,如果你想包含IP地址的32位整数:
import struct
struct.unpack('>I', struct.pack('4B', *(int(x) for x in '123.123.123.123'.split('.'))))
将IPv4地址从点分四字符串格式(例如“123.45.67.89”)转换为32位打包二进制格式:
socket.inet_aton
("192.168.65.72")
它返回'\ xc0 \ xa8AH' – avi 2013-12-03 05:21:41
@avi:是的,这是正确的。这是代表4个字节的字符串字面值。我建议你切换到Python3,它应该更正确地返回字节文字。 – 2013-12-04 08:53:35
我猜你是要么将IP地址作为一个普通的旧的32位整数,要么你想要4个字节的数据保存一个IP地址。我怀疑你实际上并不想要一个包含32个1和0的字符串。 – Omnifarious 2010-08-12 06:23:10