如何在给定起始和结束IP地址的情况下生成IP地址范围?

时间:2011-09-05 03:43:41

标签: java

如何从起始和结束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都可以动态上面只是一个例子。

...谢谢

5 个答案:

答案 0 :(得分:10)

认识到IPv4地址的4个组成部分中的每一个都是00到FF之间的十六进制数。

如果将开始和结束IP地址更改为32位无符号整数,则可以从最低的一个循环到最高的一个,并将循环的每个值转换回IP地址格式。

您给出的示例中的范围是C0A80002到C0A800FE。

这是一个代码链接,用于在十六进制数和IPv4地址之间进行转换

http://technojeeves.com/joomla/index.php/free/58-convert-ip-address-to-number

答案 1 :(得分:3)

这是一个简单的实现,输出您要求的内容:

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);
    }
}

请注意,这将适用于涉及IP地址的 last 部分的范围。

答案 2 :(得分:2)

从2开始,计数到254,然后输入“192.168.0”。在它面前:

for (int i = 2; i <= 254; i++) {
    System.out.println("192.168.0." + i);
}

答案 3 :(得分:1)

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);
}
}

答案 4 :(得分:0)

通过The IPAddress Java library,您可以透明地使用可同时用于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