#! /usr/bin/env python3 import sys, shodan from getpass import getpass class shodan_search(object): def settingApi(self): try: print("Please, set your APIKey here:") shodanKeyString = getpass('API Key:' ) self.shodanApi = shodan.Shodan(shodanKeyString) except: print("The specified APIKey is invalid, please insert another one.") exit() def run_full(self, search, filename): if filename is not None: file = open(filename, 'w') search_query = search.replace("-", ' ') try: results = self.shodanApi.search(search_query) file.write("Total results: %s" % (len(results['matches']))) file.write("\n") for result in results['matches']: file.write("IP: %s \n" % (result['ip_str'])) file.write("PORT: %s \n" % (result['port'])) file.write("ISP: %s \n" % (result['isp'])) file.write("//////////ADDITIONAL DATA////////// \n") file.write(result['data']) file.write("\n=========================") file.write('\n') file.write('\n') except: print("Search parameters unavailable for your APIKey. More info in documentation.") exit() else: search_query = search.replace("-", ' ') try: results = self.shodanApi.search(search_query) print("Total results: %s" % (len(results['matches']))) print("\n") for result in results['matches']: print("IP: %s \n PORT: %s \n ISP: %s \n " % (result['ip_str'], result['port'], result['isp'])) print("//////////ADDITIONAL DATA//////////") print(result['data']) print('\n') except: print("Search parameters unavailable for your APIKey. More info in documentation.") exit() def run_nofull(self, search, filename): if filename is not None: file = open(filename, 'w') search_query = search.replace("-", ' ') try: results = self.shodanApi.search(search_query) for result in results['matches']: file.write(result['ip_str']) file.write('\n') except: print("Search parameters unavailable for your APIKey. More info in documentation.") exit() else: search_query = search.replace("-", ' ') try: results = self.shodanApi.search(search_query) for result in results['matches']: print(result['ip_str']) except: print("Search parameters unavailable for your APIKey. More info in documentation.") exit() def __init__(self, search, filename, full): self.settingApi() if full is True : self.run_full(search, filename) else: self.run_nofull(search, filename) exit()