2016-05-11 6 views
1

Wenn ich diese SHODAN-Dokumente betrachte, bin ich nicht sicher, ob ich verstehe, warum ich nur die ersten Port-Details bekomme, wenn ich das Skript ausführe. Wenn ich in der Web-Oberfläche aussehen kann ich sehen, es gibt mehrere Ports/Dienste für einige der Geräte erkannt ...Python Shodan API - Rückgabe mehrerer Port-Werte

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 

Antwort

1

Ihr Skript wird die Haupt-Shodan Datenbank für Service Banner suchen, die enthalten die Zeichenfolge "ics" und wo sich die Geräte in den USA befinden. Die Ergebnisse der Suche sind jedoch Banner; d. h. Dienste - keine Hosts! Und einem Service-Banner kann nur 1 Port zugeordnet werden, weshalb Sie das nur sehen. Ein Host kann jedoch mehrere Dienste ausführen und viele offene Ports haben. Es klingt wie das, was Sie eigentlich interessiert. Wenn Sie die vollständige Liste der Ports/Dienste, die ein Host hat, erhalten möchten, dann müssen Sie die "api.host()" Methode verwenden.

host = api.host('8.8.8.8') 

Das wird eine Liste aller Ports/Dienste zurückgeben, die eine bestimmte IP im Internet öffentlich hat.

Beachten Sie auch, dass die Suche nach "ics" im Banner nicht dasselbe ist wie die Suche nach industriellen Steuerungssystemen. Sie müssen Suchfilter verwenden, wie zum Beispiel:

category:ics 

Es gibt einen Abschnitt auf Shodan, die die verschiedenen ICS-Protokolle beschreibt, die gecrawlt werden und wie für sie suchen:

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

+0

Vielen Dank für die Erläuterung! Ich habe total vermisst, dass ... Dinge wie erwartet mit der api.host() Methode funktionieren. –

Verwandte Themen