Python Shodan API - 返回多个端口值

时间:2016-05-11 13:36:03

标签: python shodan

看看这些SHODAN文档,我不确定为什么我在运行脚本时只返回第一个端口详细信息。当我查看Web界面时,我可以看到为某些设备检测到多个端口/服务...

http://shodan.readthedocs.io/en/latest/tutorial.html#connect-to-the-api

#!/usr/bin/python 
import shodan
SHODAN_API_KEY = "xxxxxxx"
api = shodan.Shodan(SHODAN_API_KEY)

try:
results = api.search('ics country:"US"')
for item in results['matches']:
    print """
Port: %s
Banner: %s
""" % (item['port'], item['data'])

except shodan.APIError, e:
    print 'Error: %s' % e

1 个答案:

答案 0 :(得分:1)

您的脚本正在Shodan主数据库中搜索包含字符串“ics”的服务横幅以及设备在美国的位置。搜索结果虽然是横幅;即服务 - 而不是主机!服务横幅只能有一个与之关联的端口,这就是您所看到的全部内容。但是,主机可以运行多个服务并具有许多开放端口。这听起来就像你真正感兴趣的那样。如果你想获得主机拥有的端口/服务的完整列表,那么你需要使用“api.host()”方法。

host = api.host('8.8.8.8')

这将返回给定IP在Internet上公开的所有端口/服务的列表。

另请注意,在横幅中搜索“ics”与搜索工业控制系统不同。您需要使用搜索过滤器,例如:

category:ics

有一个关于Shodan的部分概述了被抓取的各种ICS协议以及如何搜索它们:

https://www.shodan.io/explore/category/industrial-control-systems