分析

虽然获取的这个ipv6的地址,也能使用,可是我想要的只是一个简简单单的ipv4,因为我要提交给别的系统,而不是我自己使用的啊。

搜索

一开始用的是百度,搜了一页居然找不到。哈哈,然后就使用谷歌了。在cnode社区找到原因了。原来从某个nodejs版本开始,http.createServer().listen()默认是ipv6的,所以,为了达到我想要的效果,只能是将.listen(port)改为.listen(port, '0.0.0.0')
于是我去查nodejs的api文档,看看能不能查到什么蛛丝马迹。这里是 传送门。我简单地引用一段话.

Begin accepting connections on the specified port and hostname. If the hostname is omitted, the server will accept connections on any IPv6 address (::) when IPv6 is available, or any IPv4 address (0.0.0.0) otherwise

这段话的意思是说,如果没有指定hostname的话,当前这个服务器会接受任何ipv6的主机来访问(如果有ipv6的话),否则使用ipv4。所以,当只需要获取远程客户端的ip的时候,需要指定hostname参数为 0.0.0.0,也就是 .listen(post, '0.0.0.0')

验证

当设置了ipv4格式后,每当用户访问,通过req.connection.remoteAddress能获取到用户的ipv4地址。::ffff:192.168.0.1 ---> 192.168.0.1

小结

1、尽量使用谷歌搜索问题



作者:一溪酒
链接:https://www.jianshu.com/p/bcab08f2f924
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted on 2020-03-17 23:49  qqhfeng16  阅读(350)  评论(0编辑  收藏  举报