Python调用Shodan API使用过滤器搜索时报错求助
解决Shodan API带过滤器搜索报错的问题
问题背景
你提到用Shodan API搜索带特定过滤器(比如port:21)时总是报错,但普通关键词搜索正常,贴出的代码如下:
import sys import shodan SHODAN_API_KEY = "xxxxxxxxxxxxxxxxxx" try: api = shodan.Shodan(SHODAN_API_KEY) results = api.search("port:21") print results["total"] for result in results["matches"]: print result["ip_str"]+"\n" except Exception as e: print("Code: {c}, Message: {m}".format(c=type(e).__name__, m = str(e)))
可能的原因及解决办法
我整理了几个常见的触发这类问题的点,你可以逐一排查:
1. Python版本语法不兼容
你的代码采用的是Python 2的语法(print直接写语句不带括号),如果当前运行环境是Python 3,这会直接引发语法错误——因为Python 3里print是必须加括号的内置函数。
修正后的代码片段:
# 给print添加括号适配Python3 print(results["total"]) for result in results["matches"]: print(result["ip_str"]+"\n")
2. API密钥或配额问题
- 先确认
SHODAN_API_KEY是否替换成了你自己的真实有效密钥,别留着占位符xxxxxxxxxxxxxxxxxx - 免费版Shodan API有每月搜索配额限制,如果配额耗尽也会报错,你可以登录Shodan官网查看自己的账户配额状态
- 虽然
port:21属于基础过滤条件,免费版权限应该支持,但也可以确认下你的账户是否有特殊限制
3. 异常信息的精准定位
如果上面的排查都没问题,建议你把报错的具体Code和Message贴出来,这样能更快锁定问题——比如是网络问题、API返回格式问题,还是其他权限类错误。
内容的提问来源于stack exchange,提问作者Troll Sama bin Laden
相关产品推荐
相关产品推荐

