客户端的外部IP地址

时间:2011-08-12 12:38:15

标签: java ip-address external

听起来很有趣,但我如何从客户端获取外部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 个答案:

答案 0 :(得分:4)

如果您的客户使用NAT(网络地址转换),则可能没有外部地址。大多数情况下,根据我的经验,情况就是这样。在工作中,我的Web请求通过代理,因此Web服务器只能确定此地址。在家里我通过服务器使用NAT,所以我输入的笔记本电脑没有外部地址。最接近的是从'whatismyip'返回的内容,我的服务器地址,通过它我有时会转发到我的笔记本电脑的端口。

答案 1 :(得分:2)

在服务器上运行的代码上运行“whatismyip”操作只会为您提供服务器地址。

此外,

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

从该链接:

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

如果客户端位于代理后面,您可能无法获得真正的客户端IP,您将获得代理的IP而不是客户端。但是,代理可以在特殊的HTTP头中包含请求客户端IP。

<%
out.print( request.getHeader("x-forwarded-for") );
%>

答案 2 :(得分:0)

代码:

    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

不再起作用了......