nc -l 可在 linux 主机间快速建立轻量无状态通信信道:支持单次文本传递、双向流式交互及对接标准流的结构化传输,适用于调试与日志转发,但仅限可信局域网,需注意端口选择与安全限制。

用 nc -l 配合标准输入输出,可以在两台 Linux 主机间快速搭起一个轻量、无状态的进程间通信信道——它不依赖服务端程序,也不需要配置账户或密钥,本质是把网络连接当成管道来用。
基础信道:单次文本消息传递
这是最简形式,适合调试或触发式通知:
- 接收方(服务器端)运行:nc -l 12345,等待连接
- 发送方(客户端)执行:echo "hello from client" | nc 192.168.1.100 12345
- 接收端立即打印
hello from client并退出 - 注意:该模式是一次性连接,发完即断,不支持持续交互
持续信道:双向流式通信(类聊天)
让信道保持打开,实现多轮输入/输出,适用于日志转发、命令结果回传等场景:
- 接收端监听并持续读取:nc -l 12345 | while IFS= read -r line; do echo "[$(date +%T)] RCV: $line"; done
- 发送端持续写入:while true; do echo "$(hostname): $(date +%s)"; sleep 2; done | nc 192.168.1.100 12345
- 双方都用
Ctrl+C中断;若需自动重连,可在外层加while true; do ...; sleep 1; done - 关键点:
nc -l默认只接受一个连接,如需多客户端并发,需配合socat或循环启动新nc
结构化信道:对接其他进程的标准流
把 nc -l 当作“网络管道入口”,直接接入已有工具链:
- 将远程命令输出实时传给本地分析脚本:nc -l 12345 | grep --line-buffered "ERROR" | mail -s "Alert" admin@example.com
- 把本地监控数据推送到远端采集器:vmstat 1 | stdbuf -oL awk '{print "cpu:" $15}' | nc 192.168.1.200 8080
- 务必加
stdbuf -oL或awk '{print; fflush()}'确保行缓冲生效,避免数据滞留 - 若接收端需同时处理多个来源,建议改用
ncat -k -l 12345(来自 nmap 包),支持多连接复用
安全与可用性提醒
这类信道裸露在网络中,仅适用于可信局域网或临时调试:
- 防火墙需放行对应端口,例如:sudo ufw allow 12345
- 避免使用知名端口(如 22、80),优先选 10000–65535 范围内的高位端口
- 不加密、无认证,切勿传输敏感内容;生产环境请换用
ssh -R或 TLS 封装方案 - 连接中断后不会自动恢复,如需健壮性,应在应用层加入心跳与重连逻辑











