1

Javaを使用してコンピュータのワイドエリアネットワークを取得するにはどうすればよいですか?私はこれで試してみます:

ServerSocket ss = new ServerSocket(port);
System.out.println(ss.getInetAddress().getHostAddress());
//wich return 0.0.0.0

それから私はこれで試してみます:

System.out.println(InetAddress.getLocalHost().toString());
//which return keenan-a658368c/192.168.1.100 < yes it is connected to router

関数が言ったように、それは私のローカルIPアドレスを返します

WAN IPアドレスを取得するにはどうすればよいですか?118.137.43.219など

4

5 に答える 5

2

http://whatismyip.com/automation/n09230945.aspから入手できます。このサイトへのHttpURLConnectionを開いて、出力を解析できます。

このプログラムは役立つはずです:

import java.net.HttpURLConnection;

public class GetExternalIp {

    public static void main(String args[]) {
        try {

            java.net.URL url = new java.net.URL(
                    "http://whatismyip.com/automation/n09230945.asp");

            java.net.HttpURLConnection con = (HttpURLConnection) url
                    .openConnection();

            java.io.InputStream stream = con.getInputStream();

            java.io.InputStreamReader reader = new java.io.InputStreamReader(
                    stream);

            java.io.BufferedReader bReader = new java.io.BufferedReader(reader);

            System.out.print("Your IP address is " + bReader.readLine());

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

参照元:

http://www.daniweb.com/forums/thread192872.html

http://www.coderanch.com/t/411356/java/java/Public-IP-Address-time-limit

于 2010-10-07T15:27:06.067 に答える
2

「外部IPアドレス」で応答するリモートサービスを使用することになった場合(それが何であるかの定義については他の回答を参照してください)、無料の名前のないものの1つを使用しないでください。独自にデプロイします。誰かのAcmeWhats-My-IP3000に依存するアプリケーションを構築してはなりません。このアプリケーションは、いつでも、あなたや他の不幸なユーザーに通知することなくなくなる可能性があります。

于 2010-10-07T15:44:14.047 に答える
1

コメントで述べられているように、NATを実行しているルーターの背後にいる場合、マシンはそのWANアドレスを認識しません。

より複雑なケースは、NATプールの背後にいる場合です。これが当てはまる場合、WANアドレスは定期的に、おそらく1日に1回以上頻繁に変更される可能性があります。

または、特定の種類のトラフィックがプロキシを介して強制される場合があります。これにより、アウトバウンドHTTPリクエストがSSHまたは他の任意のプロトコルとは異なるWANアドレスから送信される可能性があります。

于 2010-10-07T15:01:37.157 に答える
0

コンピューターのプライマリインターフェイスのIPアドレスを取得するには:

InetAddress.getLocalHost().getHostAddress()

すべてのインターフェースのIPアドレスを取得するには:

List<InetAddress> addresses = new LinkedList<InetAddress>();
Enumeration<NetworkInterface> ifcs = NetworkInterface.getNetworkInterfaces();
while (ifcs.hasMoreElements()) {
    NetworkInterface ifc = ifcs.nextElement();
    for (InterfaceAddress ifcAddr : ifc.getInterfaceAddresses()) {
        addresses.add(ifcAddr.getAddress());
    }
}

インターネット上の他のマシンがコンピュータからの接続を参照するIPアドレスを取得するには、YoKの回答を参照してください。

于 2010-10-07T18:50:45.297 に答える
0

一般に、これを行うことに依存するコードには設計上の欠陥があります-NATルーターの出力IPアドレスを取得する必要がある理由について詳しく説明していただけますか?

ルーターは通常、適切な内部ホストに接続を転送しないため、出力IPアドレスは接続の作成をまったく支援しません。

于 2010-10-07T15:39:04.803 に答える