koa 框架获得的ip地址,长得为毛如此恶心?
发布于 8 年前 作者 napster99 18141 次浏览 来自 问答

ip=::ffff:192.168.1.42

为什么长这样,不是192.168.1.42 吗? 大神求回答~

19 回复

通过this.request.ip获得的。

还是自己撸框架好,至少不会骂自己

ipv4在ipv6下的兼容格式,好像

来自酷炫的 CNodeMD

@LinYuhong 这个诟病从express就有了,怎么解决 ?

这个是ipv4到ipv6的映射地址,要取ipv4地址的话,可以指定监听0.0.0.0

http.createServer(app.callback()).listen(port, ‘0.0.0.0’, err=> { if (err) { return console.log(http server init error: ${err.message}); } console.log(http server listening at port: ${port}); });

或者可以在前面放一个nginx反向代理,通过 proxy_set_header X-Real-IP $remote_addr;

将客户端真实ip地址放到header的x-real-ip字段,然后直接从这个字段来取客户端的ip地址。

换一个角度讲,获取单一ip地址,在真实项目里可用性很高么?

@i5ting 之前项目中用到过,比如显示用户的位置信息,或者根据 ip、设备号限制用户注册数

@enternoder 嗯。怎么获取的呢,求指教

@napster99 你问题里面不是获取到了么,然后通过字符串截取把前面的::ffff: 这个去掉就好啊,貌似 express 里面获取到的 ip 也是这样的,我就是截取处理的……

@enternoder 它返回::1 就一脸蒙逼了,是127.0.0.1 ?

@napster99 哈哈,我没玩过 koa ,我觉得7楼的方式不错

6楼的方式应该可以解决

req.ip.match(/\d+.\d+.\d+.\d+/) 可破

找到网卡,右键点属性,把ipv6取消勾选

就这格式也没啥关系吧,用正则好了不一定非要严格相等的

ipv6模式,理论上你在listen的时候填写ipv4格式的地址就可以得到你看来正常的地址了。

回到顶部