AttributeError:'str'对象没有shodan api的属性'_request'

时间:2015-10-30 16:50:58

标签: python api shodan

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)

3 个答案:

答案 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)

ExploitsShodan超类的子类。该类有一个名为_request的方法。初始化Exploits的实例并执行search方法时,代码在内部调用super(读取:Shodan)方法_request。由于您将字符串类型传递给类构造函数,因此它尝试在字符串对象上调用此方法,并且(正确地)抱怨该方法不是str的成员。

这是git repo。在第79行,您可以看到此次通话的发生位置:

return self.parent._request('/api/search', query_args, service='exploits')

因此,您可以看到您的parent变量应该是Shodan的实例,或者您的api变量。