myocamlbuild.ml
我使用的是Python 2.7 我得到了AttributeError:'str'对象没有属性'_request' 回溯错误显示了Shodan API中client.py中的第79行,它只是我还是他们的代码很难?
这里是Traceback
import shodan
import sys
from ConfigParser import ConfigParser
#grab the api key from auth.ini
config = ConfigParser()
config.read('auth.ini')
SHODAN_API_KEY = config.get('auth','API_KEY')
#initialize the api object
api = shodan.Shodan(SHODAN_API_KEY)\
# Input validation
if len(sys.argv) == 1:
print 'Usage: %s <search query>' % sys.argv[0]
sys.exit(1)
try:
query = ' '.join(sys.argv[1:])
parent = query
exploit = api.Exploits(parent)
#WHY DOESNT THIS WORK
#AttributeError: 'str' object has no attribute '_request'
print exploit.search(query)
except Exception, e:
print 'Error: %s' % e
sys.exit(1)
答案 0 :(得分:3)
我是Shodan的创始人,也是您正在使用的相关图书馆的作者。 John Gordon在上面提供了正确的答案:
您不需要实例化Exploits类,它会在您创建Shodan()实例时自动完成。这意味着您无需任何额外工作即可直接搜索内容:
api = shodan.Shodan(YOUR_API_KEY)
results = api.exploits.search('apache')
答案 1 :(得分:0)
parent
变量的类型应为Shodan
。您正在使用Exploits
变量初始化string
类。以下是您遇到问题的行https://github.com/achillean/shodan-python/blob/master/shodan/client.py#L79。
答案 2 :(得分:0)
Exploits
是Shodan
超类的子类。该类有一个名为_request
的方法。初始化Exploits
的实例并执行search
方法时,代码在内部调用super(读取:Shodan
)方法_request
。由于您将字符串类型传递给类构造函数,因此它尝试在字符串对象上调用此方法,并且(正确地)抱怨该方法不是str
的成员。
这是git repo。在第79行,您可以看到此次通话的发生位置:
return self.parent._request('/api/search', query_args, service='exploits')
因此,您可以看到您的parent
变量应该是Shodan的实例,或者您的api
变量。