nodejs 获取客户端 ip 地址

热门标签

特别声明:文章多为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系!

应用场景:

php:我们需要拿到用户客户端的ip信息,以识别用户位置,但现在我们拿到的地址永远是杭州

前端:我查一下,稍等 .... 明白了,我们加了一层 node 服务器,服务器在杭州,你们拿到的是 node 服务器的 ip

php:那怎么办?

前端:我给你加一个 ip 字段吧

php:哦~

前端:(噼里啪啦噼里啪啦......) 好了,你们看一下有值了吗?

php:有了,但值不对,你给我传的是 ::ffff:127.0.0.1 ,前边那一堆 f 是什么鬼,去掉,我们只要后边的 ip 就可以了

前端:哦~ 稍等.......

分析原因:

前端给 php 传递的 ip 字段值是 req.connection.remoteAddress ,但 php 实际拿到是 ipv6 的地址。

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', () => {});

例如:

nodejs 获取客户端 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 地址》 发布于2019-08-20

分享到:
赞(2) 打赏

评论 抢沙发

2 + 5 =


nodejs 获取客户端 ip 地址

长按图片转发给朋友

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

支付宝扫一扫打赏

微信扫一扫打赏

諦覠
欢迎来到吾爱博客~
切换注册

登录

忘记密码 ?

切换登录

注册