如何获得给定开始和结束IP地址的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
PS:网络,开始和结束的IP可以在上面是动态的仅仅是一个例。
谢谢...
认识到每个IPv4地址的4个组成部分是真正的00和FF之间的十六进制数。
如果将开始和结束IP地址更改为32位无符号整数,则可以从最低一位循环到最高位,然后将每个循环的值转换回IP地址格式。
您给出的示例中的范围是C0A80002至C0A800FE。
下面是代码的链接是一个十六进制数和IPv4地址
http://technojeeves.com/joomla/index.php/free/58-convert-ip-address-to-number
是的,这是更好的:)记得考虑IPv6。 –
@Ryan:是的,这就是为什么我在我的答案中明确了v4 :-) IPv6是128位,详情在这里http://en.wikipedia.org/wiki/IPv6#Larger_address_space –
开始于2之间转换,数到254,并把“192.168.0。”在它的前面:
for (int i = 2; i <= 254; i++) {
System.out.println("192.168.0." + i);
}
这不是非常通用的。 OP没有指定只有下面的组件需要增加,要么...... – jswolf19
@Ryan:适用于他的具体示例,但如果范围超过1个字节会怎么样? –
@ jswolf19:其实OP只是修改了这个问题,指出实际上只有低字节需要递增:-),但我同意这个答案不是非常通用的。 –
下面是简单的实施方案的输出,你问什么:
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地址的最后部分范围内的工作。
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);
}
}
你必须知道子网才能做到这一点。 –
@OMG小马:我刚刚添加了信息。 – Vishal
你想如何得到结果地址?你只是想打印出来,还是要将它们存储在某种数据结构中? – jswolf19