客户端的外部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 Check Current 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 Check Current IP Address: ", ""); String IPStr = IPStrNewest.replace("", "");
对我来说很好! 我拿到了我的路由器IP地址! (在像XXX.XXX.XXX.XXX这样的字符串中)
网站代码:
http://automation.whatismyip.com/n09230945.asp
不再工作了……