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扫描, 云存储安全, 代码生成, 多格式输出, 安全测试, 密码管理, 并发编程, 恢复功能, 插件系统, 攻击性安全, 渗透测试工具, 线程池, 网络安全, 网络扫描, 进度显示, 逆向工具, 隐私保护, 高吞吐量