IDhexter/PS-PortScanner-Jobs
GitHub: IDhexter/PS-PortScanner-Jobs
基于 PowerShell 的快速并行端口扫描脚本集,用于企业网络资产清查和开放端口识别。
Stars: 0 | Forks: 0
# PS-网络扫描器
专为局域网(`/24`)TCP 端口审计和资产清查设计的 PowerShell 脚本集。本仓库探讨了三种不同的结构化方法:Runspaces、ForEach-Object Parallel 和静态线性执行。
## 📊 总体对比
| 脚本 | 机制 | 平均速度 (/24) | 最低兼容性要求 | 硬件消耗 |
| :--- | :--- | :--- | :--- | :--- |
| `scanner-runspaces.ps1` | [RunspaceFactory] 池 | 10 - 15 秒 | Windows PowerShell 5.1 | 优化(轻量级线程) |
| `scanner-parallel-ps7.ps1` | ForEach-Object -Parallel | 10 - 15 秒 | PowerShell Core 7.0 | 低(原生线程池) |
| `scanner-linear-legado.ps1` | 顺序 ForEach 循环 | 12 - 15 分钟 | Windows PowerShell 4.0 | 微不足道 |
## 🛠️ 脚本技术详解
### 1. `scanner-runspaces.ps1`(优化的多线程架构)
此脚本通过 .NET Framework API 实现手动线程管理,是原生 Windows PowerShell 5.1 中实现高性能的理想解决方案。
* **内部工作原理:**
* 脚本定义一个 `RunspacePool`,并指定并发实例的最小(1)和最大(30)限制。
* 网络中的每个 IP 作为一个独立的代码块被调度到此执行池中。
* 使用 `System.Net.Sockets.TcpClient` 类结合异步方法 `BeginConnect`。
* `.AsyncWaitHandle.WaitOne(1000)` 方法在主机离线时精确等待 1 秒后中断连接尝试。
* **优点:**
* 可在任何 Windows 上原生运行,无需软件更新。
* 严格的并发控制:防止扫描拖垮交换机或耗尽本机内存资源。
* **缺点:**
* 代码复杂,需要直接操作 .NET 对象并显式释放管道(`.Dispose()`)以防止内存泄漏(*memory leak*)。
### 2. `scanner-parallel-ps7.ps1`(原生并发架构)
采用自 PowerShell 7 引入的基于线程的并行基础设施的现代方法。
* **内部工作原理:**
* 整数 1 到 254 的列表通过管道直接注入到 `ForEach-Object` cmdlet 的 `-Parallel` 参数中。
* `-ThrottleLimit 50` 参数规定解释器默认管理最多 50 个并发操作。
* 与父作用域通信需使用作用域修饰符 `$using:`,这是在子线程中读取变量 `$Rede` 和 `$Porta` 所必需的。
* 维持 .NET Sockets 引擎以控制 1 秒超时。
* **优点:**
* 语法简洁、紧凑、可读性强。
* 线程的管理和终止由 PowerShell Core 引擎自动抽象和处理。
* **缺点:**
* **与 Windows PowerShell 5.1 不兼容。** 如果在标准 Windows 终端中执行,会因语法错误而失败。
### 3. `scanner-linear-legado.ps1`(顺序单任务架构)
基于简单线性循环的基础模型。同步方式每次处理单个 IP 地址。
* **内部工作原理:**
* 使用标准 cmdlet `Test-NetConnection`。
* 每次迭代,操作系统会按顺序执行三个强制操作:通过 DNS 解析名称、检查 ICMP(Ping)和尝试 TCP 握手。
* 脚本没有超时时间控制;延迟由 Windows 的 TCP/IP 协议栈决定(每个不存在的 IP 平均需 3 到 4 秒)。
* **优点:**
* 代码简单,无并发逻辑或处理作用域变量的必要。
* **缺点:**
* 对于企业网络完全不可行。等待离线主机丢弃数据包(*drop*)累积的死时间,会使每个子网的执行时间超过 10 分钟。
## 📋 自定义与配置
所有脚本在文件顶部都有一个静态参数化块。执行前请根据场景进行更改:
```
# 设置为您本地网络的前3个octets
$Rede = "10.174.25"
# 设置为目标TCP端口(例如: 22, 80, 443, 445, 3389)
$Porta = 22
```
标签:AI合规, IPv6, Libemu, PowerShell, PowerShell Core, Runspaces, SSH扫描, TCP端口扫描, 云存储安全, 企业网络, 子网扫描, 对称加密, 并行处理, 性能优化, 插件系统, 数据统计, 本地网络扫描, 检测绕过, 端口扫描, 网络安全, 网络扫描, 网络资产清点, 脚本工具, 脚本集合, 自动化审计, 资源管理, 隐私保护