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

通过Netcat发送命令并保存输出至文件的问题求助

解决Netcat发送命令后输出保存文件出现大量NUL字符的问题

我之前也碰到过类似的糟心情况,用Netcat捕获远程命令输出时文件全是NUL字符,大概率是这几个原因:要么是命令没正确触发远程执行,要么是远程输出带了终端控制字符/二进制空值,要么是Netcat的缓冲机制导致输出没正常写入。给你几个亲测有效的解决办法:

方法1:发送命令时带换行符并过滤NUL字符

远程会话通常需要换行符来确认执行命令,而且NUL字符可以用tr命令直接过滤掉:

echo -e "showHistory userx\n" | nc [远程主机IP/域名] [端口] | tr -d '\0' > out.txt
  • -e参数让echo解析转义字符,\n就是给远程端发送换行,确保命令被执行
  • tr -d '\0'会把输出里的所有NUL字符删除,只保留有效文本

方法2:用命名管道(mkfifo)处理双向会话

如果远程需要多步交互(比如执行完命令还要退出),命名管道是更可靠的方式,之前你可能没处理好会话关闭的问题:

# 创建命名管道
mkfifo nc_pipe
# 后台启动Netcat,从管道读命令,输出写入out.txt
cat nc_pipe | nc [远程主机IP/域名] [端口] > out.txt &
# 发送目标命令
echo "showHistory userx" > nc_pipe
# 发送退出命令,让Netcat正常结束并flush输出
echo "exit" > nc_pipe
# 清理管道
rm nc_pipe

这样Netcat会在收到exit后正常关闭,确保所有输出都写入文件,不会因为会话挂起导致输出截断。

方法3:换用socat替代Netcat(兼容性更好)

不同系统的Netcat(GNU/BSD版本)行为差异很大,socat是更稳定的网络工具,能避免很多奇怪的缓冲问题:

echo -e "showHistory userx\n" | socat - TCP:[远程主机IP/域名]:[端口] | tr -d '\0' > out.txt

额外处理:清除终端控制字符

如果远程输出带了颜色、光标移动等ANSI终端代码,也会导致文件出现乱码或特殊字符,可以再加一步过滤:

echo -e "showHistory userx\n" | nc [远程主机IP/域名] [端口] | tr -d '\0' | sed 's/\x1b\[[0-9;]*m//g' > out.txt

sed命令会去掉所有ANSI转义序列,只保留纯文本内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:07:40