2016-07-28 12 views
1

Ich möchte alle offenen Ports für ein Netzwerk mit Shodan bekommen (Ich weiß, ich kann nmap verwenden, aber ich möchte dies mit Shodan ausführen).Shodan. Holen Sie sich alle offenen Ports für ein Netz

Das Problem ist, dass die Website nur die "TOP-Dienste" zeigt, und ich möchte alle Dienste erhalten.

Zum Beispiel für dieses Netz: 195.53.102.0/24 Ich bin folgende Ports gegeben:

TOP SERVICES 
HTTP 15 
HTTPS 2 
DNS 2 
FTP 2 
IKE-NAT-T 1 

Aber wenn ich dieses Netz-Scan: 195.53.0.0/16, ich bin diese Ports gegeben:

TOP SERVICES 
HTTP 1,012 
HTTPS 794 
179 290 
IKE 238 
IKE-NAT-T 227 

So fehlen mir Dienste wie dns und ftp.

ich mit der API Ich versuche, aus Python:

import shodan 

SHODAN_API_KEY = "XXXXXXXXXXXXXXXXXXXXXXx" 

api = shodan.Shodan(SHODAN_API_KEY) 

# Wrap the request in a try/ except block to catch errors 
try: 

    # Search Shodan 


    results = api.search('net:195.53.102.0/24') 
    for service in results['matches']: 
     print service['ip_str'] 
     print service['port'] 

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

Und das ist die Ergebnisse erhalte ich:

195.53.102.193 
80 
195.53.102.138 
80 
195.53.102.148 
80 
195.53.102.136 
80 
195.53.102.157 
80 
195.53.102.226 
443 
195.53.102.66 
500 
195.53.102.133 
80 
195.53.102.142 
80 
195.53.102.66 
4500 
195.53.102.141 
80 
195.53.102.131 
21 
195.53.102.152 
53 
195.53.102.153 
21 
195.53.102.209 
80 
195.53.102.132 
53 
195.53.102.226 
80 
195.53.102.147 
80 
195.53.102.142 
443 
195.53.102.178 
80 
195.53.102.135 
143 
195.53.102.146 
80 
195.53.102.143 
80 
195.53.102.144 
80 

Nur 1 Port pro IP, und zum Beispiel das IP: 195,53 .102.131 hat Ports 21, 80 und 443 offen, sagen meine Ergebnisse nur:

195.53.102.131 
21 

Statt:

195.53.102.131 
21 
80 
443 

Deshalb mag ich entweder, von der Website, die alle Häfen/Dienstleistungen zu berücksichtigen, anstatt nur die TOP SERVICES oder von der API, alle Ports pro IP erhalten zu können, nicht nur 1. Oder wenn Jeder hat eine bessere Lösung, ich würde es auch gerne hören.

Wie gesagt, ich würde es gerne mit Shodan durchführen, nicht nmap. Vielen Dank im Voraus.

Antwort

1

Wenn Sie die Methode api.search() verwenden, sucht Shodan nach einem Service-Banner und ein Service-Banner hat nur einen Port. Wenn Sie alle Ports für einen Host zurückgeben möchten, sollten Sie stattdessen api.host() verwenden. Zum Beispiel:

import shodan 

SHODAN_API_KEY = "XXXXXXXXXXXXXXXXXXXXXXx" 

api = shodan.Shodan(SHODAN_API_KEY) 

# Wrap the request in a try/ except block to catch errors 
try: 
# Search Shodan 
    results = api.search('net:195.53.102.0/24') 
    for service in results['matches']: 
     hostinfo = api.host(service['ip_str']) 

     print service['ip_str'] 
     #Not sure if it's correct, but you should do something, 
     #like this: 
     for port in hostinfo['port']: 
      print port 

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

Wenn Sie nur eine Aufschlüsselung der offenen Ports in einem Netzwerk erhalten wollen, dann können Sie die count() Methode verwenden und für das Port Facette fragen. Und Sie können die API fragen mehr zurückzukehren, als die Top-5-Ports, wenn Sie die Facette als Tupel angeben:

import shodan 

api = shodan.Shodan(YOUR API KEY) 
result = api.count('net:195.53.102.0/24', facets=[['port', 20]]) 

Die Top-20-Ports (falls vorhanden) sind dann im Ergebnis [ ‚Facetten‘] ['port'] Eigentum. Und mit der count() Methode verwendet keine API-Credits, so dass es nicht in Ihre Nutzungsgrenzen essen.