You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:31:09