听起来很有趣,但我如何从客户端获取外部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
那么,这笔交易是什么?
答案 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
不再起作用了......