gpt4 book ai didi

php - 查找两个 IPv4 地址之间的网络距离(不是地理距离)

转载 作者:太空宇宙 更新时间:2023-11-03 18:53:55 24 4
gpt4 key购买 nike

给定一个 IPv4 地址(needle)和一个未排序的 IPv4 地址数组(haystack),我如何以编程方式确定给定的 haystack 中哪个单个地址最接近(网络方面的,而不是地理上的)needle?

由于我无法访问每个地址的网络掩码,因此解决方案应忽略网络掩码和跟踪路由之类的选项。

使用了各种地址,我的意思是:私有(private)、保留、广播、lan 和 wan。

欢迎以理论、伪代码、Python、PHP 或 Perl 形式提供任何帮助。

问题Getting IP address list between two IP addresses大致相似,但确实相当精简。

最佳答案

我仍然不太确定你在问什么,但根据你的评论

@PeterGibson by closest I meant, 192.168.1.101 is closer to 192.168.56.1 than to 172.30.130.66 . And 192.168.1.254 is closer to 192.168.1.240 than to 192.168.2.1

您可以尝试使用以下 python 代码来实现距离函数:

import socket
def dist(a, b):
def to_num(addr):
# parse the address string into integer quads
quads = map(ord, socket.inet_aton(addr))
# spread the quads out
return reduce(lambda x,y: x * 0x10000 + y, quads)
return abs(to_num(a) - to_num(b))

返回的数字相当任意,但应该足以满足基本需求。我仍然不确定它应该如何处理广播地址等。

一些例子:

>>> dist('192.168.1.254', '192.168.1.240')
14L
>>> dist('192.168.1.254', '192.168.2.1')
65283L
>>> dist('192.168.1.101', '192.168.56.1')
3604380L
>>> dist('192.168.1.101', '172.30.130.66')
5630092231245859L

关于php - 查找两个 IPv4 地址之间的网络距离(不是地理距离),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17699065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com