Я не слишком уверен, как пойти о получении внешнего IP-адреса машины, поскольку компьютер за пределами сети видел бы его.
Мой после класса IPAddress только получает локальный IP-адрес машины.
public class IPAddress {
private InetAddress thisIp;
private String thisIpAddress;
private void setIpAdd() {
try {
InetAddress thisIp = InetAddress.getLocalHost();
thisIpAddress = thisIp.getHostAddress().toString();
} catch (Exception e) {
}
}
protected String getIpAddress() {
setIpAdd();
return thisIpAddress;
}
}
Я не уверен, что вы можете получить этот IP из кода, который работает на локальной машине.
Однако вы можете создать код, выполняемый на сайте, скажем, в JSP, и затем использовать что-то, что возвращает IP того места, откуда пришел запрос:
request.getRemoteAddr()
Или просто использовать уже существующие сервисы, которые делают это, затем разобрать ответ от сервиса, чтобы узнать IP.
Используйте веб-сервисы, такие как AWS и другие
import java.net.*;
import java.io.*;
URL whatismyip = new URL("http://checkip.amazonaws.com");
BufferedReader in = new BufferedReader(new InputStreamReader(
whatismyip.openStream()));
String ip = in.readLine(); //you get the IP as a String
System.out.println(ip);
Правда в том, что "вы не можете" в том смысле, в котором вы задали вопрос. NAT происходит вне протокола. Ядро вашей машины не может знать, как ваш блок NAT сопоставляет внешние и внутренние IP-адреса. В других ответах здесь предлагаются трюки, связанные с методами общения с внешними веб-сайтами.
Установите HttpURLConnection на какой-нибудь сайт, например www.whatismyip.com, и проанализируйте его: -)
Это не так просто, поскольку машина внутри локальной сети обычно не заботится о внешнем IP-адресе своего маршрутизатора, подключенного к Интернету ... ей это просто не нужно!
Я бы посоветовал вам воспользоваться этим, открыв сайт вроде http://www.whatismyip.com/ и получив IP-адрес путем анализа результатов html .. это не должно быть так сложно !