如何从java中给定ip获得下一个ip地址?
问题描述:
我在寻找一个Java代码片段,它给出了给定IP的下一个地址。
so getNextIPV4Address("10.1.1.1")
返回"10.1.1.2"
。
可以完成字符串捣碎,但可能会变得混乱。有没有一个很正式的方式来做到这一点。
谢谢你的时间。
答
这将让你开始(加入错误处理,角落案件等):
public static final String nextIpAddress(final String input) {
final String[] tokens = input.split("\\.");
if (tokens.length != 4)
throw new IllegalArgumentException();
for (int i = tokens.length - 1; i >= 0; i--) {
final int item = Integer.parseInt(tokens[i]);
if (item < 255) {
tokens[i] = String.valueOf(item + 1);
for (int j = i + 1; j < 4; j++) {
tokens[j] = "0";
}
break;
}
}
return new StringBuilder()
.append(tokens[0]).append('.')
.append(tokens[1]).append('.')
.append(tokens[2]).append('.')
.append(tokens[3])
.toString();
}
测试用例:
@Test
public void testNextIpAddress() {
assertEquals("1.2.3.5", nextIpAddress("1.2.3.4"));
assertEquals("1.2.4.0", nextIpAddress("1.2.3.255"));
}
答
IP地址不是“连续的”,所以我怀疑你会找到一个库来为你做。
答
IP地址几乎只是一个32位整数。根据你如何存储它,可能只是增加这个基础值。这可能不会很可靠,但是你必须考虑子网,不同的地址类别等。
正如dty指出的那样,IP地址不是顺序的,所以我不会想象有任何一种'正式'这样做的方式。
答
将字符串拆分为“。”。并将4个字符串转换为字节。将所有字节相乘以获得int乘法。增加结果。通过在每个字节中分割整数并存储mod来恢复字节。将字节转换为字符串并将所有字符串连接起来。
答
按.
拆分,将最后一个元素转换为int并将其增加。检查它的值是否小于254,否则你会赢得广播地址。祈祷你总是处理完整的C类子网。
答
我正在寻找一个Java代码片段,它给出了给定IP的下一个地址。
下面是你的一个片段:
public static String getNextIPV4Address(String ip) {
String[] nums = ip.split("\\.");
int i = (Integer.parseInt(nums[0]) << 24 | Integer.parseInt(nums[2]) << 8
| Integer.parseInt(nums[1]) << 16 | Integer.parseInt(nums[3])) + 1;
// If you wish to skip over .255 addresses.
if ((byte) i == -1) i++;
return String.format("%d.%d.%d.%d", i >>> 24 & 0xFF, i >> 16 & 0xFF,
i >> 8 & 0xFF, i >> 0 & 0xFF);
}
例如输入/输出(ideone.com demonstration):
10.1.1.0 -> 10.1.1.1
10.255.255.255 -> 11.0.0.0
10.0.255.254 -> 10.1.0.0
谢谢肖恩,帮助.. – Rajan 2011-06-10 14:30:30