Внешний IP-адрес клиента - PullRequest
       23

Внешний IP-адрес клиента

6 голосов
/ 12 августа 2011

Звучит забавно, но как я могу получить внешний IP-адрес от клиента?

Я пробовал несколько вещей, но у меня не получилось.

во-первых, я пытался

request.getRemoteAddr()

и я получаю результат как: 0: 0: 0: 0: 0: 0: 0: 1

на втором месте, которое я пробовал

InetAddress ip = InetAddress.getLocalHost();
ip.getHostAddress());

и я получаю результат как: 127.0.0.1

на третьем месте я пытался

        URL whatismyip = new URL("http://checkip.dyndns.org:8245/");
        BufferedReader inIP = new BufferedReader(new InputStreamReader(whatismyip.openStream()));

        String IPStrOld = inIP.readLine(); //IP as a String
        String IPStrNewest = IPStrOld.replace("<html><head><title>Current IP Check</title></head><body>Current IP Address: ", "");
        String IPStr = IPStrNewest.replace("</body></html>", "");

, но я получаю только внешний IP-адрес сервера

и дляпоследнее место

        URL whatismyip = new URL("http://automation.whatismyip.com/n09230945.asp");
        BufferedReader inIP = new BufferedReader(new InputStreamReader(whatismyip.openStream()));
        String ip = inIP.readLine();

это то же самое, я получаю только внешний IP-адрес сервера

Итак, в чем же дело?

Ответы [ 3 ]

4 голосов
/ 12 августа 2011

Если ваш клиент использует NAT (преобразование сетевого адреса), он может не иметь внешнего адреса. Чаще всего, по моему опыту, это так. На работе мои веб-запросы проходят через прокси, поэтому веб-сервер может определять только этот адрес. Дома я использую NAT через сервер, поэтому у этого ноутбука нет внешнего адреса. Самым близким является то, что возвращается из whatismyip, моего адреса сервера, через который я иногда могу перенаправлять порты, идущие на мой ноутбук.

2 голосов
/ 12 августа 2011

Выполнение действий whatismyip для кода, выполняемого на сервере, даст вам только адрес сервера.

Кроме того,

http://www.rgagnon.com/javadetails/java-0363.html

По этой ссылке:

<%
out.print( request.getRemoteAddr() );
out.print( request.getRemoteHost() );
%>

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

<%
out.print( request.getHeader("x-forwarded-for") );
%>
0 голосов
/ 24 января 2013

Код:

    URL whatismyip = new URL("http://checkip.dyndns.org:8245/");
    BufferedReader inIP = new BufferedReader(new InputStreamReader(whatismyip.openStream()));
    String IPStrOld = inIP.readLine(); //IP as a String
    String IPStrNewest = IPStrOld.replace("<html><head><title>Current IP Check</title></head><body>Current IP Address: ", "");
    String IPStr = IPStrNewest.replace("</body></html>", "");

отлично работает у меня!Я получил свой IP-адрес маршрутизатора с ним!(в строке вроде XXX.XXX.XXX.XXX)

Код для сайта:

http://automation.whatismyip.com/n09230945.asp

больше не работает ...

...