这是我的代码:
我导入模块
import shodan
import json
我创建了我的密钥,
SHODAN_API_KEY = ('xxxxxxxxxxxxxxxxxxxx')
api = shodan.Shodan(SHODAN_API_KEY)
我打开我的json文件,
with open('Ports.json', 'r') as f:
Ports_dict = json.load(f)
#I loop through my dict,
for Port in Ports_dict:
print(Port['Port_name'])
try:
results = api.search(Port['Port_name']) # how can I filter ports by country??
#and I print the content.
print('Results found: {}'.format(results['total']))
for result in results['matches']:
print('IP: {}'.format(result['ip_str']))
print(result['data'])
print('')
print ('Country_code: %s' % result['location']['country_code'])
except shodan.APIError as e:
print(' Error: %s' % e)
但如何按国家/地区筛选端口?
1条答案
按热度按时间gkl3eglg1#
为了过滤结果,您需要使用搜索过滤器。以下文章解释了Shodan的一般搜索查询语法:
https://help.shodan.io/the-basics/search-query-fundamentals
以下是所有可用搜索筛选器的列表:
https://beta.shodan.io/search/filters
下面是一个充满示例搜索查询的页面:
https://beta.shodan.io/search/examples
在您的情况下,可能需要使用port和country过滤器。例如,以下搜索查询将返回美国的MySQL和PostgreSQL服务器:
https://beta.shodan.io/search?query=port%3A3306%2C5432+country%3AUS
我还建议使用Shodan CLI下载数据,因为它将为您处理结果分页:
https://help.shodan.io/guides/how-to-download-data-with-api
如果你需要在Python中自己完成,那么你还需要通过提供一个
page
参数或者简单地使用Shodan.search_cursor()
方法(而不是像你在代码中那样使用Shodan.search()
)来遍历搜索结果。