将字符串转换为 InetAddress 而不进行 DNS 查找

2022-09-01 19:00:06

我有一个以点分十进制表示法表示法的本地IP地址。我想将其转换为要将其提供给 ,但我需要在不执行DNS查找的情况下执行此操作(因为这可能会导致长时间的超时)。StringInetAddressSocket

有没有现成的方法,或者我是否需要拆分并从其字节创建?StringInetAddress

更新工厂方法似乎不太合适,因为它们也都接受诸如.没有说他们是否会尝试在实现中联系DNS服务器。InetAddress.getByName()InetAddress.getByAddress()java.sun.com


答案 1

喜欢这个

InetAddress inetAddress = InetAddress.getByName("192.168.0.105");

如果提供了文本 IP 地址,则仅检查地址格式的有效性。

java 源代码

// if host is an IP address, we won't do further lookup    
if (Character.digit(host.charAt(0), 16) != -1 || (host.charAt(0) == ':')) {

}

答案 2

您可以使用Guava的InetAddresses#forString(),它专门针对您的用例进行了记录:

返回具有给定字符串表示形式的 InetAddress
这故意避免了所有名称服务查找(例如,没有DNS)。

(着重号后加)