ScanSearch/scansearch-python
GitHub: ScanSearch/scansearch-python
ScanSearch 的官方 Python SDK 和命令行工具,提供按需触发的互联网扫描能力,实时获取目标端口、服务指纹和资产暴露信息,是 Shodan 和 Censys 的替代方案。
Stars: 0 | Forks: 0
# scansearch-python
[**ScanSearch**](https://scansearch.net) 的官方 Python SDK 和 CLI —— 一个
**按需互联网扫描器**。通过 REST API 触发对任何 IP、CIDR
或国家的真实 SYN + 服务扫描,并在几秒钟内获取结果。没有过时的索引,
没有缓存的快照 —— 每次都是真实的扫描。
[](https://pypi.org/project/scansearch/)
[](https://pypi.org/project/scansearch/)
[](LICENSE)
## 可以扫描的目标
| 目标类型 | 示例 |
|---|---|
| 单个 IP | `1.2.3.4` |
| CIDR | `192.0.2.0/24` |
| CIDR / IP 列表 | `["10.0.0.0/8", "203.0.113.5"]` |
| 整个国家 | 国家代码 `DE`, `US`, `CN`, … |
| 域名列表 | `example.com`, `acme.io` |
## 扫描参数
- **端口** — 任意选择:`"22,80,443"`,范围 `"1-65535"`,或完整的常用端口列表。
- **模块** — 选择要收集的内容(请参阅下面的[收集内容](#what-gets-collected))。
- **速度** — 扫描器的 kpps(千包/秒,即每秒数据包数 × 1000),由您的套餐设定。
免费套餐的上限为 2 kpps。付费套餐从 100 kpps 起步并可按需扩展。
- **等待或即发即弃** — 使用 `scan_wait()` 阻塞直到完成,或使用 `scan_status()` 进行轮询。
## 收集内容
选择要运行的模块;结果会在扫描状态响应中按主机/端口返回。
### 核心模块(在 `ports` + `services` 模块下始终返回)
| 字段组 | 收集内容 |
|---|---|
| **服务识别** | 服务名称、协议、banner、软件产品/供应商/版本、CPE、匹配源、使用的探测、置信度评分 |
| **TLS / 证书** | TLS 版本 + 密码套件、证书颁发者/使用者/SANs/到期时间、SHA-256、有效期、**JARM** 指纹、**JA3S** 指纹 |
| **HTTP** | 标题、server 标头、状态码、完整响应标头、body 哈希、favicon 哈希、重定向链、robots.txt、security.txt |
| **操作系统检测** | 供应商、系列 |
| **SSH** | 主机指纹、**HASSH** 服务器指纹、主机密钥类型 |
| **SMB** | 主机名、域名、操作系统 |
| **反向 DNS** | 主机名、rDNS 记录 |
| **DNS 记录** | MX、NS、TXT、SPF、DMARC、DKIM 是否存在 |
| **RDAP / WHOIS** | 网络名称、国家、描述、滥用投诉邮箱、组织、注册日期、分配的 CIDR |
| **GeoIP / 网络** | 国家、城市、地区、经纬度、ASN + ASN 组织、时区、大洲 |
| **威胁情报** | 威胁类型、威胁名称、威胁评分、WAF 检测、蜜罐评分、分类标签 |
| **CMS / 指纹识别** | CMS 检测、暴露的 API 标记 |
| **CVE 匹配** | CVE ID、CVE 数量、被识别版本的最高 CVSS 评分 |
| **证书透明度** | 每个证书基于 CT 的域名列表 |
| **工业 / IoT** | MQTT(认证模式)、Modbus(单元 ID、设备)、BACnet(设备信息) |
| **云** | 云提供商检测 |
### 可选模块
| 模块 | 收集内容 |
|---|---|
| `subdomains` | 针对列表中的任何域名目标进行子域名枚举(subfinder + crt.sh + DNS 解析)。 |
| `tech` | Web 技术栈检测(Wappalyzer 风格) — CMS、框架、JS 库、服务器软件。 |
## 定价
仅按扫描速度付费。线性计费:**$0.30/kpps/月**,起售价为
**$30/月 (100 kpps)**,可扩展至高吞吐量套餐。提供免费套餐
—— 无需信用卡。支持加密货币支付。
详情请参阅 https://scansearch.net/pricing/。
## 免费与付费限制对比
| | 免费 | 付费 |
|---|---|---|
| 扫描速度 | 2 kpps | 从 100 kpps 起 |
| 每次扫描目标 | 1 个国家 / 最多 5 个端口 / 最多约 100 万个 IP | 无限制 |
| 每天扫描次数 | 3 次 | 无限制 |
| 并发扫描 | 1 个(无队列) | 最多 10 个排队 |
| 可见结果 (UI) | 前 1,000 条 | 完整结果集 |
| 下载 (CSV / TXT) | 前 100 行 | 完整导出 |
| API 请求 | 100 次/天 | 1,000+ 次/天,随套餐增加 |
免费套餐旨在用于测试 API 和一次性小规模扫描。对于真正的侦察工作,
您需要付费套餐。
## 安装
```
pip install scansearch
```
获取 API 密钥:https://scansearch.net/dashboard/api-keys/
```
export SCANSEARCH_API_KEY="your-64-char-key"
```
## 快速开始 (Python)
```
from scansearch import Client
api = Client() # picks up SCANSEARCH_API_KEY from env
# 1) 扫描单个 CIDR 的常用 Web 端口,等待完成
job = api.scan(
targets=["192.0.2.0/24"],
ports="80,443,8080,8443",
modules=["ports", "services"],
)
result = api.scan_wait(job["task_id"])
print(f"open ports: {result['open_ports_found']}")
print(f"services: {result['services_found']}")
# 2) 扫描整个国家的一个端口 — 触发后不管,稍后轮询
job = api.scan(targets=["country:DE"], ports="9200")
print("task_id:", job["task_id"])
# ... 稍后
print(api.scan_status(job["task_id"]))
# 3) 以更高速度扫描多个 CIDR
job = api.scan(
targets=["10.0.0.0/16", "192.168.0.0/16"],
ports="1-1024",
modules=["ports", "services"],
speed=1000, # kpps
)
api.scan_wait(job["task_id"], poll_interval=10)
# 4) 提前停止正在运行的扫描
api.scan_stop(job["task_id"])
```
## 快速开始 (CLI)
```
# 扫描 CIDR 的常用 Web 端口,阻塞直到完成,打印最终结果
scansearch scan 192.0.2.0/24 --ports 80,443,8080 --modules ports,services --wait
# 以 1000 kpps 的速度扫描单个国家的一个端口
scansearch scan country:DE --ports 9200 --speed 1000 --wait
# 轮询正在运行的扫描
scansearch status 1234
# 停止正在运行的扫描
scansearch stop 1234
```
## 使用场景
- **Bug 赏金侦察** — 对您范围内的 CIDR 发起新扫描,在竞争对手之前获取
当前开放的端口 + 服务 banner。
- **资产发现 / 影子 IT** — 将 ScanSearch 指向您自己的 AS 或
网段;发现任何不应暴露的东西。
- **漏洞分诊** — 将 `services` 富化与 CVE 匹配相结合,
以查找新暴露的 `service:ssh`、`service:rdp` 等实例。
- **持续监控** — 安排对您的 CIDR 进行每日扫描,对比
结果,并在发现新开放端口时发出警报。
- **全国范围研究** — 针对特定服务(例如 `service:elasticsearch`、`port:9200`)
发起国家扫描,并获取当前快照。
请参阅 [`examples/`](examples/) 获取可运行的脚本。
## 错误处理
```
from scansearch import Client, AuthError, RateLimitError, NotFoundError, APIError
try:
api.scan_status(99999)
except NotFoundError:
...
except RateLimitError:
... # daily quota or per-minute rate limit hit
except AuthError:
... # invalid / revoked key
except APIError as e:
print(e.status, e.body)
```
## 速率限制
每个账户的每日和每分钟 API 限制随您的套餐而定。
有关当前限制,请参阅 https://scansearch.net/pricing/。
## 开发
```
git clone https://github.com/ScanSearch/scansearch-python
cd scansearch-python
pip install -e .
```
欢迎提交 Pull Request。对于重大更改,请先开一个 issue。
## 链接
- **网站:** https://scansearch.net
- **API 文档:** https://scansearch.net/resources/api-docs/
- **定价:** https://scansearch.net/pricing/
- **免费工具** (端口扫描器、SSL 检查器、子域名查找器、CVE 查询等):
https://scansearch.net/tools/
## 许可证
MIT — 请参阅 [LICENSE](LICENSE)。
标签:API封装, Banner抓取, Censys替代, CIDR扫描, CLI, DNS通配符暴力破解, ESC4, GPT, HTTP指纹识别, IP扫描, JA3S指纹, JARM指纹, OSINT, Python SDK, Qt框架, REST API, Shodan替代, TLS证书分析, WiFi技术, 互联网扫描, 协议分析, 可视化仪表盘, 安全存储, 实时处理, 密码管理, 恶意行为检测, 批量查询, 插件系统, 操作系统检测, 数字证书, 数字资产安全, 数据统计, 文档结构分析, 暴露面管理, 服务识别, 权限提升, 检测规则, 漏洞管理, 端口扫描, 网络安全, 网络安全扫描器, 网络拓扑分析, 网络空间资产探测, 网络资产发现, 资产探测, 逆向工具, 隐私保护, 黑盒测试