gpt4 book ai didi

java - 在 Java 中检查有效的 IPv4 地址

转载 作者:搜寻专家 更新时间:2023-10-31 08:05:48 26 4
gpt4 key购买 nike

我正在使用 sun.net.util.IPAddressUtil 包来检查字符串是否包含有效的 IPv4 和 IPv6 地址。

代码片段是:-

String ipv4addr="200";

if(IPAddressUtil.isIPv4LiteralAddress(ipv4addr))
{
System.out.println("valid ipv4 address");
}
else
{
System.out.println("not valid");

}

但是对于 200 和 300 这样的地址,它仍然说它是一个有效的 IPv4 地址,但事实并非如此。当我使用相同的包并使用 :-

检查 IPV6 地址时
String ipv6addr="200";

if(IPAddressUtil.isIPv6LiteralAddress(ipv6addr))
{
System.out.println("valid ipv6 address");
}
else
{
System.out.println("not valid");

}

我得到了正确的结果。但是,IPv4 似乎无法正常工作,或者可能是我使用不当。请指导我。我不想使用正则表达式进行 IPv4 验证...

最佳答案

您获得“有效”结果是有原因的:200 是一个有效的 IPv4 地址。

看,对于计算机来说,IPv4 地址只是一个 32 位数字。这些点完全是为了方便我们,因为我们人类不擅长记住大而精确的数字。但他们不必在那里;关于如何解析地址的规则取决于它有多少部分。

当一个地址由一个数字组成时,它被认为是一个 32 位数字,每个字节是该数字的 8 位。如果您要将 "200" 解析为 IP 地址,则它相当于 0.0.0.200。同样,"2130706433" 等同于 127.0.0.1。

本地址有两部分时也有标准,比如 0.200(第一部分是第一个字节,第二部分是代表其他 3 个字节的 24 位数字),甚至 0.0.200(前两个数字是字节,最后一部分是 16 位,占用另外 2 个字节)。 “不寻常”格式是 IP 地址类时代的遗留物,但几乎所有必须解析地址的软件都能理解它们。 (如果您打开浏览器并转到 http://1249739112* 甚至 http://74.125.33128* ,例如,将出现 Google 的主页。)

* 查看可点击链接的评论。谢谢,“链接 validator ”。 :P

参见 http://download.oracle.com/javase/6/docs/api/java/net/Inet4Address.htmlhttp://www.perlmonks.org/?node_id=221512 , 或 http://en.wikipedia.org/wiki/IPv4#Address_representations ,了解更多详情。

Java 也能理解这些格式(.net 以及任何体面的操作系统也是如此),并正确解析地址,无论它包含 1、2、3 还是 4 部分。

如果你想检查一个可能的地址实际上看起来像“xxx.xxx.xxx.xxx”,那么你可能想要使用模式或使用考虑 32- 的验证库来明确检查位号作为无效地址(即使它们是有效的)。不过,我不会打扰 - 如果您使用提供的查找功能,您可以接受任何标准格式的地址并且它会起作用。

(所有这些乱七八糟的事情都随着 IPv6 发生了变化;格式更加严格,您不能只输入一些 36 位数字并期望它能正常工作。但是该平台仍然知道如何解析地址,您应该相信它会这样做。)

关于java - 在 Java 中检查有效的 IPv4 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7550806/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com