怎么获取客户端的IP地址?

xyz的坐标系 2021-09-21 18:14:21

如题,最近做项目时,涉及IP地址。但用网上的方法得到的IP地址只是本机IP而不是客户端IP。

代码如下(Java):

// 获取IP地址
    public static String getRemoteAddress(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }

请求头的X-Forwarded-For、Proxy-Client-IP、WL-Proxy-Client-IP(包括X-Real-IP)都为Null,而且用request.getRemoteAddr()获得的也是本机IP而不是客户端IP(没用IP代理)

要求:获取IP地址(应该是https://www.ip138.com/的本机IP地址而不是localhost(127.0.0.1)的本机IP)

 

...全文
322 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
即心即佛 2021-10-15
  • 打赏
  • 举报
回复

你应该是用了HA、LVS或者Nginx这些东东了吧。
确认一下Nginx设置的头是什么。

weixin_43947653 2021-09-23
  • 打赏
  • 举报
回复

1、代码里的X-Forwarded-For请求头没写对,要首字母大写,不能用小写;
2、对于获取本机ip地址,ip = request.getRemoteAddr()是获取不到本机的真实ip的,应该进行判断一下,当获得的ip等于127.0.0.1,就要通过工具类(如InetAddress)获取本机的IP 。

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧