Raffy01/nettool
GitHub: Raffy01/nettool
这是一个基于 C 语言的高性能网络扫描与侦察工具,利用 Raw Sockets 实现多线程主机发现、端口扫描及操作系统指纹识别。
Stars: 0 | Forks: 0
# C 网络侦察实用工具 (Nettool)
### 技术栈




### 核心功能



本仓库提供了一个基于 C 语言、多线程的网络扫描与侦察工具。通过利用 POSIX Raw Socket 直接操作 IP、ICMP 和 TCP 报头,该实用工具绕过了标准的操作系统网络层。它支持高速异步 ICMP Ping 扫描、隐秘 TCP SYN 扫描、网络路由跟踪(Traceroute),以及通过 TTL 和 TCP Window Size 分析进行的操作系统(OS)指纹识别。
## 仓库结构
```
.
├── Makefile
├── nettool.h
├── main.c
├── utils.c
├── ping.c
├── trace.c
└── scan.c
```
- **nettool.h** 核心头文件,定义了跨所有模块使用的共享全局变量、宏、数据结构(如 TCP 伪首部)和函数原型。
- **main.c** CLI 入口点。初始化全局状态,使用 getopt_long 解析用户命令行选项,强制执行 root 权限要求,并处理目标字符串(解析域名或计算 CIDR 子网范围)。
- **utils.c** 包含通用的网络实用工具函数,包括校验和计算、主机名到 IP 的解析、本地 IP 发现,以及基于 IP/TCP 报头的核心 OS 指纹识别逻辑。
- **ping.c** 实现 ICMP Echo Request/Reply 操作。包含带有 RTT 统计信息的标准 Ping 测试器,以及一个高度优化的异步 Ping Sweep (-n),可在 1.5 秒内发现整个子网中的活动主机。
- **trace.c** 通过递增 IP Time-To-Live (TTL) 字段来实现 Traceroute 功能,以映射网络跳数并测量到目标的传输延迟。
- **scan.c** 多线程端口扫描引擎。调度工作线程执行标准 TCP Connect 扫描 (--st)、UDP 扫描 (--su) 和自定义制作的 TCP SYN 隐秘扫描 (--ss),这些扫描无需完成三次握手即可提取详细的 OS 指纹和 Banner 字符串。
## 前置条件
1. **Linux 操作系统**(需要 POSIX 系统调用和 Raw Socket 支持,这在 Windows/macOS 上受到严格限制或实现方式不同)。
2. **GCC**(版本 >= 7.0)。
3. **Pthread 库**(多线程端口扫描所必需)。
4. **Root 权限**(执行必须严格使用 `sudo` 来打开 `SOCK_RAW` Socket)。
## 安装与设置
1. **安装依赖项**(基本构建工具):
sudo apt update
sudo apt install -y build-essential
2. **克隆或复制**此仓库到您的本地机器。
3. **编译程序**:
make
这将生成可执行二进制文件:`nettool`。
**注意**:程序执行时,会自动将开放端口和发现的主机记录到当前目录下的 `nettool_result.log` 文件中。它会智能地将文件所有权转回调用用户(通过 `SUDO_UID` 和 `SUDO_GID`),以防止日志文件被 root 锁定。
4. **清理构建文件**(可选):
make clean
## 使用方法
该工具必须使用 root 权限运行。
```
sudo ./nettool [OPTIONS] [TARGET IP/DOMAIN or CIDR]
```
**目标指定**:
- 支持单个 IP 地址(例如 192.168.0.1)、域名(例如 google.com)和 CIDR 子网表示法(例如 192.168.0.0/24)。
**模式选项**:
- `-s ` :对指定范围执行端口扫描(例如 `-s 80` 或 `-s 1-1024`)。
- `--st` :TCP Connect 扫描(默认模式。高度可靠,但在目标上会留下日志)。
- `--ss` :TCP SYN 隐秘扫描(绕过日志,高度并发,并执行 OS 指纹识别)。
- `--su` :UDP 端口扫描。
- `-n`, `--sn` :高速 Ping Sweep。发现子网中的活动主机而不扫描端口。
- `-p` :标准 Ping 模式。
- `--infinite` :持续 Ping 直到手动停止(Ctrl+C)。
- `-t` :Traceroute 模式。映射到目标的网络跳数。
**调优选项**:
- `-W ` :端口扫描的并发线程数(默认:50)。
- `-T ` :数据包响应的超时阈值,以毫秒为单位(默认:500)。
- `-f ` :从文本文件读取目标(每行一个 IP/域名)。
## 示例工作流
1. **发现本地子网中的活动主机**:
sudo ./nettool -n 192.168.0.0/24
输出:
[안내] 고속 Ping Sweep 시작 (대상 호스트: 254개)...
[Alive] 살아있는 호스트 발견: 192.168.0.1 [TTL: 64, OS: Linux/Unix/Mac]
[Alive] 살아있는 호스트 발견: 192.168.0.5 [TTL: 128, OS: Windows]
Sweep 완료! 총 2개의 호스트 발견.
2. **对特定目标执行带 OS 指纹识别的隐秘 SYN 扫描**:
sudo ./nettool -s 1-1000 --ss -W 100 scanme.nmap.org
输出:
[scanme.nmap.org (45.33.32.156)] 멀티스레드 TCP(SYN) 포트 스캔 시작 (범위: 1-1000, 스레드: 100개)...
[열림] 포트 22 /tcp - (응답 없음, 추측: ssh) [OS: Linux (커널 2.4~2.6+) | TTL:53, Win:29200]
[열림] 포트 80 /tcp - (응답 없음, 추측: http) [OS: Linux (커널 2.4~2.6+) | TTL:53, Win:29200]
스캔 완료! 총 2개의 포트 발견.
## 故障排除
- **"오류: 명령을 실행하려면 루트(sudo) 권한이 필요합니다."** :您必须使用 sudo 运行程序。Raw Sockets 在 Linux 上需要 root 权限。
- **扫描默认为 Connect 扫描而非 SYN 扫描** :确保您对长选项使用双横线(`--ss`)。使用 `-ss` 会被选项解析器误解。
- **端口不可达/主机宕机但您知道其存活** :如果针对高延迟 WAN 上的目标进行测试,请使用 `-T 1000`(1 秒)增加超时阈值。
## 自定义
- **线程数与超时**:如果您经常扫描大型网络,可以修改 `main.c` 中的默认 `max_threads` (50) 和 `timeout_ms` (500) 变量,以更好地适应您的硬件和网络环境。
- **Banner 获取扩展**:当前的 TCP 扫描例程发送基本的 `HEAD / HTTP/1.0` 载荷以探测 HTTP Banner。您可以轻松地在 `scan.c` 中扩展此功能,为 FTP、SMTP 或自定义应用协议发送自定义探测。
## 许可证
此源代码根据 MIT 许可证获得许可。有关详细信息,请参阅 `LICENSE` 文件。
_最后更新时间:2026 年 3 月 29 日_
标签:ICMP Ping, OS指纹识别, POSIX Threads, Raw Sockets, TCP SYN扫描, Traceroute, TTL分析, 云存储安全, 客户端加密, 开源安全工具, 插件系统, 数据统计, 端口扫描, 网络安全, 网络工具, 网络扫描, 逆向工程平台, 隐私保护, 隐蔽扫描