当前位置: 首页 > 科技观察

网络工具的“瑞士军刀”?

时间:2023-03-19 01:21:34 科技观察

在前言中,我介绍了一个必须知道的网络命令——netstat。今天给大家介绍一下网络工具界的“瑞士军刀”——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:connectto127.0.0.1port1231(tcp)failed:Connectionrefusednc:connectto127.0.0.1port1232(tcp)failed:Connectionrefusednc:connectto127.0.0.1port1233(tcp)failed:ConnectionrefusedConnectionto127.0.0.11234port[tcp/*]成功!其中-n表示直接使用ip地址,不使用域名,-z指定端口范围,-v输出verbose信息。从结果可以看出,1234端口是可以连接的。TCP/UDP连接测试当你在学习TCP相关内容的时候,有没有想过在实践中如何观察状态或者数据包?虽然推荐写TCP连接的server-client程序,但是你也可以使用nc命令来完成,比如在终端输入如下内容:$nc-l1234helloprogrammingpearl表示监听1234端口,然后你可以连接到另一个终端;$nc127.0.0.11234helloprogrammingpearl连接本地地址1234端口,这个过程中可以抓包分析TCP的三次握手。此外,您还可以在已建立的连接之间发送消息(简单的聊天功能),让您分析更多!默认情况下,它会创建一个TCP连接,并使用-u(UDP)参数来测试UDP连接。$nc-v-u182.3.226.3580Connectionto182.3.226.3580port[udp/http]成功!另外还有很多调试用的参数,例如:-b允许广播消息-D启用socket调试模式-ddisable从标准输入读取内容-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/dev/nullwhichredirectsto/dev/null,表示数据被丢弃。然后在另一台主机上执行:$ddif=/dev/zerobs=1Mcount=10|nc-vn127.0.0.11234Connectionto127.0.0.11234port[tcp/*]succeeded!10+0recordsin10+0recordsout10485760bytes(10MB,10MiB)copied,0.0333675s,314MB/sdd复制数据,这里从/dev/zero复制数据0,一次1M,复制10次,最后通过nc命令发送到服务器。完成后,您可以看到统计信息。综上所述,nc命令虽然短小精悍,但却可以在很多方面帮助我们,例如:端口扫描连接测试TCP/UDP服务器客户端监控和连接网络测试代理更多nc命令的神奇用法等着你探索!本文转载自微信公众号“编程明珠”,可通过以下二维码关注。转载本文请联系编程诸暨公众号。