java - 234324.32423.234234.324234 是有效的 InetAddress 吗?

标签 java platform inetaddress

有什么办法可以 InetAddress.getByName( 234324.32423.234234.324234 ) 将返回一个非空地址值? 看起来确实如此。

由于这种情况发生在单元测试中,我所要做的就是强制 InetAddress 抛出异常。是否有任何原因导致以下使用 PowerMock 的模拟无法工作?我的类签名之前确实有注释 @RunWith(PowerMockRunner.class) 和 @PrepareForTest({InetAddress.class})

String testIp = "127.0.0.1";
PowerMockito.mockStatic( InetAddress.class );
PowerMockito.when( InetAddress.getByName( testIp ) ).thenThrow( UnknownHostException.class );
MyClass someClassThatCallsInetAddressGetByName = new MyClass( 32 );
someClassThatCallsInetAddressGetByName.setHostAddress( testIp );
someClassThatCallsInetAddressGetByName.getHostAddress();

最佳答案

Is 234324.32423.234234.324234 a valid InetAddress?

没有。

它不是有效的 IPv4 地址,因为 4 部分 IPv4 地址中的数字是 0 到 255 范围内的十进制数字。

它不会解析为 IPv6 地址,因为 IPv6 地址的组成部分是用冒号而不是点分隔的。 (另一种 IPv6 格式具有冒号和点……但至少始终存在一个冒号。)

引用文献:

<小时/>

In my local environment, it returns null. But when migrated to cloud, it seems to return a valid address.

它应该始终返回null。根据 javadocs,这不是一个有效的 IP 地址字符串。 (“迁移到云端”是什么意思?您是否要将代码翻译成其他语言?)

Is this possible? Is InetAddress platform dependent?

不应该,而且不1

根据记录,OpenJDK 中的 IPv4 地址解析确实检查组件编号的范围。

<小时/>

1 - 至少对于任何符合规范的最新版本的 Java 来说不是这样。不兼容的实现可能会这样,但它就不是 Java(tm)。

关于java - 234324.32423.234234.324234 是有效的 InetAddress 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29096535/

相关文章:

java - 如何在主页按钮上向上滑动打开滑动抽屉

android - 在(webOS、BADA 和 Iphone)与 Android 之间做出选择时感到困惑

Java正则表达式替换基于操作系统的文件路径

java - 在 Java 中使用 InetAddress 进行 nslookup 时如何绕过主机文件

java - 如何在 Java 中进行 ping 操作并保存统计信息

java - 如何防止 eclipse Yasson 输出空字符串和空集合

java - 我如何检查给定路径列表中的文件是否存在?

windows - C++编程

java - getLocalHost 和 getByName ("localhost"的 IP 地址不同)..为什么会这样?

java - 在 Android 应用程序中存储和检索用户数据?