python 如何按国家I地区筛选端口?

vbopmzt1  于 2023-01-29  发布在  Python
关注(0)|答案(1)|浏览(148)

这是我的代码:
我导入模块

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)

但如何按国家/地区筛选端口?

gkl3eglg

gkl3eglg1#

为了过滤结果,您需要使用搜索过滤器。以下文章解释了Shodan的一般搜索查询语法:
https://help.shodan.io/the-basics/search-query-fundamentals
以下是所有可用搜索筛选器的列表:
https://beta.shodan.io/search/filters
下面是一个充满示例搜索查询的页面:
https://beta.shodan.io/search/examples
在您的情况下,可能需要使用portcountry过滤器。例如,以下搜索查询将返回美国的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())来遍历搜索结果。

相关问题