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