我正在尝试将字符串转换为Inetaddress。我没有尝试解析主机名:字符串是IPv4地址。InetAddress.getByName(String host)能用吗?还是我必须手动解析它?
Inetaddress
InetAddress.getByName(String host)
e5nszbig1#
com.google.common.net.InetAddresses.forString(String ipString)在这方面更好,因为无论传递给它的是什么字符串,它都不会进行DNS查找。
com.google.common.net.InetAddresses.forString(String ipString)
k2arahey2#
是的,那会有用的。API对此非常清楚(“主机名可以是机器名,如“java.sun.com“,也可以是其IP地址的文本表示”),当然您可以轻松地检查自己。
uelo1irk3#
注意:解析一个无效的地址,比如InetAddress.getByName("999.999.999.999"),似乎不会像文档中的短语所期望的那样导致异常:检查地址格式的有效性根据经验,我发现自己得到了一个InetAddress示例,该示例使用本地机器的原始IP地址和无效的IP地址作为主机名。这肯定不是我所期望的!
InetAddress.getByName("999.999.999.999"
csbfibhn4#
在将String传递给getByName()之前,您可以尝试using a regular expression to filter-out non-numeric IP addresses。那么getByName()将不会尝试名称解析。
String
getByName()
k4emjkb15#
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 }
x9ybnkn66#
使用DNSJava库,您还可以解析它。
InetAddress address = Address.getByAddress(ipString)
没有外部调用,只使用Address.toByteArray方法。
Address.toByteArray
6条答案
按热度按时间e5nszbig1#
com.google.common.net.InetAddresses.forString(String ipString)
在这方面更好,因为无论传递给它的是什么字符串,它都不会进行DNS查找。k2arahey2#
是的,那会有用的。API对此非常清楚(“主机名可以是机器名,如“java.sun.com“,也可以是其IP地址的文本表示”),当然您可以轻松地检查自己。
uelo1irk3#
注意:解析一个无效的地址,比如
InetAddress.getByName("999.999.999.999"
),似乎不会像文档中的短语所期望的那样导致异常:检查地址格式的有效性
根据经验,我发现自己得到了一个InetAddress示例,该示例使用本地机器的原始IP地址和无效的IP地址作为主机名。这肯定不是我所期望的!
csbfibhn4#
在将
String
传递给getByName()
之前,您可以尝试using a regular expression to filter-out non-numeric IP addresses。那么getByName()
将不会尝试名称解析。k4emjkb15#
The open-source IPAddress Java library将验证IPv6和IPv4的所有标准表示,并且无需DNS查找。免责声明:我是那个图书馆的项目经理。
下面的代码将执行您所请求的操作:
x9ybnkn66#
使用DNSJava库,您还可以解析它。
没有外部调用,只使用
Address.toByteArray
方法。