命令简介

nc(NetCat)是一个功能丰富的网络工具,可用于通过 TCP 或 UDP 协议读写网络数据。它最初被设计为一个简单的 Unix 工具,用于在两台计算机之间建立 TCP 或 UDP 连接并传输数据。随着时间的推移,nc 已成为一个非常强大的网络工具,可用于各种网络任务,如端口扫描、传输文件、探测防火墙规则等。

命令格式

1
nc [选项] [目标主机] [端口号]

参数说明

参数 说明 备注
-l 监听模式(Listen mode) 用于入站连接
-p 本地端口号 在监听模式下指定本地端口
-u 使用 UDP 协议 默认使用 TCP 协议
-v 详细输出模式 显示更多信息
-w 超时时间(秒) 在连接或读取数据时的超时时间
-z 扫描模式(Zero I/O mode) 用于端口扫描
-k 在连接关闭时保持监听 用于持续监听模式
-c 发送一条命令后退出 适用于简单的命令或脚本

命令实例

基本用法

1.作为 TCP 客户端

1
nc example.com 80

这将尝试连接到 example.com 的 80 端口(HTTP 端口)。连接成功后,您可以直接在终端发送 HTTP 请求。

2.监听 TCP 端口

1
nc -l -p 8000

这将在本地机器上监听 8000 端口上的 TCP 连接。连接成功后,您可以在终端中发送和接收数据。

3.扫描 TCP 端口

1
nc -zv example.com 80-85

这将扫描 example.com 上的 80、81、82、83、84 和 85 端口是否开放。

4.传输文件

1
2
3
4
5
# 发送端
nc -l -p 8000 < file.txt

# 接收端
nc example.com 8000 > received_file.txt

这将在发送端监听 8000 端口,并将 file.txt 的内容发送给连接到该端口的任何客户端。在接收端,将连接到发送端的 8000 端口,并将接收到的数据写入 received_file.txt

扩展用法

1.作为 HTTP 服务器

1
printf 'HTTP/1.1 200 OK\n\nHello, World!' | nc -l -p 8080

这将在本地机器上启动一个简单的 HTTP 服务器,监听 8080 端口。当有客户端连接到该端口时,服务器将响应 “Hello, World!”。

2.作为 Proxy 服务器

1
2
3
4
5
# 在本地机器上启动代理服务器
nc -l -p 8080 -c 'nc example.com 80'

# 在客户端使用代理服务器
nc localhost 8080

这将在本地机器上启动一个简单的代理服务器,监听 8080 端口。当客户端连接到该端口时,代理服务器将建立与 example.com 的连接。客户端可以通过连接到本地 8080 端口来访问 example.com

高级用法

1.端口扫描器

1
2
3
4
5
6
7
8
9
10
#!/bin/bash

host="$1"
ports="20-25 80 443"

for port in $ports; do
timeout 1 bash -c "echo >&2 > /dev/tcp/$host/$port" 2>/dev/null &&
echo "$host:$port is open" ||
echo "$host:$port is closed"
done

这是一个简单的端口扫描器脚本,使用 nc 命令和 Bash 脚本。它扫描目标主机上指定的端口范围和单个端口,并报告每个端口的开放或关闭状态。

2.聊天服务器

1
2
3
4
5
6
7
8
# 在服务器端启动聊天服务器
nc -l -p 8000 | while read line; do
echo "$line" | tee -a chat.log
echo "You said: $line"
done

# 在客户端连接到聊天服务器
nc example.com 8000

这将在服务器端启动一个简单的聊天服务器,监听 8000 端口。客户端可以连接到该端口,并发送消息。服务器将回显客户端发送的消息,并将其记录到 chat.log 文件中。

3.加密通信

1
2
3
4
5
# 在服务器端启动加密通信服务
nc -l -p 8000 | openssl enc -e -base64 | nc -l -p 8001

# 在客户端连接到加密通信服务
nc example.com 8001 | openssl enc -d -base64 | nc example.com 8000

这将在服务器端启动一个加密通信服务,使用 openssl 命令对数据进行 Base64 编码。客户端可以连接到该服务,并使用 openssl 命令对数据进行解码。这种方式可以实现基本的数据加密传输。

以上是关于 nc 命令的详细文档,包括命令简介、语法格式、参数使用说明、演示实例以及扩展和高级使用方法。nc 是一个非常强大和灵活的网络工具,可用于各种网络任务,包括端口扫描、传输文件、探测防火墙规则等。掌握 nc 命令的使用方法对于网络管理员和运维工程师非常有帮助。