0


Node.js、Express框架之获取客户端IP地址,并获取IP对应的城市名「简单好用,收藏不亏」

在进入正题之前,我们先来了解一下IP地址对我们开发者来说都有哪些重要的作用:
IP地址是我们用来记录用户访问日志的一个重要标识。
一方面,我们可以用来防止某一个IP地址带来的大量DDOS攻击,通过判断IP地址来阻止此IP继续访问攻击;
另外一个用途是用来定位,通过IP地址来获取用户的地理位置信息,我们可以描绘出大量的用户主要分布在哪些区域。

一、通过nodejs来获取客户端的IP地址

IP地址是分为IPV4和IPV6地址。

/**
 * @method 获取客户端IP地址
 * @param {string} req 传入请求HttpRequest
 * 客户请求的IP地址存在于request对象当中
 * express框架可以直接通过 req.ip 获取
 */functiongetClientIp(req){return req.headers['x-forwarded-for']||
    req.ip ||
    req.connection.remoteAddress ||
    req.socket.remoteAddress ||
    req.connection.socket.remoteAddress ||'';}// 上述代码是直接获取的IPV4地址,如果获取到的是IPV6,则通过字符串的截取来转换为IPV4地址。functionipv6ToV4(ip){if(ip.split(',').length>0){
        ip = ip.split(',')[0]}
    ip = ip.substr(ip.lastIndexOf(':')+1,ip.length);return ip
}

二、根据IP地址获取定位

上面我们已经获取到了IP地址,下面我们来看看如何来获取定位。
网上定位的方法有很多,这里我会都简单分析一下。

我先分享一下我用到的

IP2Region

IP2Region

根据它获取一个具体ip的信息,通过IP解析出国家、具体地址、网络服务商等相关信息。
ip2region - 最自由的ip地址查询库,ip到地区的映射库,提供Binary,B树和纯内存三种查询算法,妈妈再也不用担心我的ip地址定位。
Ip2region (2.0 - xdb) 是一个离线 IP 数据管理框架和定位库,支持亿级别的数据段,10微秒级别的查询性能,提供了许多主流编程语言的 xdb 数据管理引擎的实现。
官网:https://gitee.com/lionsoul/ip2region/tree/v1.9.0-release

关于使用

  1. 运行以下命令安装 IP2Region 模块npminstall ip2region ||yarnadd ip2region
  2. 安装完成后,你可以在你的Node.js代码中使用IP2Region模块来获取IP地址信息const IP2Region =require('ip2region').default;// 要查询的IP地址const ip ='127.0.0.1';// 创建一个IP2Region实例const query =newIP2Region();const ipAddress = query.search(ip);// 打印查询结果console.log('>>> ipAddress: ', ipAddress);// {"country":"","province":"","city":"内网IP","isp":"内网IP"}

另外如果涉及到各国的ip地址查询,这里我为大家找到了一个IP地址列表名单,大家可以通过这个包测试一下
https://zh-hans.ipshu.com/ip-country/US


使用第三方接口【百度API】(需谨慎使用)

百度API获取IP地址有两种方式:一种是通过百度地图的IP定位接口获取,这种方式每日的请求次数以每秒并发量有一定的限制,同时不支持商业化应用,如果商业化需要缴纳年费,具体情况可以去百度开发者去查看。
另一个百度的API,就是在百度首页查询ip地址时调用的接口。

关于使用

const ip ='117.30.233.100';constURI='https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php';constURL=`${URI}?query="${ip}"&co=&resource_id=6006&t=1555898284898&ie=utf8&oe=utf8&format=json&tn=baidu`// 这里使用axios进行GET请求
axios.get(URL).then(response=>{
    console.log('>>> getIpAddressData: ', response.data);}).catch(error=>{
    console.error(error);});

结果返回

{"status":"0","t":"1555898284898","set_cache_time":"","data":[{"ExtendedLocation":"","OriginQuery":"117.30.233.100","appinfo":"","disp_type":0,"fetchkey":"117.30.233.100","location":"福建省厦门市 电信","origip":"117.30.233.100","origipquery":"117.30.233.100","resourceid":"6006","role_id":0,"shareImage":1,"showLikeShare":1,"showlamp":"1","titlecont":"IP地址查询","tplt":"ip"}]}

注意

  1. 这个接口的调用不知道是否可以用于商用,是否对单个IP地址的调用有限制,具体的可行性还需进一步验证,需谨慎使用。
  2. 另外该接口返回的结果中省市放在了一起,如果想单独拆分出来需要对其进行解析,如果是国外地址,则只返回国家。

小结

上面就是针对 Node.js、Express 框架 获取客户端IP地址,并获取IP对应的城市名的几种方式方法,如果哪里写的有问题或者有什么更好的方案,还请大佬指正。

希望上面的内容对你的工作学习有所帮助!欢迎各位一键三连哦~

各位 加油!

       原创不易,还希望各位大佬支持一下 
      
     
    
   
     \textcolor{blue}{原创不易,还希望各位大佬支持一下} 
    
   
 原创不易,还希望各位大佬支持一下

👍

       点赞,你的认可是我创作的动力! 
      
     
    
   
     \textcolor{green}{点赞,你的认可是我创作的动力!} 
    
   
 点赞,你的认可是我创作的动力!

⭐️

       收藏,你的青睐是我努力的方向! 
      
     
    
   
     \textcolor{green}{收藏,你的青睐是我努力的方向!} 
    
   
 收藏,你的青睐是我努力的方向!

✏️

       评论,你的意见是我进步的财富! 
      
     
    
   
     \textcolor{green}{评论,你的意见是我进步的财富!} 
    
   
 评论,你的意见是我进步的财富!
标签: node.js express tcp/ip

本文转载自: https://blog.csdn.net/XH_jing/article/details/131770471
版权归原作者 八了个戒 所有, 如有侵权,请联系我们删除。

“Node.js、Express框架之获取客户端IP地址,并获取IP对应的城市名「简单好用,收藏不亏」”的评论:

还没有评论