如何从起始IP地址和终止IP地址生成一系列IP地址?
例如,对于网络“192.168.0.0/24”:
String start = "192.168.0.2"
String end = "192.168.0.254"
我希望能够实现以下内容:
192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5
...
192.168.0.254
PS: 网络、起始IP和结束IP可以是动态的,上面只是一个示例。
谢谢...
如何从起始IP地址和终止IP地址生成一系列IP地址?
例如,对于网络“192.168.0.0/24”:
String start = "192.168.0.2"
String end = "192.168.0.254"
我希望能够实现以下内容:
192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5
...
192.168.0.254
请注意,IPv4地址的4个组成部分实际上是介于00和FF之间的十六进制数字。
如果您将起始和结束IP地址更改为32位无符号整数,则可以从最低值循环到最高值,并将每个循环通过的值转换回IP地址格式。
您给出的范围是C0A80002至C0A800FE。
此处提供一段代码,可在十六进制数字和IPv4地址之间进行转换:
http://technojeeves.com/joomla/index.php/free/58-convert-ip-address-to-number
public static void main(String args[]) {
String start = "192.168.0.2";
String end = "192.168.0.254";
String[] startParts = start.split("(?<=\\.)(?!.*\\.)");
String[] endParts = end.split("(?<=\\.)(?!.*\\.)");
int first = Integer.parseInt(startParts[1]);
int last = Integer.parseInt(endParts[1]);
for (int i = first; i <= last; i++) {
System.out.println(startParts[0] + i);
}
}
"(?<=\\.)(?!.*\\.)"
吗? - Labeo"(?<=\\.)"
是一个后顾断言,它断言前面的输入字符是一个点。"(?!.*\\.)"
是一个负向前瞻,它断言接下来的输入不匹配任何数量的字符然后是一个点。"(?<=\\.)(?!.*\\.)"
全部在一起的意思是“仅在点之后(字符之间)匹配,当输入的其余部分不包含点时”,在正常语言中是“最后一个点之后”。 - Bohemian从2开始计数,一直到254,并在前面加上“192.168.0.”:
for (int i = 2; i <= 254; i++) {
System.out.println("192.168.0." + i);
}
void main(String args[])
{
String start = "192.168.0.2";
String end = "192.168.0.254";
String[] startParts = start.split("(?<=\\.)(?!.*\\.)");
String[] endParts = end.split("(?<=\\.)(?!.*\\.)");
int first = Integer.parseInt(startParts[1]);
int last = Integer.parseInt(endParts[1]);
for (int i = first; i <= last; i++)
{
System.out.println(startParts[0] + i);
}
}
使用IPAddress Java库, 您可以透明地使用支持IPv4和IPv6的代码。免责声明:我是IPAddress库的项目经理。
这里是示例代码:
String start = "192.168.0.2", end = "192.168.0.254";
iterate(start, end);
System.out.println();
start = "::1";
end = "::100";
iterate(start, end);
static void iterate(String lowerStr, String upperStr) throws AddressStringException {
IPAddress lower = new IPAddressString(lowerStr).toAddress();
IPAddress upper = new IPAddressString(upperStr).toAddress();
IPAddressSeqRange range = lower.toSequentialRange(upper);
for(IPAddress addr : range.getIterable()) {
System.out.println(addr);
}
}
输出:
192.168.0.2
192.168.0.3
192.168.0.4
...
192.168.0.254
::1
::2
::3
...
::100