Как получить WAN IP-адрес компьютера в Java? - PullRequest
0 голосов
/ 07 октября 2010

Как мне получить глобальную сеть моего компьютера с 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

Ответы [ 5 ]

2 голосов
/ 07 октября 2010

Если вы в конечном итоге используете удаленную службу, которая отвечает вашим «внешним IP-адресом» (см. Другие ответы для определения того, что это может быть), не используйте один из бесплатных безымянных. Разверните свой собственный. Вы не должны создавать приложение, которое зависит от чьего-либо Acme Whats-My-IP 3000 , которое может исчезнуть в любое время и без уведомления вас или любых других несчастных пользователей.

2 голосов
/ 07 октября 2010

Вы можете получить его от 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

1 голос
/ 07 октября 2010

Как указано в комментариях, если вы находитесь за маршрутизатором, который выполняет NAT, ваша машина не будет знать свой адрес WAN.

Более сложный случай, когда вы находитесь за пулом NAT.Если это так, то ваш WAN-адрес может периодически меняться, возможно, раз в день или чаще.

Или некоторые типы трафика могут передаваться через прокси-сервер.Это может привести к тому, что исходящие HTTP-запросы будут поступать с адреса WAN, отличного от SSH или другого произвольного протокола.

0 голосов
/ 07 октября 2010

Чтобы получить 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.

0 голосов
/ 07 октября 2010

Как правило, любой код, который зависит от этого, имеет конструктивную ошибку. Не могли бы вы уточнить, ПОЧЕМУ вам нужно получить исходящий IP-адрес их маршрутизатора NAT?

Выходной IP-адрес вам не поможетвообще при создании соединения назад, так как маршрутизатор обычно не пересылает его на соответствующий внутренний хост.

...