├── README.md └── shodan-search.py /README.md: -------------------------------------------------------------------------------- 1 | # shodan-search 2 | -------------------------------------------------------------------------------- /shodan-search.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python2 2 | 3 | import shodan 4 | import argparse 5 | 6 | def parse_args(): 7 | """Create the arguments""" 8 | parser = argparse.ArgumentParser() 9 | parser.add_argument("-a", "--apikey", help="Your api key") 10 | parser.add_argument("-s", "--search", help="Your search terms") 11 | return parser.parse_args() 12 | 13 | def shodan_search(search, apikey): 14 | 15 | if apikey: 16 | API_KEY = apikey 17 | else: 18 | API_KEY = 'REPLACE WITH API KEY AND KEEP QUOTES' 19 | 20 | api = shodan.Shodan(API_KEY) 21 | ips_and_ports = [] 22 | 23 | # Get IPs from Shodan search results 24 | try: 25 | results = api.search(search, page=1) 26 | total_results = results['total'] 27 | print '[+] Total results: {0}'.format(total_results) 28 | print '[+] First page:' 29 | for r in results['matches']: 30 | ip = r['ip_str'] 31 | port = r['port'] 32 | ip_port = '{0}:{1}'.format(ip, port) 33 | print ' ', ip_port 34 | 35 | except Exception as e: 36 | print '[!] Shodan search error:', e 37 | 38 | def main(): 39 | args = parse_args() 40 | apikey = args.apikey 41 | search = args.search 42 | shodan_search(search, apikey) 43 | 44 | main() 45 | --------------------------------------------------------------------------------