通过NodeJS express仅获取IPv4地址

10

我有一个在Centos上运行的NodeJS express服务,监听GET请求。我需要识别用户的IP。

目前,我正在使用这个脚本

ip = req.headers['x-forwarded-for'] ||
      req.connection.remoteAddress ||
      req.socket.remoteAddress ||
      req.connection.socket.remoteAddress

问题是有时返回的IP是IPv4,有时是IPv6。有没有办法只获取IPv4 IP?

3
如果用户使用IPv6连接,就不会有IPv4地址。你的代码必须能够处理IPv6地址。 - Michael Hampton
这是一个非常有用的评论,我使用了@feiiiii的解决方案,但仍然看到一些用户IP以IPv6形式显示。 - Dev Ze
1个回答

19

更新

根据 Micheal 的评论,如果客户端通过ipv6 连接,则没有 ipv4 地址,因此您必须准备好接受 ipv6。

当您在服务器上监听时,请参阅文档以指定 ipv4。

.listen(port, '0.0.0.0');

文档似乎解释了不同的行为: “如果省略主机名,则服务器将在IPv6可用时接受任何IPv6地址(::),否则接受任何IPv4地址(0.0.0.0)。省略端口参数或使用端口值0,以使操作系统分配一个随机端口,可以在'listening'事件发出后使用server.address().port检索。” - Avi L
将@michael hamptons的评论添加到此答案中可能会很有用。对我来说,这并不明显。 - Dev Ze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接