一个计算机技术爱好者与学习者

0%

好好学Linux:nc命令

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参数

  1. 启动一个TCP服务器

    1
    nc -k -l 4321
  2. 模拟发送http请求

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    curl "http://localhost:1234" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer xxx" \
    -d '{
    "model": "claude-3-5-sonnet-v2",
    "messages": [
    {
    "role": "user",
    "content": "hello"
    }
    ]
    }'
  3. 观察TCP服务器的输出
    可以看到输出内容为:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    POST / 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
2
3
4
5
nc example.com 80 << EOF
GET / HTTP/1.1
Host: example.com

EOF

5.3. 端口转发

把所有发送到本地1234端口的数据转发到example.com的80端口。

1
nc -l 1234 | nc example.com 80

5.4. 代理服务器

把所有发送到本地1234端口的数据转发到example.com的80端口,并将返回转发给客户端。

1
2
mkfifo proxy_pipe
nc -l 1234 0<proxy_pipe | nc example.com 80 1>proxy_pipe

5.5. 远程shell

nc命令可以实现远程shell,但是因为版本问题会出现各种报错,因此建议使用ncat。

  1. 安装ncat

    1
    2
    yum install -y nmap-ncat # centos
    apt install -y ncat # ubuntu
  2. 服务器端(谨慎使用,有安全风险)

    1
    ncat -l -p 1234 -e /bin/bash --allow 192.168.1.100
  3. 客户端

    1
    2
    ncat server_ip 1234
    ls

6. nc命令的替代

虽然netcat很强大,但有些场景下这些工具可能更适合:

  • socat:更强大的netcat替代品
  • ncat:支持SSL和更多协议,是 netcat 的增强版
  • telnet:简单的交互式连接
  • curl/wget:HTTP/HTTPS专用

7. 小结

netcat是一个极其灵活的网络工具,可以用于:

  • 端口扫描和测试
  • 简单的网络服务搭建
  • 文件和数据的网络传输
  • 网络调试和故障排除
  • 作为其他工具的组件构建更复杂的解决方案

掌握netcat可以提高在Linux环境下的网络管理和故障排除效率。

  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-linux-nc/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~