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

SSH连接并发送命令后,无法解析结果为JSON的技术求助

解决SSH执行ifconfig结果转JSON失败的问题

排查步骤与解决方案

1. 先捕获解析错误,明确问题根源

当前代码未处理ifconfig.parse(data)的异常,先添加try-catch块,打印具体报错和原始数据,定位问题:

stream.on('close', function(code, signal) {
  console.log('Stream :: close :: code: ' + code + ', signal: ' + signal);
  conn.end();
  try {
    const json = ifconfig.parse(data);
    console.log(json);
  } catch (err) {
    console.error('解析失败:', err.message);
    console.error('原始输出内容:', data);
  }
})

2. 确保数据编码正确

SSH返回的data是Buffer类型,拼接时需明确转为utf8字符串,避免编码混乱导致解析失败:

stream.on('data', function(d) {
  console.log('STDOUT: ' + d.toString('utf8'));
  data += d.toString('utf8');
})

3. 检查ifconfig输出格式是否匹配库要求

ifconfig-parser仅支持特定格式的ifconfig输出,不同系统(如Linux/BSD)或发行版的ifconfig输出可能存在差异。如果打印的原始数据和库预期格式不符,有两种处理方式:

  • 更换兼容当前系统的解析工具,或改用ip addr命令替代ifconfig,再匹配对应解析库
  • 手动提取字段后转JSON,示例如下(根据实际输出调整正则):
// 提取所有IPv4地址
const ipRegex = /inet (\d+\.\d+\.\d+\.\d+)/g;
const ipList = data.match(ipRegex)?.map(item => item.split(' ')[1]) || [];
const result = { networkInterfaces: { ips: ipList } };
console.log(JSON.stringify(result));

4. 确保数据完全接收

将解析逻辑移至end事件中,确保所有stdout数据都已接收完成再处理:

let data = '';
stream.on('data', function(d) {
  data += d.toString('utf8');
}).on('end', function() {
  try {
    const json = ifconfig.parse(data);
    console.log(json);
  } catch (err) {
    console.error('解析失败:', err);
  }
}).on('close', function(code, signal) {
  console.log('Stream :: close :: code: ' + code + ', signal: ' + signal);
  conn.end();
}).stderr.on('data', function(errData) {
  console.log('STDERR: ' + errData.toString('utf8'));
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:50:28