前言今天给大家介绍一下网络工具界的“瑞士军刀”——nc(netcat)。它短小精悍,是网络调试的利器。它能做什么?查看端口是否被占用还记得我们介绍过如何在netstat中查看端口是否被占用吗?nc也可以完成这样的事情。它使用-l(listen)参数绑定指定端口并监听连接:$nc-l6379nc:Addressalreadyinuse当看到Addressalreadyinuse时,就知道端口被占用了,否则会监听在这个端口上。当然这个功能是我瞎扯的,但是可以用。比如端口扫描需要扫描某台机器上21-30端口有哪些是开放的:$nc-n127.0.0.1-z1230-1234-vnc:connectto127.0.0.1port1230(tcp)failed:Connectionrefusednc:连接到127.0.0.1端口1231(tcp)失败:连接被拒绝nc:连接到127.0.0.1端口1232(tcp)失败:连接被拒绝nc:连接到127.0.0.1端口1233(tcp)失败:连接被拒绝连接到127.0.0.4端口[tcp3/*]成功!其中-n表示直接使用ip地址代替域名,-z指定端口范围,-v输出详细信息。从结果可以看出,1234端口是可以连接的。TCP/UDP连接测试当你在学习TCP相关内容的时候,有没有想过如何练习观察里面的状态或者数据包?虽然推荐自己写一个TCP连接的server-client程序,但是也可以使用nc命令来完成。例如,在一个终端输入如下内容:$nc-l1234hello编程珠表示监听1234端口,然后可以在另一个终端连接;$nc127.0.0.11234hello编程珠连接本地地址的1234端口,在此过程中可以抓包分析TCP的三次握手。除此之外,您可以在已建立的连接之间发送消息(简单的聊天功能),让您进行更多分析!默认情况下,它创建一个TCP连接,-u(UDP)参数可用于测试UDP连接。$nc-v-u182.3.226.3580连接到182.3.226.3580端口[udp/http]成功!此外还有很多用于调试的参数,例如:-b允许广播消息-D启用套接字调试模式-d禁止从标准输入读取内容-k客户端退出后,保持连接-v显示详细信息因为nc会在后面的文章中会用到解释,这里就不详细解释了。HTTP连接测试例如查看HTTP头信息:$ncwww.baidu.com80HEAD/HTTP/1.1HTTP/1.1302FoundConnection:Keep-AliveContent-Length:17931Content-Type:text/htmlDate:Sun,23Jun201913:52:12GMTEtag:"54d9748e-460b"Server:bfe/1.0.8.18连接后输入HEAD/HTTP/1.1或HEAD/HTTP/1.0,然后输入两个回车即可查看web服务器的相关信息。数据传输还是使用之前的连接,文件传输可以借助重定向字符进行,比如服务器端监听,将内容输出到out.txt:$nc-l1234>out.txt和客户端连接:$nc127.0.0.11234
