我想对IP地址字符串进行快速的子网内检查。将字符串转换为整数将是一项代价高昂的操作,并且希望尽可能快地获得代码。 a
库不提供IPv6子网内检查,IPv4版本相当慢。
考虑以下输入:
SubnetUtils
这应该导致
IP: aaaa:aaaa:aaaa:aaaa:aaaa:aaaa:aaaa:aaaa
Subnet: aaaa:aaaa:aaaa:aaaa:aaaa:aaaa:aaaa:aaaa/128
,因为IP地址包含在子网中。
在Java中为IPv4和IPv6执行此计算的最快方法是什么?
我将包含并更新以下建议解决方案的基准测试结果:
true
答案 0 :(得分:0)
我已经尝试使用open-source IPAddress Java library进行基准测试,以与上述其他基准(CIDRUtils,SubnetUtils和Ineter)进行比较。免责声明:我是IPAddress库的项目经理。您还可以参考“使用CIDRUtils和对IPv6使用Ineter的按字符进行优化的比较”,但我无权访问该代码。
IPAddress的代码比其他代码更简单。与其他代码不同,IPv4和IPv6的代码相同,只是一行:
boolean result = new IPAddressString(ipRange).prefixEquals(new IPAddressString(ip));
请随意尝试。
您的测试是:
根据Macbook Pro笔记本电脑上基准测试的10次单独运行,结果显示:
当然,在其他机器上,里程可能会有所不同。但是,根据我的测量,似乎Ineter在使用IPv6时速度稍快,但是在IPv4 / 24子网中速度稍慢,而在完整的/ 32 IPv4子网中速度慢得多。但是,IPAddress稍有不同,因为IPv4和IPv6的代码相同,而Ineter则需要特定于IPv4或IPv6的代码。