2012-03-21 14 views
2

LinuxマシンからローカルIPアドレスを取得しようとしていますただし、はループバックを取得します。 (私はこれらのいずれかに興味があった)、私はこれを実行すると、私は2つのIPアドレスを取得LinuxマシンのJavaから実際のIPを取得する方法

NetworkInterface ni = NetworkInterface.getByName("eth0");  
Enumeration<InetAddress> inetAddresses = ni.getInetAddresses(); 
while(inetAddresses.hasMoreElements()) { 
     InetAddress ia = inetAddresses.nextElement(); 
     if(!ia.isLinkLocalAddress()) { 
       //this is not loopback 
     }  
} 

:私は、次のコードを(私は私がやっていることは正しいかどうかを確認していない)を使用していますことを行うには
私がifconfigをするときには、 はeth0のエントリにあり、もう1つはeth0:54のエントリに入っています。
私はeth0:54が何であるか分かりません。

私が望むIPを取得するにはどうすればよいですか?

+1

、これを試してみてください。そしてそれは私が意味することです:どの機能をエンドユーザーに実装しようとしていますか? –

+1

@AndrewThompson:ログの一部としてマシンのIPアドレスを記録することが予想されます – Jim

+0

どこから見たIPアドレス? –

答えて

1

現代のコンピュータには、複数のIP番号があり、いずれも127.0.0.1です。実際の設定がJavaレイヤーに正しく報告されるとは限りません(私のの経験)。

/sbin/ifconfig -aをスケジュールベース(または起動時)に実行し、完全な出力を記録するだけでも構いません。

+0

しかし、私はリスト全体を必要としません。他のIPユーザーがブラウザからWebアプリケーションにアクセスするために使用するのは – Jim

+0

代わりにHTTPRequest URLからキャプチャします。 –

3

Linuxマシンは、ループバックを含む複数のIPアドレスを持つことができます。 IPアドレスの一意性の概念はありません。

あなたが探しているのは、ホスト名(およびそのIPアドレス)です。これは、/ etc/hostnameを読み、そのIPアドレスを調べることで取得できます。注意:マシンが通常の方法でセットアップされていない場合、IPアドレスを持たない可能性があります。

1

私は同じ質問があったが、代わりのJavaのPHPを使用して:

Simply find the ip address of server

最良の答えが本当に言語であなたを行う必要はありません深刻なバックフリップなしに、一般的に可能ではないということでした基礎となるシステムを使用しており、より多くのことを行っています。

0

は「私が取得しようとしています..」*あなたは一瞬のために取得しようとしているもの忘れ、&あなたが達成しようとしているかを説明*

import java.io.*; 
import java.net.*; 
import java.util.*; 
import static java.lang.System.out; 

public class ListNets { 

public static void main(String args[]) throws SocketException, UnknownHostException { 
    System.out.println(System.getProperty("os.name")); 
    Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces(); 
    for (NetworkInterface netint : Collections.list(nets)) 
     if (netint.getName().equals("wlan0") || netint.getName().equals("en0")) { 
      displayInterfaceInformation(netint); 
     }  
} 

static void displayInterfaceInformation(NetworkInterface netint) throws SocketException { 
    out.printf("Display name: %s\n", netint.getDisplayName()); 
    out.printf("Name: %s\n", netint.getName()); 
    Enumeration<InetAddress> inetAddresses = netint.getInetAddresses(); 
    for (InetAddress inetAddress : Collections.list(inetAddresses)) { 

     out.printf("InetAddress: %s\n", inetAddress); 
    } 
    out.printf("\n"); 
} 
} 
関連する問題