6

我正在使用 java servlet 开发一个 web 应用程序,我希望通过request.getRemoteAddr()从内部调用来获取用户 ip 信息processRequest(HttpServletRequest request,HttpServletResponse response)

但它返回一个错误的IP。由于我对这个领域不是很了解,我不知道它在显示什么,也许是代理,我得到了这个:

远程地址:127.0.0.1
远程主机:127.0.0.1
x-forwarded-for : null

127.0.0.1 不是我的 IP。

然而,当我去:http://www.javascriptkit.com/script/script2/displayip.shtml它会显示正确的,因为我使用的是 servlet,我没有动态生成的 html 页面的 .shtml,我该怎么办?以及为什么该站点上的脚本可以正确显示而request.getRemoteAddr()不能正确显示?

感谢所有答案,我现在有一个线索,将其部署到服务器后,它可以按预期工作。显示正确的地址。

但是即使我在本地机器上开发它,如何让它显示绝对 IP 就好像它在真实服务器上运行一样?或者可行吗?

4

5 回答 5

19

它显示的是什么 IP 地址?我的猜测是有一些代理或改变的东西。(例如,那个脚本页面显示了我的 ADSL 路由器的 IP 地址——而不是我局域网中的那个——原因很明显。)

编辑:现在您已经证明您看到的 IP 地址是 127.0.0.1,答案很清楚 - 您看到的是环回适配器(即同一台机器的快捷方式)大概是因为您正在测试您正在开发的同一台机器。答案是完全正确的。

在不同的机器上尝试它,你会得到一个更有用的 IP 地址。

于 2008-11-04T18:49:15.093 回答
6

通过调用 request.getHeader("X-Forwarded-For") 检查 X-Forwarded-For 标头并查看它返回的 IP。

于 2008-11-04T18:53:44.817 回答
4

您显示的返回 IP 是本地主机 IP。这就提出了一个问题——您在哪里进行测试,以及您如何访问 servlet 进行测试?

如果您在本地(开发)机器上运行 servlet,并且还从同一台机器上的浏览器调用它,那么这个输出是绝对正确的。

干杯,

-R

于 2008-11-04T19:08:50.060 回答
1

如果你使用http://localhost:8080/servlet调用你的servlet ,你通常会得到“localhost”作为远程地址。如果您使用您的机器的名称,即http://yourmachine/servlet,您通常会得到“正确”的地址。

于 2008-11-04T22:00:58.963 回答
1

您正在本地计算机上运行测试服务器并在http://localhost/上连接到它。由于您在本地接口上进行连接,因此连接源也是 localhost,即 127.0.0.1。

于 2008-11-04T19:09:32.057 回答