tldr-it-stepankutaj/network-scanner
GitHub: tldr-it-stepankutaj/network-scanner
一款基于 C++ 的高性能跨平台网络扫描工具,专注于通过 ICMP 和 TCP 探测快速发现网段中的存活主机,适合安全评估和日常运维使用。
Stars: 1 | Forks: 0
# network-scanner


`network-scanner` 是一个用 C++ 编写的极速网络扫描工具,支持 ICMP (ping)、TCP 端口探测和回退模式。它能高效扫描整个 IP 范围,并提供基于 RTT 的彩色输出,非常适合系统管理员、红队或基础设施测试人员使用。
## 功能
- ICMP 扫描 (原始套接字 ping)
- TCP 回退 (例如,如果 ICMP 被阻止,则扫描端口 22/80/443)
- 基于 RTT 的彩色输出
- 多线程 (可自定义线程数)
- 跨平台:Linux 和 macOS (包括 ARM64)
- JSON 输出,用于脚本和自动化
- 可配置的探测超时
- MAC 厂商识别 (通过 nmap-mac-prefixes 数据库)
- 优雅的 Ctrl+C 处理并输出部分结果
- 自动子网检测 (支持任何 CIDR 前缀,不仅限于 /24)
- 详细和调试日志模式
- 扫描统计信息 (持续时间、主机数量、发现率)
- Bash 和 Zsh 的 Shell 自动补全
- Man page 文档
- 通过 Google Test 进行单元测试
## 使用方法
```
network-scanner [options]
```
### 选项
| 选项 | 描述 |
|--------|-------------|
| `--threads N` | 线程数 (默认值:CPU 核心数) |
| `--mode MODE` | 扫描模式:`icmp`、`tcp` 或 `fallback` (默认值:`fallback`) |
| `--port PORT` | 用于 TCP 扫描的端口 (默认值:80) |
| `--timeout MS` | 探测超时时间 (毫秒) (默认值:1000) |
| `--thorough` | 详尽扫描模式 (准确率更高,速度较慢) |
| `--json` | 以 JSON 格式输出结果 (非交互式) |
| `--no-color` | 禁用彩色输出 (同时遵循 `NO_COLOR` 环境变量) |
| `--verbose` | 在 stderr 上显示信息性消息 |
| `--debug` | 在 stderr 上显示调试消息 |
| `--show-all` | 显示所有主机,包括未确认的主机 |
| `--skip-scan` | 跳过网络扫描 |
| `--no-banner` | 禁用 ASCII 艺术 Banner |
| `--no-clear` | 启动时不清屏 |
| `--help` | 显示帮助信息 |
| `--version` | 显示版本信息 |
### 示例
```
# 使用默认参数的交互式扫描
network-scanner
# 使用 64 个线程对 443 端口进行 TCP 扫描
network-scanner --mode tcp --port 443 --threads 64
# 用于脚本编写的 JSON 输出
network-scanner --json --no-color | jq .
# 具有更长超时时间的彻底扫描
network-scanner --thorough --timeout 3000
# 用于查看运行状况的 Debug 模式
network-scanner --debug --no-banner --no-clear
```
### Shell 自动补全
该工具附带了对 Bash 和 Zsh 的 Shell 自动补全支持。安装后,以下内容的 Shell 自动补全将自动可用:
- 命令选项 (`--threads`、`--mode`、`--port`、`--timeout`、`--json` 等)
- 模式值 (`icmp`、`tcp`、`fallback`)
```
# 查看 man page
man network-scanner
# 查看命令帮助
network-scanner --help
```
## 依赖项
### 运行时依赖
- libcurl
- libstdc++ (C++ 标准库) — 在发布二进制文件中静态链接
### 可选依赖
- `fping` - 如果原始套接字不可用,在回退模式下使用 (使用 `apt`、`yum` 或 `brew` 安装)
- `nmap-mac-prefixes` - 位于 `/usr/share/nmap/nmap-mac-prefixes` 的 MAC 厂商数据库,用于识别设备厂商
## 兼容性
### 已测试的操作系统
- Ubuntu 20.04 LTS 及更新版本
- Debian 10 及更新版本
- CentOS/RHEL 7 及更新版本 (在 v2.0.0 中通过静态链接修复了 GLIBCXX 问题)
- Fedora 33 及更新版本
- Oracle Linux 9.5
- macOS 12 (Monterey) 及更新版本 (Intel 和 Apple Silicon)
### 所需权限
- ICMP 模式需要 root 权限才能创建原始套接字
- TCP 模式可以以非特权用户身份运行
## 下载
Linux 和 macOS 的预编译二进制文件可供下载:
### 最新版本
| 平台 | 包 | 链接 |
|----------|---------|------|
| Linux (Debian/Ubuntu) | DEB | [network-scanner-latest.deb](https://github.com/tldr-it-stepankutaj/network-scanner/releases/latest) |
| Linux (RHEL/CentOS/Fedora) | RPM | [network-scanner-latest.rpm](https://github.com/tldr-it-stepankutaj/network-scanner/releases/latest) |
| Linux (通用) | TAR.GZ | [network-scanner-linux.tar.gz](https://github.com/tldr-it-stepankutaj/network-scanner/releases/latest/download/network-scanner-linux.tar.gz) |
| macOS (Apple Silicon) | TAR.GZ | [network-scanner-macos-arm64.tar.gz](https://github.com/tldr-it-stepankutaj/network-scanner/releases/latest/download/network-scanner-macos-arm64.tar.gz) |
### 从二进制存档安装
```
# 下载最新版本 (Linux)
curl -LO https://github.com/tldr-it-stepankutaj/network-scanner/releases/latest/download/network-scanner-linux.tar.gz
# 解压
tar -xzf network-scanner-linux.tar.gz
# 安装 (需要 root 权限)
sudo cp -r usr/* /usr/
# 验证安装
network-scanner --version
```
## 构建
### 前置条件
- CMake >= 3.10
- C++17 编译器 (GCC / Clang)
- libcurl 开发头文件
- macOS 或 Linux
### 构建依赖
- `cmake` (>= 3.10)
- 支持C++17的 `g++` 或 `clang++`
- `make`
- `libcurl-dev` / `libcurl4-openssl-dev` (Debian/Ubuntu) 或 `libcurl-devel` (RHEL/Fedora)
- 用于开发/构建 RPM:`rpm-build`
- 用于开发/构建 DEB:`dpkg-dev`
### 构建说明
#### 使用 configure 脚本 (推荐大多数用户使用)
```
git clone https://github.com/tldr-it-stepankutaj/network-scanner.git
cd network-scanner
./configure
make
```
您可以使用以下选项自定义构建:
```
./configure --prefix=/usr/local --debug
```
运行 `./configure --help` 以查看所有可用选项。
#### 直接使用 CMake
```
git clone https://github.com/tldr-it-stepankutaj/network-scanner.git
cd network-scanner
mkdir build && cd build
cmake ..
make -j$(nproc)
```
#### 静态链接 (以实现最大兼容性)
```
cmake -B build -DSTATIC_LIBCXX=ON
cmake --build build --parallel
```
### 运行测试
```
cmake -B build -DBUILD_TESTS=ON
cmake --build build --parallel
cd build && ctest --output-on-failure
```
## 安装
### 从源码安装
如果您使用了 configure 脚本:
```
sudo make install
```
如果您直接使用了 CMake:
```
# 从 build 目录
sudo make install
```
您还可以通过以下命令卸载该软件:
```
sudo make uninstall
```
这将安装:
- 主可执行文件到 `/usr/bin/`
- Man page 到 `/usr/share/man/man1/`
- Bash 补全到 `/usr/share/bash-completion/completions/`
- Zsh 补全到 `/usr/share/zsh/site-functions/`
要更改安装前缀,请使用:
```
./configure --prefix=/usr/local
```
### 从软件包安装
```
# Debian/Ubuntu
sudo dpkg -i network-scanner-*.deb
# RHEL/CentOS/Fedora
sudo rpm -i network-scanner-*.rpm
```
## 更新日志 (v2.0.0)
- **JSON 输出** (`--json`),用于脚本和自动化
- **可配置的超时** (`--timeout MS`),适用于缓慢的网络
- **`--no-color` 标志** 和 `NO_COLOR` 环境变量支持
- **`--verbose` / `--debug`** 日志输出到 stderr
- **优雅的 Ctrl+C** — 中断扫描并干净地输出部分结果
- **自动子网检测** — 使用实际的子网掩码而不是硬编码的 /24
- **MAC 厂商识别** — 通过 ARP + nmap-mac-prefixes 查找设备制造商
- **扫描统计** — 扫描后显示持续时间、主机数量和发现率
- **macOS 网关检测** — 已修复;以前在 macOS 上返回为空
- **安全修复** — 在 fping 回退中将 `std::system()` 替换为 `fork/exec` (无 Shell 注入)
- **静态 libstdc++ 链接** — 修复了在较旧的 Linux 发行版 (RHEL 9、Oracle Linux) 上的 `GLIBCXX_3.4.30` 错误
- **macOS CI 构建** — 发布版中现已包含 ARM64 二进制文件
- **单元测试** — 用于 IP/CIDR 解析、校验和和子网功能的 Google Test 套件
## 许可证
GPL-3.0 许可证
## 作者
本工具由 Stepan Kutaj (TLDR-IT) 开发。欲获取更多信息或有任何疑问,请通过 [stepan.kutaj@tldr-it.com](mailto:stepan.kutaj@tldr-it.com) 联系我,或访问我的网站 [www.tldr-it.com](https://www.tldr-it.com)。
[](https://github.com/tldr-it-stepankutaj)
[](https://www.linkedin.com/in/stepankutaj)
[](https://buymeacoffee.com/stepankutae)
*仅供教育和合法的安全研究目的使用。在对任何系统执行侦察之前,请务必获得适当的授权。*
标签:API安全, Awesome, Bash脚本, C++, CIDR, ICMP Ping, JSON输出, Linux工具, MAC地址厂商识别, Maven构建, Shell自动补全, TCP扫描, 基础设施测试, 存活探测, 插件系统, 数字取证, 数据擦除, 数据泄露防护, 无线安全, 端口探测, 系统管理, 网络发现, 网络安全, 网络工程, 网络扫描器, 网络探测, 自动化脚本, 隐私保护