你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

介绍这个网络工具界的“瑞士军刀”-nc(netcat)

[复制链接]
gaosmile 发布时间:2020-10-10 17:57
前言
今天来介绍这个网络工具界的“瑞士军刀”-nc(netcat),它短小精悍,是网络调试利器,它到底有何能耐呢?
查看端口是否被占用
还记得我们在netstat中介绍的如何查看端口被占用吗?nc也可以完成这样的事情。它使用-l(listen)参数,用于绑定指定端口并监听连接:
$ nc -l 6379
nc: Address already in use
当看到Address already in use的时候,就知道这个端口被占用了,否则它就会在这个端口监听。当然这个作用是我瞎说的,但是可以用。
端口扫描
例如需要扫描某个机器上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 1234hello 编程珠玑
连接本地地址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来说明,因此这里不详解介绍。
HTTP连接测试
例如查看HTTP头信息:
$ nc  www.baidu.com 80
HEAD / HTTP/1.1


HTTP/1.1 302 Found
Connection: Keep-Alive
Content-Length: 17931
Content-Type: text/html
Date: Sun, 23 Jun 2019 13:52:12 GMT
Etag: "54d9748e-460b"
Server: bfe/1.0.8.18
连接后,输入HEAD / HTTP/1.1或HEAD / HTTP/1.0,然后输入两个回车,可查看web服务器相关信息。
数据传输
还是利用前面的连接,借助重定向符可以进行文件传输,例如服务端监听,并把内容输出到out.txt:
$ nc -l 1234 > out.txt
而客户端连接:
$ nc 127.0.0.1 1234 < in.txt
这样客户端in.txt的内容,就会传输到out.txt
关于重定向,可参考《如何linux shell中的2 > &1
当然了,对于文件传输,scp命令能更好地完成这件事。如果你没有其他办法了,可以试试nc。
网络测试
前面说到可以通过nc传输数据,同样如果我们想测试两个主机间的网络速度(当然你可以利用iperf工具来完成这个工作),nc也是可以帮忙的:
#服务端监听:
$ nc -vl 1234 >/dev/null
其中重定向到/dev/null,表示将数据丢弃。
然后在另一台主机上执行:
$ dd if=/dev/zero bs=1M count=10 |nc -vn 127.0.0.1 1234
Connection to 127.0.0.1 1234 port [tcp/*] succeeded!
10+0 records in
10+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 0.0333675 s, 314 MB/s
dd拷贝数据,这里从/dev/zero拷贝数据0,且一次1M,拷贝10次,最后通过nc命令发送到服务端。结束后,就可以看到统计信息了。
总结
nc命令短小精悍,但在很多方面能够帮助我们,例如:
  • 端口扫描
  • 连接测试
  • TCP/UDP服务端客户端监听与连接
  • 网络测试
  • 代理

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

收藏 评论0 发布时间:2020-10-10 17:57

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版