jakobfriedl/asyncscan-bof

GitHub: jakobfriedl/asyncscan-bof

一个异步非阻塞的端口扫描 BOF 工具,专为红队行动设计,支持在后台并发扫描多目标的端口开放状态而不会阻塞 agent 主线程。

Stars: 18 | Forks: 1

# AsyncScan 用于发现一个或多个目标系统开放端口的异步 BOF。端口扫描在后台运行,不会阻塞 agent 的主线程。当启用 `verbose` 模式时,会在找到开放端口时立即报告,并使用 `BeaconWakeup` 将 agent 从 sleepmask 中唤醒。 ## 工作原理 `asyncscan` BOF 包含以下步骤: 1. 逗号分隔的 BOF 参数被解析为扫描目标和端口列表。IP 范围和 CIDR 表示法在传递给 BOF 之前,会由 Conquest 模块进行扩展。 2. 维护一个非阻塞 TCP socket 池。对于每个条目,通过 `getaddrinfo` 解析目标,并立即触发 `connect()`,无需等待结果。 3. `WSAPoll` 最多等待用户指定的超时时间,直到池中的任何 socket 准备就绪。对每个就绪的 socket 调用 `getsockopt(SO_ERROR)` 以区分开放和关闭的端口。 4. 按主机跟踪结果。如果启用了 verbose 模式,开放端口将立即打印,并通过 `BeaconWakeup` 唤醒 agent 以交付输出,而无需等待下一次 check-in。 5. 端口扫描完成后,将打印最终的扫描总结。 可以使用 Conquest 中的 `cancel` 命令,或者使用任何其他框架设置 `hStop` 事件来中止端口扫描。 ## 用法 该目标文件接受以下参数: | 名称 | 类型 | 描述 | | --- | --- | --- | | `targets` | `string` | 逗号分隔的已解析目标列表(IP 或主机名)。 | | `ports` | `string` | 逗号分隔的要扫描的单个端口号列表。 | | `timeout` | `int` | 每次轮询周期等待连接响应的最长时间,单位为毫秒。
对于较慢或较远的目标(互联网、pivot 链),请**增加**此值以避免遗漏开放端口。
对于快速的 LAN 目标,请**减少**此值以提高扫描速度。 | | `maxConn` | `int` | 一次维护的并发连接数。
**增加**此值可以加快扫描速度,但会增加资源消耗。
**减少**此值可以降低网络噪音或避免目标过载。 | | `verbose` | `int` | 设置为 `1` 时,会在发现开放端口时立即报告。 | 此仓库包含一个 [Conquest 模块](./dist/asyncscan.py),它实现了以下命令。 ``` Usage: asyncscan [ports] [--timeout timeout] [--max-conn max-conn] [--verbose] Example: asyncscan 192.168.168.0/24 1-1000,8443 --verbose Required arguments: targets STRING Comma-separated list of targets to scan. Use `-` or CIDR notation to specify IP ranges (e.g. 192.168.1.0-128,192.168.1.200,10.0.1.0/24). Optional arguments: ports STRING Comma-separated list of ports to check. Use `-` to specify port ranges (default: nmap top 1000). --timeout timeout INT Maximum time to wait per poll cycle for connections to respond in ms (default: 500). --max-conn max-conn INT Number of concurrent connections the port scanner maintains at one time (default: 1024). --verbose BOOL Report open ports as they are discovered (default: false). ``` 在 verbose 模式下,发现开放端口时会立即将其打印到 agent 控制台。如果不提供 `ports` 参数,BOF 默认会扫描 [nmap 前 1000 个](https://github.com/danielmiessler/SecLists/blob/master/Discovery/Infrastructure/nmap-ports-top1000.txt)端口。 ![Verbose 模式](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/65b5f4d8a3231213.png) 当所有目标和端口都扫描完毕后,最终的扫描总结会显示按目标主机分组的开放端口。 ![总结](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/e034955115231219.png) ## 安装 ``` git clone https://github.com/jakobfriedl/asyncscan-bof cd asyncscan-bof make ``` 然后,使用 Conquest 的 Script Manager 加载 `dist/asyncscan.py` 模块,并开始使用 `asyncscan` 命令进行扫描。
标签:BOF, C/C++, Cobalt Strike, 事务性I/O, 客户端加密, 异步编程, 插件系统, 攻击诱捕, 数据统计, 欺骗防御, 端口扫描, 逆向工具