NodeJS如何仅针对IPv6绑定监听TCP/UDP端口?
在Node.js中仅监听IPv6指定端口的实现方法
可行。默认情况下,Node.js创建IPv6套接字时会启用双栈模式(同时兼容IPv4),所以绑定::会同时监听IPv4和IPv6端口。要实现仅监听IPv6,只需在创建套接字或服务器时开启ipv6Only: true选项。
UDP 实现示例
默认双栈模式(同时监听IPv4+IPv6)
const dgram = require('dgram'); const s = dgram.createSocket('udp6'); s.bind(23513, "::");
执行后通过netstat -ano | find "23513"查看,会同时监听IPv4和IPv6端口:
UDP 0.0.0.0:23513 *:* UDP [::]:23513 *:*
仅监听IPv6
添加ipv6Only: true选项:
const dgram = require('dgram'); // 创建udp6套接字时指定ipv6Only为true const s = dgram.createSocket({ type: 'udp6', ipv6Only: true }); s.bind(23513, "::");
此时再查看端口监听状态,只会出现IPv6的监听条目:
UDP [::]:23513 *:*
TCP 实现示例
默认双栈模式(同时监听IPv4+IPv6)
const net = require('net'); const s = net.createServer((socket) => {}) s.listen(23513, '::');
执行后netstat -ano | FIND "23513"结果:
TCP 0.0.0.0:23513 0.0.0.0:0 LISTENING TCP [::]:23513 [::]:0 LISTENING
仅监听IPv6
在listen方法的配置参数中添加ipv6Only: true:
const net = require('net'); const s = net.createServer((socket) => {}) s.listen({ port: 23513, host: '::', ipv6Only: true });
此时查看监听状态,仅存在IPv6的监听条目:
TCP [::]:23513 [::]:0 LISTENING
原理说明
Node.js中,IPv6套接字默认的ipv6Only选项为false,这会让操作系统开启双栈模式,允许IPv6套接字同时处理IPv4连接(通过映射机制)。将该选项设为true后,操作系统会限制套接字仅处理IPv6流量,从而实现仅监听IPv6端口的需求。
内容的提问来源于stack exchange,提问作者Alon Amir
相关产品推荐
相关产品推荐

