Linux命令之netcat

netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。使用netcat命令所能完成的事情令人惊讶。
netcat所做的就是在两台电脑之间建立链接并返回两个数据流,在这之后所能做的事就看你的想像力了。你能建立一个服务器,传输文件,与朋友聊天,传输流媒体或者用它作为其它协议的独立客户端。

其参数有以下几个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-d 后台模式
-e prog 程序重定向,一旦连接,就执行-e后面的程序 [危险!!]
我们可以通过shell绑定将Windows下的cmd和Linux的/bin/sh绑定,这样非常危险,我们整个系统对别人来说是完全透明,

从下面的例子中我们可以看到。这也是Linux默认去掉-e参数的原因。
-z:用来扫描机器端口 nc -z -v localhost 1-1024
-w:用来表示等待多久时间(以秒为单位)
-l:表示用来作为服务器
-p:表示端口 nc localhost 12345 -p 12346(指定本地端口为12346, 连接到localhost的12345端口)
-r:随机使用端口 nc localhost 12345 -r(随机使用可用端口),效果跟 nc localhost 12345 一样
-v:显示执行过程
-vv:更加详细的显示执行过程
-q:客户端在收到EOF时,经过多少秒才会停止,默认在收到EOF时,客户端会直接停止
-k:用在服务器端,表示当客户端连接断开时,服务器依然保持运行。默认为当客户端断开连接时,服务器端会退出.当不加该参
数时,服务器只能有一个连接,第二个客户端会连接不上,但唯一的客户大un关闭时,服务器也就关闭了加了该参数,服务

器可以接收多个连接,且当所有客户端退出时,服务器依然运行
-u:使用udp协议
-n:使用的是数字的ip地址,不加可以使用域名
-4:使用的是ipv4
-6:使用的是ipv6

nc可以用来作为远程文件复制:

将客户端的copy文件复制到服务器端

1
2
3
4
服务端:
nc -l 12345 > copy.txt
客户端:
nc localhost 12345 < copy.txt

创建远程连接

1
2
3
4
服务端:
$nc -l 1567 -e /bin/bash -i
客户端:
$nc 172.31.100.7 1567