分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

nodejs 获取客户端 ip 地址

发布时间:2023-09-06 01:32责任编辑:傅花花关键词:jsnodejs

为什么要获取客户端 ip:

php:我们需要拿到用户客户端的ip信息,以识别用户位置,但现在我们拿到的地址永远是杭州前端:我查一下,稍等 .... 明白了,我们加了一层 node 服务器,服务器在杭州,你们拿到的是 node 服务器的 ipphp:那怎么办?前端:我给你加一个 ip 字段吧php:哦~前端:(噼里啪啦噼里啪啦......) 好了,你们看一下有值了吗?php:有了,但值不对,你给我传的是 ?::ffff:127.0.0.1 ,前边那一堆 f 是什么鬼,去掉,我们只要后边的 ip 就可以了前端:哦~ 稍等....... 

分析原因:

前端给 php 传递的 ip 字段值是 req.connection.remoteAddress ,理论上没什么不对,但实际拿到是 ipv6 的地址,php 需要的 ipv4 的地址。

 

nodejs 官网 API:

net 模块查找 server.listen()

server.listen([port][, host][, backlog][, callback])

启动一个TCP服务监听输入的 port 和 host.

如果 host 省略,如果 ipv6 可用,服务器将会接收基于 unspecified IPv6 address (::)的连接,否则接收 unspecified IPv4 address (0.0.0.0) 的链接

 

修改方法:

指定 host 参数为 0.0.0.0,也就是 listen(port, ‘0.0.0.0‘, () => {});

例如:

最后结果:

前端:可以了,你再看一下php:我试试~ 稍等.... ok,bingo 了

总结了一个获取 ip 的方法:

/** * @getClientIP * @desc 获取用户 ip 地址 * @param {Object} req - 请求 */function getClientIP(req) { ???return req.headers[‘x-forwarded-for‘] || // 判断是否有反向代理 IP ???????req.connection.remoteAddress || // 判断 connection 的远程 IP ???????req.socket.remoteAddress || // 判断后端的 socket 的 IP ???????req.connection.socket.remoteAddress;};

nodejs 获取客户端 ip 地址

原文地址:http://www.cnblogs.com/lpbottle/p/nodejs_get_ip.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved