客户端的外部IP地址

听起来很有趣,但我如何从客户端获取外部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("Current IP CheckCurrent IP Address: ", ""); String IPStr = IPStrNewest.replace("", ""); 

但我只获得服务器的外部IP

并为最后一个地方

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

这是一样的,我只得到服务器的外部IP

那么,这笔交易是什么?

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

在服务器上运行的代码上运行“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") ); %> 

代码:

  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("Current IP CheckCurrent IP Address: ", ""); String IPStr = IPStrNewest.replace("", ""); 

对我来说很好! 我拿到了我的路由器IP地址! (在像XXX.XXX.XXX.XXX这样的字符串中)

网站代码:

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

不再工作了……

Interesting Posts