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

Node.js通过Telnet向路由设备传输JSON数据的实现方案求助

核心实现说明

  • 你当前代码连接的22端口是SSH协议默认端口,Telnet默认端口为23,首先确认你的路由器Telnet服务实际监听的端口,避免连接错误
  • Telnet协议基于明文文本传输,路由器的Telnet服务通常要求先完成身份认证(输入用户名、密码),之后才能执行指令,传输JSON前需要先完成认证交互
  • 绝大多数路由器的Telnet服务默认只接受特定格式的命令字符串,直接传输JSON前需要确认你的路由器是否支持接收JSON格式指令,否则需要先把JSON序列化为路由器支持的命令格式

示例实现代码

const net = require('net');

const client = new net.Socket();
// 替换为你路由器的Telnet实际端口和IP地址
const TELNET_PORT = 23;
const ROUTER_IP = '192.168.1.1';
// 替换为你的路由器登录账号密码,末尾的换行符不可省略
const USERNAME = 'admin\n';
const PASSWORD = 'your_password\n';
// 要发送的JSON数据
const payload = {
  action: 'set_wifi',
  params: {
    enable: true,
    ssid: 'Home_WiFi'
  }
};
// 序列化JSON为字符串,根据路由器要求补充结束标识(通常为换行符)
const jsonStr = JSON.stringify(payload) + '\n';

client.connect(TELNET_PORT, ROUTER_IP, () => {
  console.log('Telnet连接已建立');
});

// 按交互流程处理服务端返回数据
let authStep = 0;
client.on('data', (data) => {
  const res = data.toString();
  console.log('收到设备响应:', res);
  
  // 匹配登录提示输入账号
  if (authStep === 0 && res.includes('Login:')) {
    client.write(USERNAME);
    authStep = 1;
    return;
  }
  // 匹配密码提示输入密码
  if (authStep === 1 && res.includes('Password:')) {
    client.write(PASSWORD);
    authStep = 2;
    return;
  }
  // 认证完成匹配命令提示符后发送JSON
  if (authStep === 2 && res.includes('#')) {
    client.write(jsonStr);
    authStep = 3;
    return;
  }
  // 收到JSON发送后的响应,关闭连接
  if (authStep === 3) {
    client.destroy();
  }
});

client.on('error', (err) => {
  console.error('连接异常:', err);
});

client.on('close', () => {
  console.log('连接已关闭');
});

注意事项

  • 不同品牌型号的路由器Telnet交互逻辑、命令提示符、支持的输入格式均有差异,以上代码中的登录提示字段(Login:、Password:)、命令提示符(#)需要根据你的路由器实际返回内容调整
  • 部分路由器会对传输的内容做长度限制、特殊字符转义要求,JSON序列化后如果包含特殊字符需要提前做对应转义处理
  • 如果你的路由器不支持直接接收JSON格式指令,需要先把JSON参数转换为路由器支持的命令行格式再发送

内容的提问来源于stack exchange,提问作者Dev Node

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:21:02