1. 网络通信的“瑞士军刀”:nc命令快速上手
你好,我是老张,在AI和智能硬件这行摸爬滚打了十几年,调试设备、测试服务端接口是家常便饭。很多时候,我需要一个快速、轻量的工具来验证网络通路是否畅通,或者模拟一个简单的客户端/服务器来收发数据。这时候,我第一个想到的往往不是打开IDE写代码,而是直接打开终端,敲入一个简单的命令:nc。
nc,全称 netcat,被很多开发者誉为网络工具中的“瑞士军刀”。它体积小巧,功能却异常强大,能直接通过TCP或UDP协议读写网络连接中的数据。对于网络调试、端口扫描、甚至构建简单的网络服务来说,它都是一个不可或缺的利器。它的核心思想就是“简单直接”:把网络连接当成一个普通的文件或管道,你可以从标准输入(比如键盘输入、或者另一个命令的输出)读取数据发送出去,也可以把接收到的数据直接打印到标准输出(也就是你的终端屏幕上)。
我经常用它来干这几件事:快速检查某个服务器的某个端口是否开放(比telnet更灵活);临时搭建一个微型服务器来接收测试数据;或者作为两个网络服务之间的简易数据中转站。它的学习成本极低,几乎不需要任何配置,命令格式也相当直观。接下来,我就带你从零开始,看看怎么用这把“军刀”来搞定TCP和UDP数据的发送与监听。无论你是运维工程师、后端开发者,还是物联网设备的调试人员,掌握nc都能让你的工作效率提升一大截。
2. 五分钟玩转nc:发送与监听实战
2.1 发送数据:向目标“喊话”
发送数据是nc最基础的功能。你可以把它想象成拿起一个对讲机,调到指定的频率(IP和端口),然后开始说话。这里的关键是区分TCP和UDP这两种不同的“通话模式”。
TCP模式:可靠的“电话连线” TCP协议就像打电话,需要先建立连接,确保你说的每一句话对方都能按顺序、完整地听到。使用nc发送TCP数据非常简单,基本命令格式是:
echo "你要发送的消息" | nc <目标IP地址> <目标端口号>
那个竖线 | 是管道符,意思是将echo命令输出的字符串,传递给nc命令作为输入数据发送出去。举个例子,我想向本机(IP通常是127.0.0.1)的12345端口发送一句问候:
echo "Hello, Server!" | nc 127.0.0.1 12345
敲下回车,如果目标端口有一个服务在监听,这条消息就会被送过去。我实测过很多次,在局域网内测试服务连通性,这个命令又快又准。但有一点要注意,如果目标端口没有服务在监听,nc命令可能会报错“Connection refused”,或者等待一段时间后超时退出,这本身也是一种有用的诊断信息。
UDP模式:快速的“广播喊话” UDP协议则像校园广播或者对讲机群呼,它不事先建立连接,直接把数据包“扔”向目标地址,不管对方是否准备好接收。这种方式更快,但不保证送达。发送UDP数据只需要在nc命令后加上 -u 参数:
echo "Hello, UDP!" | nc -u 127.0.0.1 12345
这个命令会把“Hello, UDP!”打包成一个UDP数据报,发往127.0.0.1的12345端口。UDP发送通常瞬间完成,你几乎看不到任何回显。它非常适合对实时性要求高、允许少量丢包的场景,比如视频流、DNS查询。我在调试一些物联网传感器的UDP上报功能时,就经常用这个命令模拟数据上报,来验证服务器的解析逻辑是否正确。
2.2 监听端口:当好数据的“接收员”
光会发送还不够,我们经常需要自己临时扮演一个服务器,来接收别人发来的数据。nc同样可以轻松监听一个端口,等待连接或数据到来。
监听TCP端口 监听TCP端口使用 -l 参数,代表“listen”(监听)。命令如下:
nc -l <要监听的端口号>
例如,在终端A中执行 nc -l 12345,你的机器就开始在12345端口上等待TCP连接了。此时,在终端B(甚至可以是网络上的另一台电脑)用上面提到的发送命令向这个端口发送数据,终端A就会立刻显示出接收到的内容。这是一个完整的“客户端-服务器”对话模型。监听会一直持续,直到你按下 Ctrl+C 手动终止。我常用这个方法来临时接收同事发来的测试日志片段,或者快速验证防火墙规则是否允许某个端口的入站连接。
监听UDP端口 监听UDP端口则需要同时使用 -l 和 -u 参数:
nc -l -u <要监听的端口号>
执行 nc -l -u 12345 后,程序就开始监听12345端口的UDP数据报。任何发向此地址和端口的数据包都会被捕获并显示出来。由于UDP是无连接的,这个监听器可以接收来自多个不同客户端的消息。这里有个小坑我踩过:nc的UDP监听在某些版本下,接收到第一个数据包后可能会退出。如果你需要持续监听,可以结合循环或者寻找其他参数(如-k,但并非所有版本支持),更稳妥的做法是用我们后面要讲的Python脚本。
2.3 进阶技巧与避坑指南
掌握了基本命令,我们来看看一些能让你用得更爽的进阶技巧和常见问题。
从文件发送或保存到文件 nc的输入输出可以轻松重定向到文件。比如,我有一个 data.txt 文件想发送出去:
nc 127.0.0.1 12345 < data.txt
反过来,如果想把接收到的数据保存下来,可以在监听时使用输出重定向:
nc -


1384

被折叠的 条评论
为什么被折叠?



