我正在尝试用python编写一个脚本,它将搜索数据并返回IP地址和与它们相关的数据,但我希望过滤搜索,以便它只返回IP地址和它们的HTTP状态,只返回第一行,而不是包含完整数据的整个部分。
这是我的代码:
import shodan
SHODAN_API_KEY = 'API Key'
api = shodan.Shodan(SHODAN_API_KEY)
try:
results = api.search('http', page=1, limit=10)
print ('Results found: %s' % results['total'])
for result in results['matches']:
print ('IP: %s' % result['ip_str'] + ' - ' + 'HTTP: %s' % result['data'])
print ('')
except shodan.APIError as e:
print ('Error: %s' % e)
这是我得到的输出:
结果发现:236280753
IP: 98.129.229.204 - HTTP: HTTP/1.1 200 OK Server: Apache/2.4 Content-Type: text/html; charset=UTF-8 Date: Sun, 11 Dec 2022 19:29:48 GMT Accept-Ranges: bytes Connection: Keep-Alive Set-Cookie: X-Mapping-hjggddoo=22C05A3A99FA43E436FE707A7C0D13DD; path=/ Last-Modified: Tue, 10 Sep 2019 00:23:11 GMT Content-Length: 201
因此,如果可能的话,我试图从result['data']
获取的只是IP地址和HTTP状态?
1条答案
按热度按时间mpbci0fu1#
下面是一个示例脚本,它将打印结果的IP和HTTP状态代码。它使用
Shodan.search_cursor()
方法自动迭代页面。请注意,page
和limit
参数是互斥的-如果您使用一个,则不能使用另一个。我们不建议使用该方法的limit
和offset
参数。或者,您最好使用Shodan CLI下载数据,然后解析出您关心的属性:
您的搜索查询“http”非常宽泛,因此您无法通过API/ CLI下载所有结果,但大多数情况下,最好先下载数据,然后在单独的脚本中分析/过滤该数据的输出。这可以确保您在使用脚本时不会一次又一次地重新下载相同的数据。