ctokx/tokmap
GitHub: ctokx/tokmap
一个基于 Rust 异步运行时的轻量级网络扫描器,复用 nmap 特征库实现端口扫描、服务检测和操作系统识别,支持可选的 LLM 辅助分析。
Stars: 6 | Forks: 0
# tokmap
一个使用 Rust 编写的异步网络扫描器。使用 nmap 的公开特征库进行服务检测、OS 指纹识别和端口频率数据分析。可选择集成 LLM (Gemini) 进行 Banner 分析。
**状态:开发中。** 请参阅下方的 [限制](#limitations)。
## 构建
需要 Rust 工具链(已在稳定版上测试)。
```
cargo build --release
```
二进制文件将位于 `target/release/tokmap`。
## Nmap 数据文件
Tokmap 在运行时从工作目录读取以下 nmap 数据文件:
- `nmap-service-probes` -- 服务特征数据库(约 9500 条特征)
- `nmap-services` -- 端口频率数据(约 27k 条目)
- `nmap-os-db` -- OS 指纹数据库(约 115k 行)
- `nmap-mac-prefixes` -- MAC 厂商前缀(约 49k 条目)
- `nmap-rpc` -- RPC 服务名称(约 1850 条目)
- `nmap-protocols` -- IP 协议号(153 条目)
这些文件来自 [nmap 项目](https://github.com/nmap/nmap/) 且不包含在本仓库中。请下载它们并将其放置在工作目录中。如果缺少任何文件,Tokmap 会优雅地降级处理。
## 用法
```
# 基础扫描
tokmap -t 192.168.1.1 -p 80,443,22
# Top 100 端口(基于 nmap-services 频率排名)
tokmap -t 192.168.1.1 -F
# Top N 端口
tokmap -t 192.168.1.1 --top-ports 50
# 服务检测(banner grabbing + nmap 签名匹配)
tokmap -t 192.168.1.1 -p 80,443,22 -s
# OS detection
tokmap -t 192.168.1.1 -p 80,443 -O
# CIDR range
tokmap -t 192.168.1.0/24 --top-ports 20
# IP range
tokmap -t 192.168.1.1-50 -F
# Timing templates (T0=paranoid .. T5=insane)
tokmap -t 192.168.1.1 -T4 -F
# LLM 辅助 banner 分析(需要 GEMINI_API_KEY env var)
tokmap -t 192.168.1.1 -p 80 -s --llm
```
### 扫描类型
| 标志 | 类型 | 权限 |
|------|------|-----------|
| `--syn` / `-S` | TCP SYN (默认) | Admin/root |
| `--connect` | TCP 连接 | 无 |
| `--ack` / `-A` | TCP ACK | Admin/root |
| `--window` / `-W` | TCP Window | Admin/root |
| `--fin` | TCP FIN | Admin/root |
| `--null` / `-N` | TCP NULL | Admin/root |
| `--xmas` / `-X` | TCP Xmas | Admin/root |
| `--udp` / `-U` | UDP | Admin/root |
### 输出格式
- 默认:终端输出 nmap 风格的表格
- `--json-only`:输出 JSON 到 stdout
- `-o file.json`:输出 JSON 到文件
- XML 和可 Grep 输出可通过库 API 使用(`OutputFormatter::write_xml`,`OutputFormatter::write_grepable`)
## 架构
```
src/
lib.rs -- module exports
bin/main.rs -- CLI entry point (clap)
scanner.rs -- core scan engine (raw sockets via pnet, async via tokio)
packet.rs -- TCP/IP packet construction and response parsing
udp.rs -- UDP probes (18 protocol-specific payloads)
service.rs -- banner grabbing and service identification
service_db/ -- nmap-service-probes parser and matcher
os_db.rs -- nmap-os-db parser
nmap_data.rs -- parsers for nmap-services, nmap-mac-prefixes, nmap-rpc, nmap-protocols
target.rs -- CIDR, IP range, hostname resolution
timing.rs -- timing templates (T0-T5)
ports.rs -- port selection (nmap frequency data with hardcoded fallback)
discovery.rs -- host discovery (TCP ping)
output.rs -- output formatters (table, JSON, XML, grepable)
llm/ -- Gemini API client for LLM-assisted analysis
types.rs -- shared types
```
## 限制
这是一个早期阶段的项目。已知限制:
- **服务检测仅为被动模式。** Tokmap 将 Banner 与 nmap 特征数据库进行匹配,但不会主动发送 nmap 探测负载。对于不会主动发送 Banner 的服务,检测准确率低于 nmap。
- **OS 指纹识别已简化。** 已加载并解析完整的 nmap-os-db,但匹配仅使用 TTL 和窗口大小启发式算法。未实现 nmap 的完整指纹套件(SEQ、OPS、WIN、ECN、T1-T7 测试)。
- **仅支持 IPv4。** 不支持 IPv6。
- **未实现反向 DNS。**
- **开发重点在 Windows。** 主要在 Windows 上测试。应该在 Linux/macOS 上可以运行,但未经广泛测试。
- **无脚本引擎。** 不存在 nmap 的 NSE 等效功能。
- **Raw socket 扫描需要 admin/root 权限。** TCP 连接扫描 (`--connect`) 无需权限即可工作。
- **UDP 扫描为基础版本。** 针对 18 种常见服务发送特定协议探测,但缺乏完整的 nmap UDP 探测集。
- **LLM 集成需要 Gemini API 密钥** 并会进行外部 API 调用。这完全是可选的。
- **未经生产使用审计。** 请勿在安全关键型评估中依赖此工具。
## 法律
仅扫描您拥有或拥有明确扫描权限的网络。未经授权的扫描可能违反适用法律。
## 许可证
MIT
标签:AES-256, Banner Grabbing, C2日志可视化, CIDR, DLL 劫持, Gemini, GitHub, Linux安全, LLM集成, Nmap, Rust, TCP SYN扫描, TCP连接, URL短链接分析, 二进制发布, 人工智能, 可视化界面, 大语言模型, 密码管理, 开源工具, 异步编程, 指纹识别, 插件系统, 操作系统识别, 数据统计, 服务探测, 检测规则, 漏洞评估, 用户模式Hook绕过, 端口扫描, 网络安全, 网络扫描器, 网络流量审计, 网络资产发现, 虚拟驱动器, 通知系统, 隐私保护