【发布时间】:2013-07-15 23:07:19
【问题描述】:
给定一个 IPv4 地址(needle)和一个未排序的 IPv4 地址数组(haystack),我如何以编程方式确定给定 haystack 中的哪个单个地址最接近(网络上,而不是地理上)needle?
由于我无法访问每个地址的网络掩码,因此解决方案应忽略网络掩码和 traceroute 类似选项。
使用各种地址,我的意思是:私有、保留、广播、局域网和广域网。
欢迎任何理论、伪代码、python、php 或 perl 形式的帮助。
Getting IP address list between two IP addresses 的问题大致相似,但确实很切题。
【问题讨论】:
-
您能否解释一下“最接近网络”的含义?
-
不确定您所说的最接近是什么意思?至于你的各种地址,都只是IP,没有网络掩码,地址的网络/广播状态是未知的。 LAN/WAN 用于人类理解。几乎和IP是一个IP是一个IP。话虽这么说,您的意思是如果给出 10.10.0.1 的针头和 '10.20.0.1, 10.30.0.1, 10.10.0.0, 10.10.0.3' 的草垛,程序会吐回 10.10.0.0 吗?因为它是数字上最接近的?
-
在 perl(和 python)中也像 Net::Cidr 但没有掩码会变得很困难..
-
@PeterGibson 最接近我的意思是, 192.168.1.101 更接近 192.168.56.1 而不是 172.30.130.66 。并且 192.168.1.254 更接近 192.168.1.240 而不是 192.168.2.1
-
@msantos 但是你应用了什么规则,因为如果忽略子网掩码,192.168.2.1 距离 192.168.1.254 2 IPS,距离 1.240 14 IPS(假设 > /23 掩码)。在您的示例中,您仍在应用子网。如果您只是在寻找“距离”,请将两个 ips 转换为整数并查看它们之间差异的绝对值
标签: php python networking