4 个版本
| 0.1.1 | 2024年4月7日 |
|---|---|
| 0.1.0 | 2024年4月7日 |
| 0.0.2 | 2023年1月28日 |
| 0.0.1 | 2023年1月25日 |
#612 in 网页编程
每月 161 次下载
39KB
968 行
Shodan-rs
使用 Rust 编写的 Shodan 客户端(如果还不清楚的话)。这个库变化很大,缺少许多组件。我建议等到 API 更稳定,并且达到 1.0.0 版本后再使用。这个库基于 tokio 提供任务运行时。
API 支持
官方 Shodan API 文档可以在 这里 找到。此客户端不支持整个 API,因为我只有一个具有 dev 计划的账户。您可以查看下方的支持表格。
使用方法
首先,您需要创建一个 ShodanClient。这需要一个从 shodan.io 获取的 API 密钥。一旦您获得了密钥,就可以像这样启动一个客户端
use shodan_client::*;
let client = ShodanClient::new(String::from("API-KEY-GOES-HERE"));
然后,您可以调用 Shodan API。例如,我们可以获取我们的 Shodan 账户详细信息
use shodan_client::*; // Include the trait the adds the account functionality
let account_details = client.get_account_profile().await.unwrap();
println!("Account Details: {:?}", account_details);
注意:这里的 unwrap() 忽略了可能发生的任何错误(例如:SSL 证书错误、连接问题等),或来自 Shodan API 的错误响应(例如:速率限制、计划限制或调用所需信用不足)。如果您不希望程序崩溃,应正确处理这些错误。这里省略了这些内容以简化说明。
API 支持
✔️ 表示对端点的完全支持。➗ 表示对端点的部分支持。空表示尚不支持该端点。
客户端目前仅支持 REST API,但我确实想最终添加对流式 API 的支持。
| 领域 | API | 动词 | 端点 | 支持 |
|---|---|---|---|---|
| REST | 搜索 | GET | /shodan/host/{ip} | ➗ |
| REST | 搜索 | GET | /shodan/host/count | ✔️ |
| REST | 搜索 | GET | /shodan/host/search | ➗ |
| REST | 搜索 | GET | /shodan/host/search/facets | ✔️ |
| REST | 搜索 | GET | /shodan/host/search/filters | ✔️ |
| REST | 搜索 | GET | /shodan/host/search/tokens | ➗ |
| REST | 扫描 | GET | /shodan/ports | ✔️ |
| REST | 扫描 | GET | /shodan/protocols | ✔️ |
| REST | 扫描 | POST | /shodan/scan | |
| REST | 扫描 | POST | /shodan/scan/internet | |
| REST | 扫描 | GET | /shodan/scans | |
| REST | 扫描 | GET | /shodan/scan/{id} | |
| REST | 警报 | POST | /shodan/alert | |
| REST | 警报 | GET | /shodan/alert/{id}/info | |
| REST | 警报 | GET | /shodan/alert/{id}/info | |
| REST | 警报 | DELETE | /shodan/alert/{id} | |
| REST | 警报 | POST | /shodan/alert/{id} | |
| REST | 警报 | GET | /shodan/alert/info | |
| REST | 警报 | GET | /shodan/alert/triggers | |
| REST | 警报 | PUT | /shodan/alert/{id}/trigger/{trigger} | |
| REST | 警报 | DELETE | /shodan/alert/{id}/trigger/{trigger} | |
| REST | 警报 | PUT | /shodan/alert/{id}/trigger/{trigger}/ignore/{service} | |
| REST | 警报 | DELETE | /shodan/alert/{id}/trigger/{trigger}/ignore/{service} | |
| REST | 警报 | PUT | /shodan/alert/{id}/notifier/{notifier_id} | |
| REST | 警报 | DELETE | /shodan/alert/{id}/notifier/{notifier_id} | |
| REST | 通知器 | GET | /notifier | |
| REST | 通知器 | GET | /notifier/provider | |
| REST | 通知器 | POST | /notifier | |
| REST | 通知器 | DELETE | /notifier/{id} | |
| REST | 通知器 | GET | /notifier/{id} | |
| REST | 通知器 | PUT | /notifier/{id} | |
| REST | 目录 | GET | /shodan/query | ✔️ |
| REST | 目录 | GET | /shodan/query/search | ✔️ |
| REST | 目录 | GET | /shodan/query/tags | ✔️ |
| REST | 批量 | GET | /shodan/data | |
| REST | 批量 | GET | /shodan/data/{dataset} | |
| REST | 组织 | GET | /org | |
| REST | 组织 | PUT | /org/member/{user} | |
| REST | 组织 | DELETE | /org/member/{user} | |
| REST | 账户 | GET | /account/profile | ✔️ |
| REST | DNS | GET | /dns/domain/{domain} | ✔️ |
| REST | DNS | GET | /dns/resolve | ✔️ |
| REST | DNS | GET | /dns/reverse | ✔️ |
| REST | 工具 | GET | /tools/httpheaders | ✔️ |
| REST | 工具 | GET | /tools/myip | ✔️ |
| REST | API 状态 | GET | /api-info | ✔️ |
测试
客户端包含一组测试,这些测试调用实际的 Shodan API(目前是这样的)。一旦所有功能都经过验证并正常工作,模拟响应会更有意义,这样测试就会变得不那么不可靠。在此之前,运行测试需要 Shodan API 密钥。您可以通过设置 SHODAN_TEST_KEY 环境变量来向测试套件提供该密钥。测试套件中的某些端点确实使用了 API 信用额度。在这种情况下,运行测试并非免费。另一个需要注意的是,测试没有超时限制,因此您很可能会遇到来自 Shodan API 的速率限制错误。
示例调用
$ SHODAN_TEST_KEY=<API-KEY-GOES-HERE> cargo test
依赖
约 6-18MB
约 273K SLoC