alireza129/TCP-ICMP-CIDR-IP-scanners-python
GitHub: alireza129/TCP-ICMP-CIDR-IP-scanners-python
一个用Python编写的大规模网络扫描工具集,支持TCP、ICMP扫描和CIDR处理,用于网络资产发现和端口探测。
Stars: 1 | Forks: 0
# 网络批量扫描器
一组用于大规模网络扫描的交互式Python工具:
- `CIDR_Scanner.py`:对IPv4 IP地址和CIDR范围进行TCP扫描,支持CIDR规范化、扩展和采样。
- `ICMP_SCANNER.py`:从IP文本列表进行并发ICMP(ping)扫描,支持断点续扫。
- `TCP_SCANNER.py`:从IP文本列表对一个或多个端口进行并发TCP端口扫描。
所有工具均设计为支持长时间运行、可断点续扫,具备分批处理、进度显示和多种输出格式。
## 目录
- [功能](#features)
- [要求](#requirements)
- [快速开始](#quick-start)
- [CIDR 扫描器](#cidr-scanner)
- [ICMP 扫描器](#icmp-scanner)
- [TCP 扫描器](#tcp-scanner)
- [输入格式](#input-formats)
- [输出](#outputs)
- [CLI选项与提示](#cli-options--prompts)
- [性能提示](#performance-tips)
- [安全与法律](#safety--legal)
- [许可证](#license)
## 功能
- **高吞吐量扫描**:所有脚本均使用Python的 `ThreadPoolExecutor`,并可调整工作线程数。
- **分批处理与进度条**:便于控制每次运行的工作量并查看实时进度。
- **断点续扫与跳过逻辑**:ICMP/TCP扫描器通过状态文件和CSV历史记录实现断点续扫,可中途停止/重启而不丢失已完成工作。
- **丰富的输出**:可读性好的 `.txt` 文件、结构化的 `.csv` 文件以及行分隔的 `.jsonl` 文件,便于后续处理。
- **CIDR感知目标处理**:扩展IPv4 CIDR,从每个CIDR中采样单个主机,或对大型CIDR设置固定目标数量上限。
- **基于主机的CIDR规范化**:接受如 `52.1.1.1/15` 这样的条目,并使用 `ipaddress.ip_network(..., strict=False)` 将其规范化为所属网络。[web:1][web:52]
- **大型CIDR上限策略**:当CIDR在全主机模式下大于配置的每CIDR限制时,扫描器可以按顺序或随机选择目标,而不是拒绝该CIDR。[web:34][web:1]
- **交互式配置**:运行时提示设置超时时间、批处理大小、工作线程数、扫描顺序(顺序/随机)、CIDR扩展模式以及过大CIDR的选择模式。
## 要求
- Python 3.8+。
- 仅使用标准库(无外部依赖):`csv`、`ipaddress`、`json`、`socket`、`concurrent.futures` 等。
- 对于 `ICMP_SCANNER.py`,需要原始套接字权限(例如,Linux上的root权限或Windows上的管理员权限)。
## 快速开始
### 通用克隆与运行
```
git clone [https://github.com/alireza129/TCP-ICMP-CIDR-IP-scanners-python.git](https://github.com/alireza129/TCP-ICMP-CIDR-IP-scanners-python.git)
cd TCP-ICMP-CIDR-IP-scanners-python
# 使脚本可执行 (optional on Unix)
chmod +x CIDR_Scanner.py ICMP_SCANNER.py TCP_SCANNER.py
```
创建一个输入文件(示例见[输入格式](#input-formats)),然后运行所需工具。
### CIDR 扫描器
`CIDR_Scanner.py` 接受一个包含IPv4单个IP和/或CIDR范围的文本文件,规范化基于主机的CIDR,扩展它们(或对每个范围采样),并使用并发连接尝试测试单个TCP端口。[web:1][web:52]
运行:
```
python3 CIDR_Scanner.py
```
交互式提示(按顺序出现):
- `Path to txt file with IPs or CIDRs:` 输入列表的文件路径。
- `Port to test (e.g. 80 or 443) [default=443]:` 要扫描的TCP端口。
- `TCP connect timeout in seconds [default=2.0]:` 每个连接的超时时间。
- `Batch size [default=256]:` 每批处理的目标数量。
- `Worker count [default=128]:` 最大并发连接数。
- `Max targets to scan per CIDR in all-host mode [default=65536]:` 全主机模式下的每CIDR上限;小型CIDR将被完全扩展,而较大的CIDR则被限制在此数量的目标。
- `Scan order - sequential or randomized? [s/r, default=r]:` 最终目标的顺序。
- `CIDR target mode - all hosts or one sample per CIDR? [a/o, default=o]:` 选择每个CIDR贡献一个目标还是最多达到配置的每CIDR上限。
- 如果选择全主机模式:`When a CIDR exceeds the per-CIDR target cap, choose targets sequentially or randomly? [s/r, default=r]:` 选择过大CIDR是贡献前N个可用主机还是N个主机的随机子集。[web:34][web:1]
- 每批处理后:`Continue after batch X/Y? [Y/n or number of more batches]:` 允许提前停止或自动继续。
行为说明:
- 接受设置了主机位的CIDR并自动规范化,因此输入如 `52.1.1.1/15` 是有效的,并被视为所属网络,而不是被拒绝。[web:1][web:52]
- 在**采样**模式下,扫描器为每个CIDR选择一个目标。
- 在**全主机**模式下,扫描器:
- 如果CIDR等于或低于配置的上限,则扫描所有可用主机,
- 否则,使用顺序或随机选择方式扫描最多达到配置上限的目标。[web:34][web:1]
- `/31` 和 `/32` 范围会被特殊处理,即使 `hosts()` 对小型掩码有特殊的边界行为,它们仍然会生成扫描目标。[web:1][web:7]
输出:
- `open_ips.txt`:每行一个IP,表示端口开放。
- `open_ips.csv`:`IP, Ping (ms), Port, Source Range`。
### ICMP 扫描器
`ICMP_SCANNER.py` 向IPv4地址列表发送ICMP回显请求(ping)并记录延迟和状态。
运行:
```
sudo python3 ICMP_SCANNER.py
# 或在Windows上以管理员身份运行
```
交互式提示:
- `Path to txt file with IPs:` IP地址的输入文件。
- `Output filename base (example: icmp_results):` `.txt`、`.csv`、`.jsonl` 和状态文件的基本名称。
- `Timeout in seconds [default=1.5]:` ICMP回复超时时间。
- `Retry count [default=0]:` 每个主机的额外尝试次数。
- `Batch size:` 每批的IP数量。
- `Worker count:` 并发工作线程数。
- `Scan mode - sequential or randomized? [s/r, default=r]:` 主机顺序。
- `Skip already-scanned IPs from previous run? [Y/n]:` 避免重新扫描CSV中已存在的条目。
- `Resume from saved progress if state exists? [Y/n]:` 使用 `.state.json` 文件从上次偏移量继续。
- `How many batches do you want to do right now? [default=1]:` 控制每次运行的工作量,在批处理之间重复此提示。
输出(基本名称为 `icmp_results`):
- `icmp_results.txt`:成功响应的IP列表。
- `icmp_results.csv`:`timestamp, ip, status, latency_ms, error, attempts`。
- `icmp_results.jsonl`:每行一个具有相同字段的JSON对象。
- `icmp_results.state.json`:包含一个用于恢复的简单 `offset` 值。
### TCP 扫描器
`TCP_SCANNER.py` 接受一个IPv4 IP列表(不进行CIDR扩展)并并发扫描一个或多个TCP端口。
运行:
```
python3 TCP_SCANNER.py
```
交互式提示:
- `Path to txt file with IPs:` IP地址的输入文件。
- `Output filename base (example: tcp_results):` 输出文件的基本名称。
- `Timeout in seconds [default=1.5]:` TCP连接超时时间。
- `Retry count [default=0]:` 每个IP:端口的重试次数。
- `Batch size:` 每批的IP数量(每批将扩展为IP×端口个任务)。
- `Worker count:` 最大并发连接数。
- `TCP ports to test (example: 80 or 80,443,22):` 以逗号分隔的端口列表,会进行验证和去重。
- `Scan mode - sequential or randomized? [s/r, default=r]:` IP顺序。
- `Skip already-scanned IP:PORT entries from previous run? [Y/n]:` 使用CSV历史记录跳过已完成的IP:端口对。
- `Resume from saved progress if state exists? [Y/n]:` 使用 `.state.json` 偏移量恢复。
- `How many batches do you want to do right now? [default=1]:` 控制每次运行的工作量,在批处理之间重复此提示。
输出(基本名称为 `tcp_results`):
- `tcp_results.txt`:成功连接的 `ip:port` 列表。
- `tcp_results.csv`:`timestamp, ip, port, status, latency_ms, error, attempts`。
- `tcp_results.jsonl`:相同行的JSONL版本。
- `tcp_results.state.json`:包含 `offset` 的恢复状态。
## 输入格式
### CIDR 扫描器输入
文本文件,每行包含一个IPv4单个IP和/或CIDR范围。
示例:
```
# 单个主机
192.168.1.10
10.0.0.5
# CIDR 范围
192.168.0.0/24
10.0.0.0/16
# 基于主机的CIDR也被接受并规范化
52.1.1.1/15
```
注意:
- 注释(`# ...`)和空行将被忽略。
- 接受基于主机的CIDR并自动使用 `strict=False` 进行规范化,因此键入的地址不必是精确的网络边界。[web:1][web:52]
- IPv6条目将被跳过并报告为无效。
- 在全主机模式下,大型CIDR不再被必然拒绝;相反,它们可以被限制为配置的每CIDR选择目标数。[web:34][web:1]
### ICMP/TCP 扫描器输入
包含IPv4地址的文本文件,以换行或逗号分隔;引号会被去除,重复项会被移除。
示例:
```
192.168.1.10
192.168.1.11, 192.168.1.12
"8.8.8.8"
```
## 输出
这些工具旨在支持手动检查和自动化后处理。
| 脚本 | 成功 TXT | CSV 列 | JSONL 字段 |
|-------------------|---------------------------------------|---------------------------------------------|------------------------------------------|
| `CIDR_Scanner.py` | `open_ips.txt` (每行一个IP) | `IP, Ping (ms), Port, Source Range` | 此脚本不生成 |
| `ICMP_SCANNER.py` | ` .txt` (每行一个成功ping的IP) | `timestamp, ip, status, latency_ms, error` | 与CSV相同,外加任何额外元数据 |
| `TCP_SCANNER.py` | ` .txt` (每行一个成功连接的 `ip:port`) | `timestamp, ip, port, status, latency_ms` | 与CSV相同,外加任何额外元数据 |
您可以使用自己的脚本、`pandas` 或 `jq`、`csvkit` 等命令行工具对CSV/JSONL文件进行后处理。
## CLI选项与提示
所有三个工具都是完全交互式的,会提示输入:
- 目标文件路径(IP或CIDR,取决于脚本)。
- 网络计时:超时时间和可选的重试次数。
- 并发控制:批处理大小和工作线程数。
- 扫描顺序:顺序对比随机(如支持)。
- 持久化:是否从保存的状态恢复和/或跳过已扫描的条目。
- 工作分块:当前会话运行多少批处理。
`CIDR_Scanner.py` 还会询问如何处理CIDR:
- 每个CIDR采样一个样本对比全主机模式。
- 全主机模式下每CIDR扫描的最大目标数。
- 对于过大CIDR,选择的目标是前N个顺序目标还是N个目标的随机子集。[web:34][web:1]
默认值适用于中等规模扫描,但您应根据网络大小和主机性能进行调整。
## 性能提示
- 开始时使用**较小的批处理大小**和**较低的工作线程数**来验证连接性和正确性,然后再扩大规模。
- 逐渐增加工作线程和批处理大小,注意观察超时或连接错误。
- 如果想更均匀地分配目标间的负载,请使用随机扫描顺序。
- 对于 `CIDR_Scanner.py` 中非常大的CIDR,先使用较小的每CIDR上限来验证行为,然后再扫描更广泛的子集。
- 如果想要确定性覆盖,请使用顺序选择过大CIDR;如果想在大范围内更广泛分布,请使用随机选择。[web:34]
- 对于非常大的扫描,请使用“跳过已扫描”和“恢复”选项将工作分散到多个会话中。
## 安全与法律
这些工具旨在用于**您拥有或明确授权的系统**进行**授权安全测试和网络清点**。
- 未经许可,请勿扫描网络或主机。
- 请注意,激进扫描可能会触发IDS/IPS系统或触发速率限制。
- 始终遵守当地法律、您组织的政策以及您交互的任何网络的服务条款。
## 许可证
本项目根据 **GNU通用公共许可证 (GPL)** 授权。
完整许可证文本请参阅 `LICENSE` 文件。
标签:ICMP扫描, Linux安全, TCP扫描, 云存储安全, 代码生成, 多格式输出, 安全测试, 密码管理, 并发编程, 恢复功能, 插件系统, 攻击性安全, 渗透测试工具, 线程池, 网络安全, 网络扫描, 进度显示, 逆向工具, 隐私保护, 高吞吐量