1. Shodan CLI 工具概述
Shodan CLI 是 Shodan 搜索引擎的官方命令行接口工具,它允许用户通过终端直接与 Shodan 的庞大数据库进行交互。与网页版相比,CLI 版本提供了更高效的批量操作能力,特别适合自动化脚本集成和系统管理员日常使用。
这个工具的核心价值在于:
- 批量查询能力:可以一次性获取数千条设备信息,而无需手动翻页
- 脚本集成友好:所有操作都可以通过命令行参数完成,便于嵌入自动化流程
- 离线分析支持:查询结果可以保存到本地进行后续处理,不消耗额外API额度
- 高级过滤选项:支持复杂的搜索语法,精确锁定目标设备
重要提示:使用 Shodan CLI 需要严格遵守当地法律法规。未经授权扫描他人网络设备可能构成违法行为。
2. 环境安装与配置
2.1 安装准备
Shodan CLI 基于 Python 开发,因此需要先确保系统中已安装 Python 3.6 或更高版本。可以通过以下命令检查 Python 版本:
python3 --version如果尚未安装 Python,可以从官方 Python 网站下载对应操作系统的安装包。推荐使用 Python 3.8 或更高版本以获得最佳兼容性。
2.2 安装 Shodan CLI
安装 Shodan CLI 非常简单,只需使用 pip 包管理器执行以下命令:
pip install shodan --upgrade对于国内用户,可以使用清华大学的镜像源加速安装过程:
pip install shodan --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple安装完成后,可以通过运行帮助命令验证安装是否成功:
shodan --help如果看到完整的命令列表输出,说明安装已经完成。
2.3 API Key 配置
要使用 Shodan CLI 的所有功能,必须配置有效的 API Key。获取 API Key 的步骤如下:
- 访问 Shodan 官网 (https://account.shodan.io/)
- 注册或登录账户
- 在账户页面找到 API Key 部分
- 复制提供的 API Key 字符串
配置 API Key 到本地环境:
shodan init YOUR_API_KEY将 YOUR_API_KEY 替换为你实际获取的密钥。配置成功后,系统会显示"Successfully initialized"的确认信息。
2.4 账户信息验证
配置完成后,建议立即检查账户状态和API额度:
shodan info这个命令会显示以下关键信息:
- 查询额度剩余量
- 扫描权限状态
- 账户类型(免费版/付费版)
- 其他功能限制
免费账户每月有50次查询额度,超出后需要升级到付费计划或等待下月重置。
3. 核心搜索功能详解
3.1 基础搜索命令
shodan search是最常用的核心搜索命令,其基本语法为:
shodan search [选项] "搜索语法"常用选项包括:
--fields:指定输出字段,如 ip_str,port,org 等--limit:限制返回结果数量--csv:以CSV格式输出结果--json:以JSON格式输出结果
示例1:查找开放SSH服务的设备
shodan search --fields ip_str,port,org "port:22"示例2:搜索特定版本的Apache服务器
shodan search --fields ip_str,port,version "product:Apache httpd version:2.4.49"3.2 高级搜索语法
Shodan 支持丰富的搜索过滤器,可以精确锁定目标设备:
- 按端口:
port:3389 - 按产品:
product:nginx - 按国家:
country:CN - 按城市:
city:"New York" - 按组织:
org:"Amazon" - 按操作系统:
os:"Windows 10" - 按漏洞:
vuln:CVE-2021-44228
多个条件可以组合使用,例如:
shodan search "port:80 product:nginx country:US"3.3 结果统计功能
在正式查询前,可以使用shodan count命令预估结果数量,这个操作不消耗API额度:
shodan count "port:3306 product:MySQL"这对于规划查询策略非常有用,可以避免浪费宝贵的API额度在不必要的查询上。
4. 资产详情查询
4.1 单IP详细信息
shodan host命令可以获取指定IP地址的完整信息:
shodan host 8.8.8.8输出内容包括:
- 开放端口列表
- 每个端口运行的服务和版本
- 地理位置信息
- 关联的组织信息
- 已知漏洞信息
4.2 历史扫描记录
通过添加--history选项,可以查看IP地址的历史扫描记录:
shodan host --history 1.1.1.1这对于追踪资产变化非常有用,例如:
- 新开放的端口
- 服务版本升级
- 系统配置变更
4.3 域名资产查询
shodan domain命令可以查询域名相关的所有资产:
shodan domain example.com输出内容包括:
- 所有解析记录(A,AAAA,MX等)
- 关联的子域名
- 每个IP的简要信息
5. 批量处理与离线分析
5.1 批量下载结果
对于大规模分析需求,可以先下载结果到本地:
shodan download results "port:8080" --limit 1000这会创建一个压缩的JSON文件(results.json.gz),包含所有匹配的设备信息。
5.2 离线解析数据
下载后可以使用shodan parse命令提取特定字段:
shodan parse --fields ip_str,port,org results.json.gz也可以将结果导出为CSV格式:
shodan parse --fields ip_str,port,country --csv results.json.gz > output.csv5.3 自动化处理技巧
结合Linux命令行工具可以实现更复杂的处理:
shodan parse --fields ip_str results.json.gz | sort | uniq > ip_list.txt这个命令会提取所有唯一IP地址并保存到文件,适合后续批量测试。
6. 漏洞相关操作
6.1 漏洞资产搜索
使用vuln:过滤器可以查找存在特定漏洞的设备:
shodan search "vuln:CVE-2021-44228 country:CN"6.2 漏洞利用查询
shodan exploit命令可以搜索公开的漏洞利用代码:
shodan exploit CVE-2021-44228输出包括:
- 漏洞描述
- 可利用性评分
- 相关POC/EXP链接
6.3 漏洞监控告警
付费用户可以使用shodan alert设置漏洞监控:
shodan alert create "Log4j监控" "vuln:CVE-2021-44228"当新发现存在该漏洞的设备时,系统会发送通知。
7. 高级功能与技巧
7.1 自定义输出格式
通过--fields选项可以精确控制输出内容:
shodan search --fields ip_str,port,org,country "port:443"可用字段包括:
- ip_str:IP地址
- port:端口号
- org:所属组织
- country:国家代码
- city:城市
- product:产品名称
- version:版本号
- os:操作系统
7.2 结果分页处理
对于大量结果,可以使用--limit和--offset实现分页:
shodan search --limit 100 --offset 200 "port:80"这会返回第201-300条结果。
7.3 脚本集成示例
以下是一个简单的Bash脚本示例,用于定期检查关键服务的暴露情况:
#!/bin/bash QUERY="product:Redis port:6379" OUTPUT_FILE="redis_servers_$(date +%Y%m%d).csv" shodan search --fields ip_str,port,org,country --csv "$QUERY" > "$OUTPUT_FILE"可以设置cron任务定期运行此脚本,监控关键服务的暴露情况变化。
7.4 性能优化建议
- 尽量使用
shodan count预估结果量,避免不必要的大查询 - 对重复查询需求,优先考虑下载结果到本地后离线分析
- 合理使用
--limit限制返回数量 - 精确指定输出字段减少数据传输量
- 对定期执行的任务,可以缓存部分结果减少API调用
8. 安全与合规注意事项
使用 Shodan CLI 时,必须特别注意以下合规要求:
- 仅查询自己拥有或获得授权的资产
- 不得用于未经许可的漏洞探测或渗透测试
- 遵守当地数据保护和个人隐私法规
- 妥善保管API Key,避免泄露
- 合理使用API资源,避免滥用
重要提示:在中国境内,未经授权扫描他人网络设备可能违反《网络安全法》相关规定,请务必确保所有操作在法律允许范围内进行。