2017-02-08 8 views
1

Javaコードを使用して、このアプリケーションを実行している現在のマシンのデフォルトのネットワークインターフェイスを検索しようとしています。Javaからデフォルトのネットワークインターフェイスを取得する

私の方法です。私は現在eth0を探しています。しかし、私がMacでローカルに実行している場合は、en0: Wi-Fi (AirPort)を使いたいかもしれません。 Javaを介してデフォルトのネットワークインタフェースに完全に解決する方法はありますか?

private String getDefaultNetworkInterface() { 
    try { 
     final Enumeration<NetworkInterface> netifs = NetworkInterface.getNetworkInterfaces(); 

     while (netifs.hasMoreElements()) { 
      NetworkInterface networkInterface = netifs.nextElement(); 
      if (networkInterface.getName().toLowerCase().contains("eth0")) { 
       return networkInterface.getName(); 
      } 
     } 
    } catch (Exception e) { 
     logger.error(e); 
    } 
    return null; 
} 
+2

次のような何かを行うことができ、現在のマシンのIPアドレスを持っていると仮定すると? –

+0

@ThorbjørnRavnAndersen外部の世界と通信するために使用されているもののうち、例えば 'eth0'や' en0'のような主要なもの – Ramie

+1

この場合、より多くの情報、すなわちルーティングテーブルが必要です。 'netstat -rn'(またはそれに類するもの)の出力のデフォルトゲートウェイを探します。これはかなり複雑になり、また時間とともに変化することに注意してください。あなたが解決する必要がある問題は何ですか? –

答えて

1

、あなたが「デフォルトのネットワーク・インターフェース」を定義するにはどうすればよい

 final Enumeration<NetworkInterface> netifs = NetworkInterface.getNetworkInterfaces(); 

     // hostname is passed to your method 
     InetAddress myAddr = InetAddress.getByName(hostname); 


     while (netifs.hasMoreElements()) { 
      NetworkInterface networkInterface = netifs.nextElement(); 
      Enumeration<InetAddress> inAddrs = networkInterface.getInetAddresses(); 
      while (inAddrs.hasMoreElements()) { 
       InetAddress inAddr = inAddrs.nextElement(); 
       if (inAddr.equals(myAddr)) { 
        return networkInterface.getName(); 
       } 


     } 
+2

あなたが 'ホスト名'を持っていない場合や気にしたくない場合は、 'InetAddress myAddr = InetAddress.getLocalHost();'を使います。 – Holger

関連する問題