|
|
51CTO旗下网站
|
|
移动端

nc命令,网络工具中的“瑞士军刀”了解一下?

前面介绍过一个不可不知的网络命令-netstat,今天来介绍这个网络工具界的“瑞士军刀”-nc(netcat),它短小精悍,是网络调试利器,它到底有何能耐呢?

作者:守望先生来源:编程珠玑|2019-06-27 17:00

nc命令,网络工具中的“瑞士军刀”了解一下?

作者:守望,Linux应用开发者,目前在公众号【编程珠玑】分享Linux/C/C++/数据结构与算法/工具等原创技术文章和学习资源。

前言

前面介绍过一个不可不知的网络命令-netstat,今天来介绍这个网络工具界的“瑞士军刀”-nc(netcat),它短小精悍,是网络调试利器,它到底有何能耐呢?

查看端口是否被占用

还记得我们在netstat中介绍的如何查看端口被占用吗?nc也可以完成这样的事情。它使用-l(listen)参数,用于绑定指定端口并监听连接:

  1. $ nc -l 6379
  2. nc: Address already in use 

当看到Address already in use的时候,就知道这个端口被占用了,否则它就会在这个端口监听。当然这个作用是我瞎说的,但是可以用。

端口扫描

例如需要扫描某个机器上21-30哪些端口是开放的:

  1. $ nc  -n 127.0.0.1 -z 1230-1234 -v 
  2. nc: connect to 127.0.0.1 port 1230 (tcp) failed: Connection refused 
  3. nc: connect to 127.0.0.1 port 1231 (tcp) failed: Connection refused 
  4. nc: connect to 127.0.0.1 port 1232 (tcp) failed: Connection refused 
  5. nc: connect to 127.0.0.1 port 1233 (tcp) failed: Connection refused 
  6. Connection to 127.0.0.1 1234 port [tcp/*] succeeded! 

其中-n说明直接使用ip地址,而不使用域名,-z指定端口范围,-v输出详细信息。从结果就可以看到,1234端口是可连接的。

TCP/UDP连接测试

当你在学习TCP相关的内容时,是否想着如何自己实践观察里面的状态或者数据包?虽然推荐自己去写一个TCP连接的服务端-客户端程序,但是也可以利用nc命令来完成,例如,在一个终端中输入如下内容:

  1. $ nc -l 1234 
  2. hello 编程珠玑 

表明在1234端口监听,然后可以在另外一个终端进行连接;

  1. $ nc 127.0.0.1 1234 
  2. hello 编程珠玑 

连接本地地址1234端口,这个过程中就可以抓包,分析TCP的三次握手了。

除此之外,你还可以在建立好的连接之间发送消息(简单的聊天功能),让你分析更多!

默认情况,它创建的是TCP连接,而使用-u(UDP)参数可以测试UDP连通性。

  1. $ nc -v -u 182.3.226.35 80 
  2. Connection to 182.3.226.35 80 port [udp/http] succeeded! 

除此之外,还有很多参数用于调试,例如:

  • -b 允许广播消息
  • -D 开启socket调试模式
  • -d 禁止从标准输入读取内容
  • -k 客户端退出后,保持连接
  • -v 显示详细信息

由于在后面的文章中还会借助nc来说明,因此这里不详解介绍。

HTTP连接测试

例如查看HTTP头信息:

  1. $ nc  www.baidu.com 80 
  2. HEAD / HTTP/1.1 
  3.  
  4.  
  5. HTTP/1.1 302 Found 
  6. Connection: Keep-Alive 
  7. Content-Length: 17931 
  8. Content-Type: text/html 
  9. Date: Sun, 23 Jun 2019 13:52:12 GMT 
  10. Etag: "54d9748e-460b" 
  11. Server: bfe/1.0.8.18 

连接后,输入HEAD / HTTP/1.1或HEAD / HTTP/1.0,然后输入两个回车,可查看web服务器相关信息。

数据传输

还是利用前面的连接,借助重定向符可以进行文件传输,例如服务端监听,并把内容输出到out.txt:

  1. $ nc -l 1234 > out.txt 

而客户端连接:

  1. $ nc 127.0.0.1 1234 < in.txt 

这样客户端in.txt的内容,就会传输到out.txt

关于重定向,可参考《如何linux shell中的2 > &1》

当然了,对于文件传输,scp命令能更好地完成这件事。如果你没有其他办法了,可以试试nc。

网络测试

前面说到可以通过nc传输数据,同样如果我们想测试两个主机间的网络速度(当然你可以利用iperf工具来完成这个工作),nc也是可以帮忙的:

  1. #服务端监听: 
  2. $ nc -vl 1234 >/dev/null 

其中重定向到/dev/null,表示将数据丢弃。

然后在另一台主机上执行:

  1. $ dd if=/dev/zero bs=1M count=10 |nc -vn 127.0.0.1 1234 
  2. Connection to 127.0.0.1 1234 port [tcp/*] succeeded! 
  3. 10+0 records in 
  4. 10+0 records out 
  5. 10485760 bytes (10 MB, 10 MiB) copied, 0.0333675 s, 314 MB/s 

dd拷贝数据,这里从/dev/zero拷贝数据0,且一次1M,拷贝10次,最后通过nc命令发送到服务端。结束后,就可以看到统计信息了。

总结

nc命令短小精悍,但在很多方面能够帮助我们,例如:

  • 端口扫描
  • 连接测试
  • TCP/UDP服务端客户端监听与连接
  • 网络测试
  • 代理

nc命令的更多妙用等着你去探索!

【编辑推荐】

  1. Linux块设备中的IO路径及调度策略
  2. 如何定制您的Linux终端提示符
  3. 11个Linux终端命令,没用过的快去试试吧
  4. 如何用Linux命令行发电子邮件
  5. Linux和Windows下如何快速查找电脑计算机端口被谁占用
【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

292人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

647人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

公钥基础设施PKI及其应用

公钥基础设施PKI(Public Key Infrastructure)是利用公钥概念和加密技术为网上通信提供的符合标准的一整套安全基础平台。公钥基础设施能为...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客