【发布时间】:2011-10-25 19:02:11
【问题描述】:
听起来很有趣,但是如何从客户端获取外部 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
那么,交易是什么?
【问题讨论】:
-
“客户端的外部 IP 地址”究竟是什么意思?你能举一些具体的例子吗?例如,如果客户端通过局域网访问服务器怎么办?如果这不是一个有效的场景,那应该在问题中解释。通过具体的例子,我的意思是你应该详细说明客户端的位置(即哪种类型的网络),它如何到达服务器,哪些 IP 地址在起作用,以及你试图获取哪个 IP 地址。
-
路由器的IP地址,希望你现在明白了吧? “客户所在的位置” - 这就是我想知道的:) + 客户的 IP 即:103.456.768.22
-
@hoss 好的,那么当客户端向您发出请求时,将发生地址转换(NAT 或代理服务器),您的服务器将接受用户的远程连接。此连接应为您提供客户端的翻译地址。因此,我认为 jzd 的答案是正确的,还有一个额外的问题需要解决。您的“请求”对象的类型是什么?
-
好的,这里是HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
标签: java ip-address external