4
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)

私は Python 2.7 を使用しています AttributeError: 'str' object has no attribute '_request' traceback error shows line 79 in client.py in the Shodan API, is just me or is their code wanky?

ここにトレースバックがあります

Traceback (most recent call last):
  File "exploitsearch.py", line 26, in <module>
    print exploit.search('query')
  File "/usr/local/lib/python2.7/dist-packages/shodan/client.py", line 79, in search
    return self.parent._request('/api/search', query_args, service='exploits')
AttributeError: 'str' object has no attribute '_request'
4

3 に答える 3

0

parent変数は 型である必要がありますShodan。変数でExploitsクラスを初期化しています。string問題を引き起こしている行は次のとおりですhttps://github.com/achillean/shodan-python/blob/master/shodan/client.py#L79

于 2015-10-30T17:05:59.497 に答える
0

ExploitsスーパークラスのサブクラスですShodan。このクラスには というメソッドがあり_requestます。のインスタンスを初期化してメソッドExploitsを実行するsearchと、コードは内部的にスーパー (read:) メソッドを呼び出しShodanます_request。文字列型をクラス コンストラクターに渡すため、文字列オブジェクトでこのメソッドを呼び出そうとしていますが、(当然のことながら) メソッドが のメンバーではないと不平を言っていstrます。

ここにgit リポジトリがあります。79 行目で、この呼び出しが行われている場所を確認できます。

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

parentしたがって、変数がShodanのインスタンスまたは変数であることがわかりますapi

于 2015-10-30T17:06:34.887 に答える