Python:在IP地址八位字节之间执行数学函数

2024-10-01 09:19:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试执行以下操作:

firstoctet * 256 + secondoctet = * 256 + thirdoctet = * 256 + fourthoctet = x

以这个为例:

^{pr2}$

有人能提供一个方法来说明如何做到这一点吗?数学序列没有问题,我只是不确定如何从小数点中取出八位字节值来执行数学函数。在

提前谢谢!在


Tags: 方法函数序列数学小数点八位字节pr2thirdoctet
2条回答

将IP地址字符串转换为如下整数列表:

ip_as_string = "64.233.187.99"
ip_as_ints = [int(a) for a in ip_as_string.split('.')]

ip_as_ints将是[6423318799]。在

我猜您要执行的数学表达式是RPN,用于将字节序列从256位表示转换为单个数字。(感谢影游侠的展示)。您可以通过以下方式轻松获得该单个数字:

^{pr2}$

x是1089059683。在

如果您使用的是python3.3或更高版本,您可以利用the ^{} module来避免重新发明轮子,它甚至提供了一个有用的视图bytesint.from_bytes可以有效地转换为实际的int

from ipaddress import IPv4Address

ip_as_addr = IPv4Address("64.233.187.99")
ip_as_int = int.from_bytes(ip_as_addr.packed, 'big')
print(ip_as_int, hex(ip_as_int))

获取1089059683 0x40e9bb63的输出。在

如果你真的愿意的话,你可以手工完成,我只喜欢上面代码的自我文档化。如果Py 3.3+不是一个选项,则可以通过以下方式获得相同的结果:

^{pr2}$

这只需将八位字节分开,将其转换为int,然后将每个八位字节左移24、16、8和0位(以便正确对齐八位字节),然后允许sum将它们组合成一个int。在

相关问题 更多 >