1. nc命令简介
netcat(通常简称为nc)是一个功能强大的网络工具,被誉为”网络瑞士军刀”。它可以通过TCP或UDP协议读写网络连接,提供了丰富的网络调试和探测功能。netcat最初由Hobbit在1996年发布,现已成为Linux/Unix系统管理员和网络安全专家的必备工具。
参考文档:
2. 不同版本的nc
netcat有多个实现,功能略有不同:
- 原始netcat(Hobbit版本)
- GNU netcat
- OpenBSD netcat(功能最丰富)
- Ncat(来自nmap项目,支持SSL等高级功能)
3. 安装nc命令
3.1. macos
安装 GNU 版本 netcat
1 | brew install netcat |
3.2. centos
安装 OpenBSD 版本 netcat
1 | yum install -y netcat |
3.3. ubuntu
安装 OpenBSD 版本 netcat
1 | apt install -y netcat |
4. nc基本用法
4.1. 端口扫描
1 | nc -zv example.com 20-80 |
-z
:扫描模式,不发送任何数据-v
:详细输出20-80
:扫描20到80端口
4.2. 简单的TCP客户端/服务器
服务器端(监听端口1234):
1 | nc -l 1234 |
客户端(连接到服务器):
1 | nc localhost 1234 |
4.3. 简单的UDP客户端/服务器
服务器端:
1 | nc -ul 1234 |
客户端:
1 | nc -u localhost 1234 |
4.4. 监听端口并接收HTTP参数
启动一个TCP服务器
1
nc -k -l 4321
模拟发送http请求
1
2
3
4
5
6
7
8
9
10
11
12curl "http://localhost:1234" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer xxx" \
-d '{
"model": "claude-3-5-sonnet-v2",
"messages": [
{
"role": "user",
"content": "hello"
}
]
}'观察TCP服务器的输出
可以看到输出内容为:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17POST / HTTP/1.1
Host: localhost:1234
User-Agent: curl/8.7.1
Accept: */*
Content-Type: application/json
Authorization: Bearer xxx
Content-Length: 175
{
"model": "claude-3-5-sonnet-v2",
"messages": [
{
"role": "user",
"content": "hello"
}
]
}
5. 高级用法
5.1. 文件传输
从server1发送文件到server2:
在接收方(server2):
1 | nc -l 1234 > received_file |
在发送方(server1):
1 | nc server2 1234 < file_to_send |
5.2. 发送HTTP请求
1 | nc example.com 80 << EOF |
5.3. 端口转发
把所有发送到本地1234端口的数据转发到example.com的80端口。
1 | nc -l 1234 | nc example.com 80 |
5.4. 代理服务器
把所有发送到本地1234端口的数据转发到example.com的80端口,并将返回转发给客户端。
1 | mkfifo proxy_pipe |
5.5. 远程shell
nc命令可以实现远程shell,但是因为版本问题会出现各种报错,因此建议使用ncat。
安装ncat
1
2yum install -y nmap-ncat # centos
apt install -y ncat # ubuntu服务器端(谨慎使用,有安全风险)
1
ncat -l -p 1234 -e /bin/bash --allow 192.168.1.100
客户端
1
2ncat server_ip 1234
ls
6. nc命令的替代
虽然netcat很强大,但有些场景下这些工具可能更适合:
- socat:更强大的netcat替代品
- ncat:支持SSL和更多协议,是 netcat 的增强版
- telnet:简单的交互式连接
- curl/wget:HTTP/HTTPS专用
7. 小结
netcat是一个极其灵活的网络工具,可以用于:
- 端口扫描和测试
- 简单的网络服务搭建
- 文件和数据的网络传输
- 网络调试和故障排除
- 作为其他工具的组件构建更复杂的解决方案
掌握netcat可以提高在Linux环境下的网络管理和故障排除效率。