【问题标题】:Get only IPv4 ips via NodeJS express通过 NodeJS express 仅获取 IPv4 ip
【发布时间】:2018-11-24 02:37:25
【问题描述】:

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

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

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

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

【问题讨论】:

  • 如果用户通过 IPv6 连接,则根本不会有 IPv4 地址。您的代码必须能够处理 IPv6 地址。
  • 这是一个非常有用的评论,我使用了@feiiiii的解决方案,但仍然看到一些ipv6形式的用户ip。

标签: node.js express centos ipv6 ipv4


【解决方案1】:

更新

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

在服务器上监听时指定 ipv4 参见doc

.listen(port, '0.0.0.0');

【讨论】:

  • 文档似乎解释了一种不同的行为:“如果省略主机名,当 IPv6 可用时,服务器将接受任何 IPv6 地址 (::) 上的连接,或者任何 IPv4 地址 (0.0.0.0 ) 否则。省略端口参数,或使用端口值 0,让操作系统分配一个随机端口,可以在发出 'listening' 事件后使用 server.address().port 检索该端口。
  • 在此答案中添加@michael hamptons 评论可能很有用。对我来说,这并不明显。
猜你喜欢
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 2018-07-01
  • 2014-04-16
  • 2012-06-16
  • 2020-10-09
  • 2020-06-10
相关资源
最近更新 更多