文字列をInetaddress
に変換しようとしています。ホスト名を解決しようとはしていません。文字列はipv4アドレスです。 InetAddress.getByName(String Host)
は機能しますか?または、手動で解析する必要がありますか?
com.google.common.net.InetAddresses.forString(String ipString)
は、渡される文字列に関係なくDNSルックアップを実行しないため、これに適しています。
はい、それはうまくいきます。 API は、これについて非常に明確です(「ホスト名は、「Java.Sun.com」などのマシン名、またはそのIPアドレスのテキスト表現のいずれかです。」)。もちろん、簡単に自分で確認できます。
注意:InetAddress.getByName("999.999.999.999"
)などの無効なアドレスを解析すると、ドキュメントのフレーズから予想されるように、not例外が発生するようです。
アドレス形式の有効性がチェックされます
経験的に、ローカルマシンの生のIPアドレスと無効なIPアドレスをホスト名として持つInetAddressインスタンスを取得していることに気付きました。確かにこれは私が期待したものではありませんでした!
オープンソースのIPアドレスJavaライブラリ は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
}
String
をgetByName()
に渡す前に、 正規表現を使用して数値以外のIPアドレスを除外する を試すことができます。その場合、getByName()
は名前解決を試みません。