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

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

[复制链接]
gaosmile 发布时间:2020-10-10 17:57
前言
今天来介绍这个网络工具界的“瑞士军刀”-nc(netcat),它短小精悍,是网络调试利器,它到底有何能耐呢?
查看端口是否被占用
还记得我们在netstat中介绍的如何查看端口被占用吗?nc也可以完成这样的事情。它使用-l(listen)参数,用于绑定指定端口并监听连接:
$ nc -l 6379
% _: y2 t* A: H1 R7 X( x2 A& x2 |nc: Address already in use! Q' e( p, j5 G' ~; r0 H! `2 A
当看到Address already in use的时候,就知道这个端口被占用了,否则它就会在这个端口监听。当然这个作用是我瞎说的,但是可以用。
端口扫描
例如需要扫描某个机器上21-30哪些端口是开放的:
$ nc  -n 127.0.0.1 -z 1230-1234 -v7 a+ m9 A4 r% H- l' ^
nc: connect to 127.0.0.1 port 1230 (tcp) failed: Connection refused
( G! i$ r( }( W5 lnc: connect to 127.0.0.1 port 1231 (tcp) failed: Connection refused
0 C/ A6 ?+ Y( [; u4 onc: connect to 127.0.0.1 port 1232 (tcp) failed: Connection refused) n4 I( U, C% S$ b3 D* f9 M2 o" m2 j: U
nc: connect to 127.0.0.1 port 1233 (tcp) failed: Connection refused4 O0 B9 J/ T- g- f; d  F* O
Connection to 127.0.0.1 1234 port [tcp/*] succeeded!
. e$ r  \: g/ _( r+ R( _2 p
其中-n说明直接使用ip地址,而不使用域名,-z指定端口范围,-v输出详细信息。从结果就可以看到,1234端口是可连接的。
TCP/UDP连接测试
当你在学习TCP相关的内容时,是否想着如何自己实践观察里面的状态或者数据包?虽然推荐自己去写一个TCP连接的服务端-客户端程序,但是也可以利用nc命令来完成,例如,在一个终端中输入如下内容:
$ nc -l 1234# R7 n% B' G+ C/ R$ c
hello 编程珠玑' T3 p; L2 p* w" }# v/ q
表明在1234端口监听,然后可以在另外一个终端进行连接;
$ nc 127.0.0.1 1234hello 编程珠玑
连接本地地址1234端口,这个过程中就可以抓包,分析TCP的三次握手了。
除此之外,你还可以在建立好的连接之间发送消息(简单的聊天功能),让你分析更多!
默认情况,它创建的是TCP连接,而使用-u(UDP)参数可以测试UDP连通性。
$ nc -v -u 182.3.226.35 80# A' G* z4 H' Z: O$ \3 L6 g. D
Connection to 182.3.226.35 80 port [udp/http] succeeded!
6 i, w4 w8 k6 e6 R. C: A5 y
除此之外,还有很多参数用于调试,例如:
  • -b 允许广播消息
  • -D 开启socket调试模式
  • -d 禁止从标准输入读取内容
  • -k 客户端退出后,保持连接
  • -v 显示详细信息
    . G& T) l& z7 W* U* ]1 z% `0 p: i
由于在后面的文章中还会借助nc来说明,因此这里不详解介绍。
HTTP连接测试
例如查看HTTP头信息:
$ nc  www.baidu.com 80! G0 e9 q' N- g- k; t( X2 z0 A2 `
HEAD / HTTP/1.1. ~9 e  k0 f" {; j& a  O
- ^0 e7 ~* V4 G4 m
6 |. o1 o% G7 l
HTTP/1.1 302 Found' L! r$ a' _& Q) k* C
Connection: Keep-Alive, Q# l; q8 X' [1 @
Content-Length: 17931+ L6 [) e& q- ~) Q
Content-Type: text/html
6 A8 _$ s" V& j& {1 o- S' SDate: Sun, 23 Jun 2019 13:52:12 GMT
# s7 F+ \+ R3 A& F9 K! @Etag: "54d9748e-460b"
$ S! |* A3 n/ J" V8 v4 V7 gServer: bfe/1.0.8.18
7 j0 D3 G% e: _! I: H
连接后,输入HEAD / HTTP/1.1或HEAD / HTTP/1.0,然后输入两个回车,可查看web服务器相关信息。
数据传输
还是利用前面的连接,借助重定向符可以进行文件传输,例如服务端监听,并把内容输出到out.txt:
$ nc -l 1234 > out.txt9 N% q1 |& r) k' B6 {# v( j6 n* k
而客户端连接:
$ nc 127.0.0.1 1234 < in.txt* `" x9 j+ Q2 g* M& K
这样客户端in.txt的内容,就会传输到out.txt
关于重定向,可参考《如何linux shell中的2 > &1》
当然了,对于文件传输,scp命令能更好地完成这件事。如果你没有其他办法了,可以试试nc。
网络测试
前面说到可以通过nc传输数据,同样如果我们想测试两个主机间的网络速度(当然你可以利用iperf工具来完成这个工作),nc也是可以帮忙的:
#服务端监听:
/ m5 x/ ^1 y. |: {5 e- f" t$ nc -vl 1234 >/dev/null+ U% I1 g* e0 Z2 h$ d) c0 ~" b
其中重定向到/dev/null,表示将数据丢弃。
然后在另一台主机上执行:
$ dd if=/dev/zero bs=1M count=10 |nc -vn 127.0.0.1 12340 E; y- `9 z; Q& ~( `* v: R
Connection to 127.0.0.1 1234 port [tcp/*] succeeded!, L* O9 P5 @% ?0 f: o) ?
10+0 records in
6 h7 X7 P9 K! X5 \8 [10+0 records out
" a0 Q5 d- U" j; m10485760 bytes (10 MB, 10 MiB) copied, 0.0333675 s, 314 MB/s; Q6 l- @& W8 _9 |5 q
dd拷贝数据,这里从/dev/zero拷贝数据0,且一次1M,拷贝10次,最后通过nc命令发送到服务端。结束后,就可以看到统计信息了。
总结
nc命令短小精悍,但在很多方面能够帮助我们,例如:
  • 端口扫描
  • 连接测试
  • TCP/UDP服务端客户端监听与连接
  • 网络测试
  • 代理

    2 m, N8 j$ R- c& c/ P, k; t5 j
nc命令的更多妙用等着你去探索!
$ k! v8 f1 V  H: C. _1 O8 q3 C1 f
赞 收藏 评论0 发布时间:2020-10-10 17:57

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版