0

我正在尝试解析 Shodan 查询结果并仅打印与我设置的条件匹配的结果。输出需要采用 JSON 格式,以便稍后在 Splunk 中集成。

我想遍历元素集并删除一个元素,如果它与country_code“US”的位置不匹配。

这是我的代码:

import shodan
import os
import sys
import json

SHODAN_API_KEY = os.environ.get("SHODAN_API_KEY")

api = shodan.Shodan(SHODAN_API_KEY)

query = sys.argv[1]

try:
    query_results = api.search(query)
except shodan.APIError as err :
    print('Error: {}'.format(err))

for element in query_results['matches']:
    if 'US' in format(element['location']['country_code']):
        del element
print(query_results['matches'])

但是有了这段代码,我element就不会从query_result['matches'].

4

1 回答 1

1

有几件事:

  1. 考虑使用该Shodan.search_cursor(query)方法,而不仅仅是Shodan.search(query). search_cursor()如果结果超过 100 个,该方法会为您处理结果分页。否则,您需要通过向方法提供page参数来自己完成此操作search()。这是一篇进一步解释它的文章:https ://help.shodan.io/guides/how-to-download-data-with-api

  2. 您实际上可以在搜索查询中过滤掉非美国的结果!只需将“-country:US”添加到您的查询中,您将不会获得美国服务的任何结果。即假设您拥有 Python 3.7,请执行以下操作:

query_results = api.search(f'{query} -country:US')
于 2019-12-23T01:35:37.697 回答