当前位置: 首页 > 面试题库 >

request.connection.remoteAddress现在在node.js中的:: ffff中前缀

谢诚
2023-03-14
问题内容

我最近将路由器更改为Google为Google
Fiber提供的路由器(是的!),现在我注意到在本地html" target="_blank">服务器上进行开发时检查request.connection.remoteAddress时看到的内容发生了变化。以前,我曾经看到过:

request.connection.remoteAddress; // 192.168.1.10

现在我看到了:

request.connection.remoteAddress; // ::ffff:192.168.1.10
  1. 谁能解释发生了什么?
  2. 我的节点服务器正在侦听IPv6地址吗?
  3. ::ffff:192.168.1.10实际上是一个IPv6地址或者是IPv4地址?
  4. 判断remoteAddress是否为IPv6以检查字符串是否包含的最简单方法是::吗?
  5. 当将IPv4地址存储在数据库中时,我曾经使用过类似INET_ATON将其更改为大整数的方法。我应该放弃此做法,而是将所有远程地址存储为字符串,该字符串可以为45个字符长(IPv6地址字符串的最大长度)

问题答案:

我的节点服务器正在侦听IPv6地址吗?

是。您的服务器正在侦听IPv6连接,并且IPV6_V6ONLY未设置该标志,导致IPv4连接由同一套接字处理。

在这种情况下,是否可以进行IPv6连接(可以路由到您的服务器)无关紧要-重要的是,侦听IPv6连接的套接字会接收IPv4连接。

::ffff:192.168.1.10实际上是一个IPv6地址或者是IPv4地址?

都。IPv6地址可以嵌入IPv4地址-
这是这些嵌入地址之一。请参阅IPv4映射的IPv6地址。

判断remoteAddress是否为IPv6以检查字符串是否包含的最简单方法是::吗?

IPv6地址不一定包含::,而是一种简短的表示法,表示一定数量的零。::ffff:192.168.1.10等价于0:0:0:0:0:ffff:192.168.1.100:0:0:0:0:ffff:c0a8:010a(请参阅IPv6地址表示法)。因此,为了区分IPv6和IPv4地址,您只需检查单个冒号-
即可:

在数据库中存储IPv4地址时,我曾经使用INET_ATON之类的东西将其更改为大整数。我应该放弃此做法,而是将所有远程地址存储为字符串,该字符串可以为45个字符长(IPv6地址字符串的最大长度)

IPv6地址是一个128位数字-
即使您可以将其存储为数字(例如,BIGINT在MySQL中为两个数字),但这种方法是否真的有意义却值得怀疑。我能想到的唯一需要考虑数字的地方是评估子网掩码,因为其他所有字符串都足够且易于处理。



 类似资料:
  • 问题内容: 我想在我的node.js应用程序内实现互斥锁,这是Wiki http://en.wikipedia.org/wiki/Mutual_exclusion中的互斥锁。 这个主题有没有准备好的模块?如果没有,有什么想法可以帮助我实施它吗? 问题答案: 有很多方法可以完成此任务。有两种简单的方法是通过Redis或Zookeeper服务器。Node.js两者都有很好的模块。 在Redis中,您可

  • 使用@clickhouse/client-web本地是正常的, 到测试环境就报错crypto.randomUUID is not a function node版本18.多,依赖已安装上,搜索的方法也已经试过,没有效果,这是什么原因呢?

  • 问题内容: 我想知道是否有人知道如何在node.js中实现setTimeout。我相信我在某处读到它不是V8的一部分。我迅速尝试找到实现,但是在source(BIG)中找不到它。例如,我找到了这个timers.js文件,然后例如链接到timer_wrap.cc。但是这些文件并不能完全回答我的所有问题。 V8有实施吗?我想从源头上也可以得出答案。 如何实施?javascript还是本机还是两者结合?

  • 问题内容: 我在缓存层(redis)中放入了一些较大的JSON值,我认为它们可以使用一些压缩来稍微减少我的内存使用量。 您使用哪个node.js压缩模块?出于某种原因,joyent / node Modules Wiki 上列出的所有内容看起来都很肮脏-要么是404,没有超过一年的提交,很少有人在看,或者打开了内存泄漏的报告。 Snappy看起来不错,但我宁愿选择更轻便的东西。 我自然希望使用异步

  • 问题内容: 因此,我在这里可能遗漏了一些简单的东西,但似乎无法找到一种方法来获取向其发送响应的请求对象的主机名。 是否可以找出用户当前从node.js访问的主机名? 问题答案: 如果您在谈论HTTP请求,则可以在以下位置找到请求主机: 但这取决于传入的请求。 有关更多信息,请访问http://nodejs.org/docs/v0.4.12/api/http.html#http.ServerRequ

  • 问题内容: 我正在努力寻找一种 将数据写入 Node.js中 的CSV 的方法。 有几个CSV插件可用,但是它们只能“写”到stdout。 理想情况下,我想使用循环 逐行 编写。 问题答案: 对于文档()具体状态,它可以用流(见使用,)。因此,使用stdout并不是硬编码。 当您出现其他一些CSV解析器时,您可能也想看看它们。