【发布时间】:2020-05-05 05:06:45
【问题描述】:
给定一个 IP 范围,如 41.216.124.0-41.216.127.27,我想得到以下信息:
41.216.124.*
41.216.125.*
41.216.126.*
41.216.127.*
同样给出 128.1.0.1-191.255.255.254 我想单独列出它们 128.1.0.1-255
128.1.1-255.*
128.2-255.*.*
129-190.*.*
191.0-254.*.*
191.255.*
191.255.255.*
我尝试了各种方法,包括使用正则表达式匹配不重复的字段并尝试找出差异。我通过https://stackoverflow.com/users/6801443/sean-f 遇到了一个非常好的库https://seancfoley.github.io/IPAddress/ 我尝试了以下方法,但似乎无法在文档中找到一种方法。
var ipRange1 = "128.1.0.1-191.255.255.254"; //ipRange1 example
var ipRange2 = "41.216.124.0-41.216.127.27"; //ipRange2 example
import inet.ipaddr.IPAddress;
import inet.ipaddr.IPAddressSeqRange;
import inet.ipaddr.IPAddressString;
String[] subString = ipRange2.split("-");
IPAddressString startIP = new IPAddressString(subString[0]);
IPAddressString endIP = new IPAddressString(subString[1]);
IPAddress one = startIP.getAddress(), two = endIP.getAddress();
IPAddressSeqRange range = one.toSequentialRange(two);
var ips = new HashSet<String>();
IPAddress blocks[] = range.spanWithSequentialBlocks(); // 41.216.124-126.```*```
即使没有这个库,在 Java 中是否也能做到这一点?我试图查询的 API 使用 IP 前缀,这就是我要费尽心思的原因。
【问题讨论】:
标签: java ip-address