hashscanner/hashscanner-python
GitHub: hashscanner/hashscanner-python
该项目是 HashScanner API 的官方 Python 客户端及命令行工具,帮助用户免下载数百 GB 数据集即可快速查询超 15 亿条 NIST NSRL 已知文件哈希。
Stars: 0 | Forks: 0
# HashScanner Python 客户端
用于 **[HashScanner](https://www.hashscanner.com) API** 的 Python 客户端 —— 通过 API 查询 **超过 15 亿条 NIST NSRL 已知文件哈希**(MD5 / SHA-1 / SHA-256),支持单个或批量查询。
HashScanner 将 NIST National Software Reference Library 放到了线上,这样您就可以从数据中过滤掉**已知**的部分,专注于未知的内容 —— 而无需您自己下载和维护约 700 GB 的 RDS。
## 安装
```
pip install hashscanner
```
## 快速开始
```
from hashscanner import Client
hs = Client("hs_xxxx_sk_xxxx") # or set HASHSCANNER_API_KEY
result = hs.lookup("d41d8cd98f00b204e9800998ecf8427e")
if result.found:
print(result.type, result.file_name, result.product, "via", result.source)
else:
print("not in NSRL — worth a closer look")
```
匹配成功意味着该文件是**已知的**(已编目在 NSRL 中)—— 并不代表它是安全的、无害的或恶意的。您可以使用它来筛除您已经识别的文件。
### 批量查询(异步)
对于大型数据集 —— 每个任务最多支持 100,000 个哈希 —— 请提交批量任务。客户端会为您处理 提交 → 轮询 → 下载 的整个流程:
```
hashes = ["d41d8cd9...", "da39a3ee...", ...]
# JSON: 返回结果字典列表
for record in hs.bulk(hashes):
print(record["hash"], record["found"])
# CSV: 返回原始 CSV 文本
csv_text = hs.bulk(hashes, format="csv")
```
更倾向于自己执行这些步骤?
```
job = hs.submit_bulk(hashes, format="json") # -> BulkJob (queued)
job = hs.wait(job, poll_interval=3) # poll until completed/failed
for record in hs.iter_results(job): # stream NDJSON results
...
```
### 并发执行少量查询
```
results = hs.lookup_many(["", "", ""])
```
## 命令行
该包安装了一个 `hashscanner` 命令:
```
export HASHSCANNER_API_KEY="hs_xxxx_sk_xxxx"
# 单个查询
hashscanner lookup d41d8cd98f00b204e9800998ecf8427e
hashscanner lookup d41d8cd9... --json
# 批量:每行一个哈希值(使用 '-' 表示 stdin),JSON (NDJSON) 或 CSV
hashscanner bulk hashes.txt
hashscanner bulk hashes.txt --format csv -o results.csv
cat hashes.txt | hashscanner bulk -
```
## 错误
所有错误均派生自 `hashscanner.HashScannerError`:
| 异常 | 何时触发 |
|---|---|
| `AuthenticationError` | 401 —— 密钥缺失/无效 |
| `SubscriptionInactiveError` | 403 —— 需续订/升级 |
| `RateLimitError` | 429 —— 触发每分钟速率限制或每月配额限制(`.retry_after`, `.reset`) |
| `BadRequestError` | 400 —— 无效哈希 / 任务过大 |
| `NotFoundError` | 404 —— 未知的/已过期的批量任务 |
| `JobFailedError` | 批量任务状态为 `failed` |
| `APIError` | 其他非 2xx 状态码 |
单次查询未命中**不是**错误 —— 它会返回 `LookupResult(found=False)`。
## 链接
- API 文档:
- 价格与限制:
- 注册(免费):
## 许可证
MIT
标签:API客户端, NIST NSRL, Python, 哈希查询, 数字取证, 文档结构分析, 无后门, 自动化脚本, 逆向工具