Netcat 命令使用简介

2021-04-29 linux network command

常用的 netcat 相关命令整理。

简介

Netcat 用于调试、检查网络的工具包,可用于创建 TCP/IP 连接,最大的用途就是用来处理 TCP UDP 套接字。在网络安全领域被称作 “TCP IP 的瑞士军刀” (Swiss-army knife for TCP/IP)。

在 CentOS 中,可以通过如下方式安装。

----- CentOS 6版本安装
# yum install nc

----- CentOS 7版本安装
# yum install nmap-ncat

常用参数简单列举如下。

常用参数:
  -k      保持打开,默认只监听一个客户端,如果某一端退出则退出
  -l      监听模式,用于接收链接请求,默认客户端退出后服务同时退出
  -n      直接使用IP地址,不做DNS解析
  -v      用于显示更详细的信息,可以使用多个
  -u      UDP模式
  -w secs 连接超时
  -t      使用TELNET协议
  -e file 链接后执行的命令

常见示例

在此简单列举下常见的示例。

运行于服务器模式,侦听指定端口

默认使用 ipv4(-4),可以显示使用 ipv6(-6);默认当客户端退出后,服务端同时也会退出,可以通过 -k 防止服务端退出;通过 -u 指定是 UDP 连接。

$ nc -l 2389                                     // 创建服务端,监听2389端口
$ nc 127.1 2389                                  // 使用客户端模式来连接到2389端口

端口扫描

----- 扫描10.1.1.180主机上的80或者1~14000号TCP端口
$ nc -v -z -w2 10.1.1.180 80
(UNKNOWN) [10.1.1.180] 80 (www) open
$ nc -v -z -w2 10.1.1.180 1-14000

----- 扫描10.1.1.180主机上的1~14000号UDP端口
$ nc -u -v -z -w2 10.1.1.180 1-14000

REMOTE主机绑定SHELL

----- 绑定到5354端口
$ nc -l -p 5354 -t -e c:\winnt\system32\cmd.exe
$ nc -l -p 5354 -t -e /bin/bash

----- 链接到服务器,可以执行Bash命令
$ nc 10.1.1.180 5354

传输文件/文件夹

将客户端的 testfile 传输到服务器端的 test,可以是文本文件,也可以是二进制文件。对于目录需要通过 tar 打包,然后再发送。

$ nc -l 2389 > test                              // 服务器端将文件重定向到test
$ cat testfile | nc 127.1 2389                   // 客户端传输文件,或者如下
$ nc 127.1 2389 < testfile

$ tar -cvf -- DIR-NAME | nc -l 1567              // 打包目录
$ nc -n 172.1 1567 | tar -xvf -
$ tar -cvf -- DIR-NAME | bzip2 -z | nc -l 1567   // 同时进行压缩,减小带宽的使用
$ nc -n 172.1 1567 | bzip2 -d |tar -xvf -

加密传输

$ nc 127.1 1567 | mcrypt --flush --bare -F -q -d -m ecb > file.txt   // 在此使用mcrypt工具加密数据
$ mcrypt --flush --bare -F -q -m ecb < file.txt | nc -l 1567

以上两个命令会提示需要密码,确保两端使用相同的密码,也可以使用其它任意加密工具。

视频流

虽然不是生成流视频的最好方法,但如果服务器上没有特定的工具,使用 netcat 。

$ cat video.avi | nc -l 1567
$ nc 172.31.100.7 1567 | mplayer -vo x11 -cache 3000 -

克隆一个设备

如果已经安装配置一台 Linux 机器并且需要重复同样的操作对其他的机器,而你不想在重复配置一遍。

$ dd if=/dev/sda | nc -l 1567             // 假设系统在磁盘/dev/sda上
$ nc -n 172.1 1567 | dd of=/dev/sda       // 复制到其它机器

如果已经做过分区并且只需要克隆 root 分区,可以根据系统 root 分区的位置,更改 sda 为 sda1,sda2 等等。

超时控制

多数情况我们不希望连接一直保持,那么我们可以使用 -w 参数来指定连接的空闲超时时间,该参数紧接一个数值,代表秒数,如果连接超过指定时间则连接会被终止。

$ nc -l 2389
$ nc -w 10 localhost 2389                // 该连接将在 10 秒后中断。

注意: 不要在服务器端同时使用 -w 和 -l 参数,因为 -w 参数将在服务器端无效果。

发送Unix Domain Socket

直接发送数据。

$ echo "show stat" | nc -U /usr/var/your.sock