我正在使用java servlet开发一个Web应用程序,我希望通过从request.getRemoteAddr()
内部调用processRequest(HttpServletRequest request,HttpServletResponse response)
来获取用户的ip信息。
但是它返回了错误的IP。由于我对这个领域不是很了解,我不知道它在显示什么,也许是代理,我得到了这个:
RemoteAddr : 127.0.0.1 RemoteHost : 127.0.0.1 x-forwarded-for : null
127.0.0.1不是我的IP。
然而,当我去:http://www.javascriptkit.com/script/script2/displayip.shtml
它将显示正确的那个,因为我正在使用servlet,我没有.shtml到我动态生成的html页面,我该怎么办?为什么该网站上的脚本可以在request.getRemoteAddr()
无法正常显示时正确显示?
感谢所有答案,我现在有了一个线索,在将其部署到服务器之后,它按预期工作。显示正确的地址。
但即使我在本地机器上开发它,如何要求它显示绝对IP,就好像它在真实服务器上运行一样?还是可行的?
答案 0 :(得分:19)
它显示的是什么IP地址?我的猜测是有一些代理或改变一些东西。 (例如,该脚本页面显示了我的ADSL路由器的IP地址 - 而不是局域网内的IP地址 - 原因显而易见。)
编辑:现在你已经证明你看到的IP地址是127.0.0.1,答案是相当清楚的 - 你看到你的环回适配器(即同一台机器的快捷方式)可能是因为你是在你正在开发的同一台机器上进行测试。答案完全正确。从其他计算机上试用,您将获得更有用的IP地址。
答案 1 :(得分:4)
通过调用request.getHeader(“X-Forwarded-For”)检查X-Forwarded-For标头,看看它返回了什么IP。
答案 2 :(得分:4)
您显示的返回IP是localhost IP。这提出了一个问题 - 您在哪里测试,以及如何访问servlet进行测试?
如果您在本地(开发)计算机上运行servlet,并在同一台计算机上的浏览器中调用它,则此输出绝对正确。
干杯,
-R
答案 3 :(得分:1)
您正在本地计算机上运行测试服务器并在http://localhost/上连接到它。由于您在本地接口上进行连接,因此连接源也是localhost,即127.0.0.1。
答案 4 :(得分:1)
如果使用http://localhost:8080/servlet调用servlet,通常会将“localhost”作为远程地址。如果您使用机器名称,即http://yourmachine/servlet,您将获得“正确”的地址。