裴大头-秦可爱

裴大头-秦可爱

获取客户端ip的方法

发表于 2022-12-12
裴大头
阅读量 292
更新于 2022-12-12

  |  像本博客中,有天气以及获取留言者的ip地址,之前一直使用的是搜狐的api,但最近频频报错4.3,无奈自己在后端写了一个。

首先先说一下常规的js通过api获取ip的方法:

搜狐接口:

<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>  
<script type="text/javascript">  
    document.write(returnCitySN["cip"]+','+returnCitySN["cname"])  // xxx.xxx.xxx.xxx, xx省xx市
</script>

新浪接口:

<!--获取接口数据注意charset -->
<script type="text/javascript" src="http://counter.sina.com.cn/ip/" charset="gb2312"></script>      
<script type="text/javascript">
    //输出接口数据中的IP地址
    document.writeln("IP地址:"+ILData[0]+"<br />");
    //输出接口数据中的IP地址的类型            
    document.writeln("地址类型:"+ILData[1]+"<br />");
    //输出接口数据中的IP地址的省市        
    document.writeln("地址类型:"+ILData[2]+"<br />");      
    //输出接口数据中的IP地址的  
    document.writeln("地址类型:"+ILData[3]+"<br />");    
    //输出接口数据中的IP地址的运营商    
    document.writeln("地址类型:"+ILData[4]+"<br />");        
</script>

如果使用这两个api不行的话,可以考虑自己整一个,先看一下我开放出来的一个:http://pnkx.top:8068/open/getIp

{
    "msg": "123.232.10.234", // 返回的IP
    "code": 200 // 成功的状态码
}

我这是用的java语言、springboot框架:

工具类代码:

private String getIpAddress() {
    String ip = request.getHeader("x-forwarded-for");
        if (ip != null && !"".equals(ip) && !"unknown".equalsIgnoreCase(ip)) {
            if (ip.indexOf (",") > 0) {
                ip = ip.substring (0, ip.indexOf (","));
            }
            if (ip.equals ("127.0.0.1")) {
                //根据网卡取本机配置的IP
                InetAddress inet = null;
                try {
                    inet = InetAddress.getLocalHost ();
                } catch (Exception e) {
                    e.printStackTrace ();
                }
                ip = inet.getHostAddress ();
            }
        }
        if (request.getHeader("X-Real-IP") != null && !"".equals(request.getHeader("X-Real-IP")) && !"unknown".equalsIgnoreCase(request.getHeader("X-Real-IP"))) {
            ip = request.getHeader("X-Real-IP");
        }
        if (request.getHeader("Proxy-Client-IP") != null && !"".equals(request.getHeader("Proxy-Client-IP")) && !"unknown".equalsIgnoreCase(request.getHeader("Proxy-Client-IP"))) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (request.getHeader("WL-Proxy-Client-IP") != null && !"".equals(request.getHeader("WL-Proxy-Client-IP")) && !"unknown".equalsIgnoreCase(request.getHeader("WL-Proxy-Client-IP"))) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        log.info("用户ip:"+ip);
        return ip;
}

如果有博主不太了解java的,也可以查询下其他语言的获取客户端ip的方法,大同小异。实在不行也可以使用我开放出来的api。

 

如果有用,记得评论夸奖一下~

 

 

评论
来发一针见血的评论吧!
表情
  • 裴大头

    男博主

    IP:济南市

    2023-09-05 18:16

    [坏笑]

    0
    回复
      共0条回复,点击查看
推荐文章
  • Vue项目代码规范

    1点赞1评论

  • 聊一聊我的文本编辑器

    1点赞11评论

  • JavaScript的常用遍历方法整理

    1点赞8评论

  • 前端面试精选-基础篇

    1点赞0评论

  • 强力推荐的idea插件,开发效率提升99%

    1点赞0评论

Crafted with by Pei你看雪

小破站居然运行了 689 天访客 18051

© 2023 Pei你看雪鲁ICP备19037910号-2