You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HttpServletRequest.getRemoteAddr()获取IP与curl/ifconfig结果不一致问题

getRemoteAddr方法正确性确认

你用的HttpServletRequest.getRemoteAddr()方法本身没有问题,它的原生功能就是获取直接和Web服务器建立TCP连接的对端IP地址,你从外部设备调用接口时能拿到正确的客户端IP,已经验证了该方法的逻辑是正常的。

各IP差异的原因

1. curl获取的公网IP的含义

你在QA服务器执行curl bot.whatismyipaddress.com拿到的153.110.231.215,是你这台服务器访问公网服务时,经过出口NAT转换后的源IP,仅代表服务器访问公网的出口身份,和服务器作为服务端接收请求时的对端IP没有必然关联。

2. 本机调用公网域名拿到146.192.61.46的原因

你在QA服务器本地用公网域名调用自身接口时,请求不会真的流出到公网再绕回,会触发机房的域名回环解析或者本地路由策略,直接将请求转发到内网的业务入口(比如网关、反向代理),再转发到你的Wildfly服务:

  • 此时和Wildfly建立TCP连接的对端就是内网网关/代理的IP146.192.61.46,所以getRemoteAddr会返回这个值
  • 这种场景下请求根本没有经过公网出口,自然不会拿到你curl得到的公网IP153.110.231.215

3. Linux命令和Java结果无冲突

你看到的ifconfig的网卡IP是服务器本身绑定的内网/私网IP,而Java拿到的146.192.61.46是网关/代理的IP,curl拿到的是公网出口IP,三者属于不同网络层面的地址,不存在冲突。

可选验证方案

你可以在调用接口的同时执行抓包命令,确认连接的真实源IP:

tcpdump -i any port [你的Wildfly服务端口] -n

抓包结果里的源IP会和getRemoteAddr返回的146.192.61.46完全一致,进一步验证Java方法没有问题。

内容的提问来源于stack exchange,提问作者fatherazrael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:39:01