web-dev-qa-db-ja.com

Javaで文字列をInetaddressに変換する簡単な方法はありますか?

文字列をInetaddressに変換しようとしています。ホスト名を解決しようとはしていません。文字列はipv4アドレスです。 InetAddress.getByName(String Host)は機能しますか?または、手動で解析する必要がありますか?

25
TiansHUo

com.google.common.net.InetAddresses.forString(String ipString)は、渡される文字列に関係なくDNSルックアップを実行しないため、これに適しています。

19

はい、それはうまくいきます。 API は、これについて非常に明確です(「ホスト名は、「Java.Sun.com」などのマシン名、またはそのIPアドレスのテキスト表現のいずれかです。」)。もちろん、簡単に自分で確認できます。

14

注意:InetAddress.getByName("999.999.999.999")などの無効なアドレスを解析すると、ドキュメントのフレーズから予想されるように、not例外が発生するようです。

アドレス形式の有効性がチェックされます

経験的に、ローカルマシンの生のIPアドレスと無効なIPアドレスをホスト名として持つInetAddressインスタンスを取得していることに気付きました。確かにこれは私が期待したものではありませんでした!

3
wu-lee

オープンソースの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
      }
1
Sean F

StringgetByName()に渡す前に、 正規表現を使用して数値以外のIPアドレスを除外する を試すことができます。その場合、getByName()は名前解決を試みません。

1
Raedwald