После переадресации порта, как получить мой внешний IP в Java? - PullRequest
0 голосов
/ 30 марта 2010

Я установил статический IP-адрес и переадресовал порты на своем ноутбуке, и теперь у меня есть статический IP-адрес, но он относительно статический, каждый раз, когда я перезагружаю машину, я получаю другой адрес, и, так как «статический» IP Теперь я могу делать сообщения Paypal IPN. Но как я могу получить этот статический IP из моей Java-программы? Один из способов, который я могу придумать, - это посетить: http://portforward.com/, и на этой странице он сообщает мне, каков мой внешний IP, так что я могу извлечь его с помощью кода Java, есть ли другой способ, которым я могу сделать в своей Java код, чтобы получить эту информацию?

Ответы [ 4 ]

1 голос
/ 29 августа 2011

Существует общедоступная служба, к которой вы можете обратиться со своим сценарием для получения вашего внешнего IP-адреса. Имейте в виду, что они изменили местоположение ссылки один раз. Если вы управляете своим собственным сервером, вам, вероятно, следует написать собственный скрипт PHP, чтобы просто возвращать адрес вызывающего в сценарий.

http://www.whatismyip.com/faq/automation.asp - перейдите по ссылке, которую они предоставляют

import java.net.*;
import java.io.*;

URL myExternalIP = new URL("PUT THE LINK HERE");
BufferedReader in = new BufferedReader(new InputStreamReader(
                myExternalIP.openStream()));

String ip = in.readLine(); //you get the IP as a String
System.out.println(ip);

Ваш собственный серверный скрипт простой однострочный. Создайте файл с именем whatismyip.php и вот его содержимое.

<? echo $_SERVER['REMOTE_ADDR']?>
1 голос
/ 30 марта 2010

Лучшим решением, вероятно, является динамический DNS . По сути, вы запускаете на своем компьютере (или маршрутизаторе) программу, которая уведомляет DNS-сервер об изменении вашего IP-адреса. Затем вы можете просто сообщить PayPal доменное имя.

0 голосов
/ 30 марта 2010

Вы можете использовать класс NetworkInterface:

Enumeration<NetworkInterface> ifcs = NetworkInterface.getNetworkInterfaces();
while(ifcs.hasMoreElements()){
  NetworkInterface ifc = ifcs.nextElement();
  System.out.println("Adresses of: "+ifc.getDisplayName());
  Enumeration<InetAddress> adresses = ifc.getInetAddresses();
  while(adresses.hasMoreElements()){
    System.out.println(adresses.nextElement().getHostAddress());
  }
}

Этот фрагмент покажет вам все интерфейсы и IP-адреса, связанные с ними. Вам нужно будет просмотреть список, чтобы найти соответствующий интерфейс (см. Также NetworkInterface.getByName (String name)), а затем посмотреть адреса этого интерфейса. Найдя соответствующий InetAdress, вы можете использовать его, чтобы получить строковое или байтовое представление.

0 голосов
/ 30 марта 2010

Я вижу три способа сделать это:

  1. Как вы обнаружили, запрашиваете у внешнего сервера IP-адрес, с которого вы, очевидно, подключаетесь. Это просто, но вам требуется, чтобы такая служба была доступна и, как правило, прозрачный прокси-сервер не мешал вашим результатам.
  2. IGD, суб-протокол UPnP может очень легко дать вам результат, если ваши устройства переадресации портов поддерживают его (многие это делают). Google "IGD JAVA" для библиотек и образцов.
  3. Зарегистрируйтесь для динамической службы DNS, а затем найдите свое собственное DNS-имя.
...