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

这篇具有很好参考价值的文章主要介绍了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 获取
 */
function getClientIp(req) {
	return req.headers['x-forwarded-for'] ||
	req.ip ||
	req.connection.remoteAddress ||
	req.socket.remoteAddress ||
	req.connection.socket.remoteAddress ||
	'';
}

// 上述代码是直接获取的IPV4地址,如果获取到的是IPV6,则通过字符串的截取来转换为IPV4地址。
function ipv6ToV4(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 模块

    npm install ip2region ||
    yarn add ip2region
    
  2. 安装完成后,你可以在你的Node.js代码中使用IP2Region模块来获取IP地址信息

    const IP2Region = require('ip2region').default;
    // 要查询的IP地址
    const ip = '127.0.0.1'; 
    // 创建一个IP2Region实例
    const query = new IP2Region();
    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'; 
const URI = 'https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php';
const URL = `${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}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!
文章来源地址https://www.toymoban.com/news/detail-581195.html

到了这里,关于Node.js、Express框架之获取客户端IP地址,并获取IP对应的城市名「简单好用,收藏不亏」的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • nginx获取客户端真实ip

    在nginx中获取客户端真实IP的方法有多种,以下是其中两种常用的方法: 使用nginx的access_log模块记录请求日志,并在日志中包含客户端的真实IP信息。例如: 在上述配置中,通过使用http_x_forwarded_for字段来获取客户端的真实IP地址。如果该字段不存在或不合法,则使用remote_ad

    2024年02月16日
    浏览(51)
  • 获取客户端真实IP的方法

    获取请求的IP很简单,可以直接使用request.getRemoteAddr()直接获取。但由于请求在转发到接口前,会经过大量的反向代理,例如流程图中,至少要经过Nginx后,请求才会转发到接口,因此需要对请求接口的IP做处理,提取客户端真实IP地址。 配置Nginx的配置文件,需要反向代理服务

    2024年02月16日
    浏览(51)
  • nginx 获取客户端真实IP

    网站接入Web应用防火墙WAF(Web Application Firewall)后,访问请求在到达源站服务器之前,需要经过WAF的代理转发。这种情况下,源站服务器可以通过解析回源请求中的X-Forwarded-For记录,获取客户端的真实IP。 WAF在将客户端的访问请求转发到下一环节的服务器时,会在HTTP的请求头

    2023年04月09日
    浏览(49)
  • nginx-获取客户端IP地址

    上有服务器与客户端中间是有nginx代理服务器的,上游服务器如何获取客户端真实ip地址? nginx代理服务器设置X-Forwarded-For的header参数,代理服务器通过remote_addr获取客户端ip地址,将ip地址写入nginx代理服务器的X-Forwarded-For中, 上游服务端通过在nginx的这个参数拿到客户端IP地

    2024年02月11日
    浏览(44)
  • kubernetes获取客户端真实ip

    大部分的业务场景都需要获取客户端的ip来审计或采取措施,文章从nodeport暴露方式获取真实ip到ingress-nginx获取真实ip 初学者用k8s创建时暴露方式一般采用nodeport,这样方式暴露导致应用负载和访问者并不是同一段网络,当web服务获取客户端ip的时候会发现获取到的ip是k8s网关的

    2024年02月01日
    浏览(45)
  • JAVA获取客户端IP地址

    2024年02月16日
    浏览(49)
  • 获取客户端请求IP及IP所属城市

    添加pom依赖       dependency             groupIdorg.lionsoul/groupId             artifactIdip2region/artifactId             version2.6.5/version         /dependency public class IpUtil {     private static Searcher searcher;     private static final String DEFAULT_UNKNOWN=\\\"unknown\\\";     private static final int IP_MIN_LENGT

    2024年02月08日
    浏览(51)
  • Java编程技巧:获取ip地址、通过ip获取地理位置、获取客户端操作系统、获取客户端浏览器、获取主机名、获取操作系统、获取系统架构

    说明: 大家直接去对应项目位置找到代码,然后看着复制就行了 1.1、若依(自己写的代码) 项目:https://gitee.com/y_project/RuoYi 子模块:ruoyi-common 所在类:com.ruoyi.common.utils.IpUtils 所在方法:getIpAddr 详细位置:整个方法 1.2、Snowy(借助hutool工具包) 项目:https://gitee.com/xiaonuo

    2024年02月04日
    浏览(128)
  • Nginx(二十) 获取真实客户端IP

            客户端在访问互联网应用服务器时,与真实的应用服务器之间会因为有多层反向代理,而导致真实应用服务器获取的仅是最近一层的反向代理服务器 IP。为使 Nginx 后端的上游服务器可以获得真实客户端 IP,Nginx 提供了 ngx_http_realip_module 模块用以实现真实客户端

    2024年01月16日
    浏览(46)
  • 【JavaScript】如何获取客户端IP地址?

    使用这个库:request-ip 它按照如下顺序获取请求的IP地址: X-Client-IP X-Forwarded-For (Header may return multiple IP addresses in the format: “client IP, proxy 1 IP, proxy 2 IP”, so we take the first one.) CF-Connecting-IP (Cloudflare) Fastly-Client-Ip (Fastly CDN and Firebase hosting header when forwared to a cloud function) True-Clie

    2024年02月05日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包