Shodan query i terminalen

Under julledigheten fick jag lite tid över att leka lite mer med python vilket resulterade i att jag skrev ett litet program som kan utföra sökningar mot Shodan och sedan parsar ut ip nummerna och sparar dessa i en log vilken senare kan användas i till exempel metasploit.
Problem uppstog dock när jag skulle hitta på ett sätt att avsluta programet.
I version 1.0 så har jag löst det genom att page räknas upp med 1 varje för var sida och avslutas då page är mindre än 10, då Shodan bara har info på de 5-6 första sidorna i dagsläget trots att det finns flera sidor att blädra till. Inge vacker lösning så tips mottages.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/usr/bin/python
import urllib2, sys, re
from BeautifulSoup import BeautifulSoup
 
def info():
  help = '''
    ShodanScanner v.1.0 h-kan@h-kan.com
 
    USAGE: ./shodanscanner -q  -f
    Ex: ./shodanscanner -q apache+2.2.1 -f scan.log
    This scan for apache servers and save the IP's into scan.log.
    More advanced query's could be used like
    - apache+2.2.11 Search for apache servers running version 2.2.11
    - +country:SE Search for servers located in sweden
    - +hostname:.se Search for servers with ".se" in hostname
    - +port:22 Search for servers with service running on port 22
  	'''
  print help
 
def crawler(page):
  try:
    sock = urllib2.urlopen("http://shodan.surtri.com/?q=%s&page=%i"%(args1,page))
    homepage = sock.read()
    htmlDom = BeautifulSoup(homepage)
    links = htmlDom.findAll('a', {'href': True})
    return links
  except:
    print "[-] Connection Failed"
    sys.exit(0)
 
if __name__ == "__main__":
  page = 1
    if len(sys.argv) != 5:
      info()
      print "usage: %s -q  -f "%sys.argv[0]
      sys.exit(0)
    else:
      if sys.argv[1].lower() == "-q":
        args1 = sys.argv[2]
      if sys.argv[3].lower() == "-f":
        args2 = sys.argv[4]
    log = open(args2,"a")
    print "[+] Searching query: %s"%args1
    log.write("[+] Searching query: %s"%args1)
    log.close()
    print "[+] please wait ..."
    while page <=10:
      data = crawler(page)
      for link in data:
        log = open(args2,"a")
        if re.search("http://",link['href']):
          link = link['href'].replace("http://","")
          print "%s"%link
          log.write("%s\n"%link)
        log.close()
      page += 1

Leave a Reply

Your email address will not be published.