IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    网络工具神器netcat

    chancel发表于 2023-11-21 00:00:00
    love 0
    <![CDATA[

    1. Netcat

    1.1. 简介

    netcat(以下简称为nc)是一个非常强大的跨平台网络工具(Windows/Linux/MacOS),包括但不限于以下场景的使用

    1. 端口扫描
    2. 带宽测试
    3. 文件传输
    4. 简易网络代理服务器
    5. 端口重定向
    6. 网络调试
    7. http 服务器
    8. 反向 shell
    9. 聊天工具

    鉴于nc的使用用途过多,本文主要实践了常用的端口扫描、宽带测试以及文件传输等 3 个功能

    1.2. 安装

    在 Linux 下安装nc

    Bash
    # Debian/Ubuntu
    sudo apt-get install netcat
    
    # CentOS/Fedora
    sudo yum -y install nc
    
    # ArchLinux
    sudo pacman -S gnu-netcat
    
    # Alpine
    sudo apk add netcat-openbsd
    

    在 Windows 下安装 Netcat(也称为 nc)程序可以通过以下步骤完成

    • 下载 Windows 版本的 Netcat 可执行文件(例如,从 https://eternallybored.org/misc/netcat/ 下载)
    • 将下载的 nc.exe 文件放置在一个方便的位置,例如 C:\Apps\Bin\netcat 下
    • 将 C:\Apps\Bin\netcat 添加到系统的环境变量中,以便在任何位置都可以直接使用 nc 命令

    2. 使用

    2.1. 端口扫描

    nc 测试 192.168.1.100 的 80 端口

    Bash
    nc -zv 192.168.1.100 80
    

    输出如下,可以看到端口是畅通的

    Bash
    $ nc -zv 192.168.1.100 23456
    Connection to 192.168.1.100 23456 port [tcp/http] succeeded!
    

    测试时常用指令如下:

    • -z:让 netcat 在连接建立后立即关闭连接,常用于扫描监听某个端口的服务是否开启
    • -u:使用 UDP 协议进行连接,不加这个参数默认使用的是 TCP 协议
    • -v:详细模式,显示执行的详细情况
    • -l:用于设置 netcat 为监听模式,通常用于创建服务
    • -p:指定本地的端口
    • -w:设置连接超时时间
    • -n:不进行 DNS 名称解析

    除了单个端口扫描外,我们也可以一次性扫描多个端口

    Bash
    nc -zv -w 1 192.168.1.100 1-10000
    

    上面的命令会输出大量不成功的记录,如果我们只想知道哪些端口是开放的,可以结合grep来过滤输出结果

    Bash
    nc -zv -w 1 192.168.1.100 1-10000 2>&1 | grep succeeded
    

    2.2. 网络带宽

    如果要测试网络带宽,可以结合pv来实现

    pv(Pipe Viewer)是 Linux 中的一个用于显示数据传输的进度信息工具,用于监视管道或文件传输的进度和速度

    在 A 机器(192.168.1.100)上,接收数据的指令

    Bash
    nc -l 23456 > /dev/null
    

    在 B 机器上,发送数据(100Mb)给 A 机器

    Bash
    dd if=/dev/zero bs=1M count=100 | pv -pterb | nc 192.168.1.100 23456
    

    执行输出如下

    Bash
    chancel@j3455 ~$ dd if=/dev/zero bs=1M count=10 | pv -pterb | nc 192.168.1.100 23456
    10+0 records in [1.08MiB/s] [  <=>                                                                                                                            ]
    10+0 records out
    10485760 bytes (10 MB, 10 MiB) copied, 1.36881 s, 7.7 MB/s
    10.0MiB 0:00:01 [7.27MiB/s] [     <=>                                                                                                                         ]
    

    其中pv程序的参数-pterb含义如下:

    • -p:显示进度条,以可视化方式表示传输进度
    • -t:显示估计的剩余时间
    • -e:显示估计的已完成时间
    • -r:显示传输速率
    • -b:以字节为单位显示传输的数据量

    而dd if=/dev/zero bs=1M count=100 和 /dev/null 这两个前者表示生成一个大小为 100MB(1MB x 100)的空文件,后者表示将接收的数据全部丢弃

    2.3. 文件传输

    显然,在带宽测试环节上,我们只要稍加修改,也可以用nc来传输文件,操作如下

    在 A 机器(192.168.1.100)上,执行接收app.tar.gz的指令

    Bash
    nc -l -p 23456 > app.tar.gz
    

    在 B 机器上,发送文件app.tar.gz给 A 机器

    Bash
    pv -pterb app.tar.gz | nc 192.168.1.100 23456
    

    3. 结束

    netcat是非常强大的网络工具,掌握它有助于在开发时排查多数网络问题



沪ICP备19023445号-2号
友情链接