有没有一种简单的方法将字符串转换为Java中的Inetaddress?
我想将字符串转换为Inetaddress
。我不想解析主机名:字符串是ipv4地址。 InetAddress.getByName(String host)
工作吗?或者我必须手动解析它?有没有一种简单的方法将字符串转换为Java中的Inetaddress?
com.google.common.net.InetAddresses.forString(String ipString)
对此更好,因为无论传递给它的字符串如何,它都不会执行DNS查找。
在通过String
到getByName()
之前,您可以尝试using a regular expression to filter-out non-numeric IP addresses。那么getByName()
将不会尝试名称解析。
当心:看来,解析一个无效的地址,如InetAddress.getByName("999.999.999.999"
)将不导致异常正如人们从文档的这句期待:
地址格式的有效性进行检查
经验地说,我发现自己获得了一个InetAddress实例,其中包含本地计算机的原始IP地址和无效的IP地址作为主机名。当然,这不是我所期望的!
从Java 7开始,这将抛出UnknownHostException;还没有检查早期的Java,但我也期望有一个例外。 – 2015-03-12 12:38:40
The open-source IPAddress Java library将验证IPv6和IPv4的所有标准表示,并且将在没有DNS查找的情况下进行验证。免责声明:我是该图书馆的项目经理。
下面的代码将做您要求什么:
String s = "1.2.3.4";
try {
IPAddressString str = new IPAddressString(s);
IPAddress addr = str.toAddress();
InetAddress inetAddress = addr.toInetAddress(); //IPv4 or IPv6
if(addr.isIPv4() || addr.isIPv4Convertible()) {//IPv4 specific
IPv4Address ipv4Addr = addr.toIPv4();
Inet4Address inetAddr = ipv4Addr.toInetAddress();
//use address
}
} catch(AddressStringException e) {
//e.getMessage has validation error
}
这是[Guava]的一部分(http://docs.guava-libraries.googlecode.com/git-history/v10.0.1/javadoc/com/google/common/net/InetAddresses.html)。 – 2012-06-19 16:37:07
它应该是'com.google.common.net.InetAddresses.forString'(带有大写A的'InetAddresses')。因为编辑必须至少有6个字符,所以我不会允许我在你的回答中纠正这个问题。 ;-) 无论如何,谢谢,正在寻找它,又一次番石榴拯救了这一天。 – silmeth 2016-10-20 14:10:57