nc
工具即Netcat(网络猫),是一个小巧的网络测试工具,它可以作为TCP或UDP客户端向服务器发送信息,也可以作为服务端监听TCP或UDP接口。nc
可以用于作为客户端或服务端定位检测网络软件的故障,在开发和运维中都比较常用,也经常用于渗透测试用途。
注:Ubuntu下nc
命令默认使用的是netcat-openbsd
版本,这个版本更注重安全性和简洁性,功能较少,不过通常来说也足够使用了,因此推荐使用;另一个版本是netcat-traditional
,它功能更多但需要我们单独安装,使用上也有一些区别,下面介绍的内容都是以netcat-openbsd
版本为准。
-l
:以监听模式启动,使用nc
作为服务端-k
:即--keep-open
的缩写,nc
默认会在客户端断开后关闭服务端结束测试,指定-k
则会保证服务端持续运行-s
:指定源IP地址(用于多网卡主机)-u
:使用UDP协议,不指定时默认使用TCP协议-v
:详细信息输出模式-w
:指定超时时间(秒)-z
:作为客户端只连接不写入任何信息有关更多的使用方法,可以参考相关的Man手册man nc
。
下面例子中我们在同一台主机上模拟测试TCP网络连接。
nc -l 8080
nc localhost 8080
两条命令分别代表启动nc
服务端并监听8080
端口,以及启动nc
客户端连接8080
端口。两条命令执行后都可以直接在标准输入中键入信息,写入的信息会被发送给对方,实现TCP全双工通信。
nc
默认会在客户端断开后关闭服务端结束测试,如果想持续保持服务端开启,可以在服务端指定-k
参数。
下面例子中我们在同一台主机上模拟测试UDP网络连接。
nc -lu 8080
nc -u localhost 8080
用法和TCP一致,这里就不多赘述了。
Ubuntu下默认自带的是netcat-openbsd
版本,安装netcat-traditional
可以执行以下命令:
apt-get install netcat-traditional
安装后我们可以使用update-alternatives
切换当前命令到netcat-traditional
版本。
update-alternatives --config nc
netcat-traditional
版本的用法和netcat-openbsd
在细节上可能存在不同,相对而言可能也不是那么好用,具体参考文档即可,这里就不多介绍了。