例如需要扫描某个机器上21-30哪些端口是开放的:
$ nc -n 127.0.0.1 -z 1230-1234 -v
nc: connect to 127.0.0.1 port 1230 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 1231 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 1232 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 1233 (tcp) failed: Connection refused
Connection to 127.0.0.1 1234 port [tcp/*] succeeded!
其中-n说明直接使用ip地址,而不使用域名,-z指定端口范围,-v输出详细信息。从结果就可以看到,1234端口是可连接的。
TCP/UDP连接测试
当你在学习TCP相关的内容时,是否想着如何自己实践观察里面的状态或者数据包?虽然推荐自己去写一个TCP连接的服务端-客户端程序,但是也可以利用nc命令来完成,例如,在一个终端中输入如下内容:
$ nc -l 1234
hello 编程珠玑
表明在1234端口监听,然后可以在另外一个终端进行连接;
$ nc 127.0.0.1 1234
hello 编程珠玑
连接本地地址1234端口,这个过程中就可以抓包,分析TCP的三次握手了。
除此之外,你还可以在建立好的连接之间发送消息(简单的聊天功能),让你分析更多!
默认情况,它创建的是TCP连接,而使用-u(UDP)参数可以测试UDP连通性。
$ nc -v -u 182.3.226.35 80
Connection to 182.3.226.35 80 port [udp/http] succeeded!
除此之外,还有很多参数用于调试,例如:
-b 允许广播消息
-D 开启socket调试模式
-d 禁止从标准输入读取内容
-k 客户端退出后,保持连接
-v 显示详细信息
由于在后面的文章中还会借助nc来说明,因此这里不详解介绍。