使用Python进行IP地址转换

1 投票
5 回答
6627 浏览
提问于 2025-04-16 02:40

我想把从文件中读取的IP地址(十进制格式,比如192.168.65.72)转换成二进制格式(比如{11000000101010000100000101000100})。我正在从文件中读取这个十进制的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位的二进制值。可是我不知道该怎么做。我刚开始学习Python。如果有人能帮忙,我会非常感激。

谢谢!

5 个回答

2

如果你想要一个包含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('.'))))
4

将一个IPv4地址从点分十进制字符串格式(比如‘123.45.67.89’)转换成32位的二进制格式:

socket.inet_aton("192.168.65.72")

5

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们刚开始学习编程的时候。比如,有人可能在使用某个函数时,发现它的表现和预期不一样,这时候就需要去查找原因。

通常,我们可以通过查看文档、搜索网上的讨论或者在编程社区提问来找到解决方案。很多时候,其他人也遇到过类似的问题,他们的经验可以帮助我们更快地解决自己的困扰。

在提问时,描述清楚你遇到的问题、你尝试过的解决方法,以及你希望得到的帮助,这样别人才能更好地理解你的情况并提供有效的建议。

总之,编程的学习过程就是不断解决问题的过程,遇到困难时不要气馁,积极寻求帮助,慢慢就会变得更加熟练。

''.join([ bin(int(x))[2:].rjust(8,'0') for x in '123.123.123.123'.split('.')])

撰写回答