-
-
Save jivoi/3905537780a38d53c8e6add152d0d61a to your computer and use it in GitHub Desktop.
A Python script to lookup available information in Shodan for a list of IPs and save the data to a local file that can be processed using the Shodan CLI.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from shodan import Shodan | |
from shodan.helpers import open_file, write_banner | |
from shodan.cli.helpers import get_api_key | |
from sys import argv, exit | |
# Input validation | |
if len(argv) != 3: | |
print('Usage: {} <IPs filename> <output.json.gz>'.format(argv[0])) | |
print('Example: {} grizzly-ips.txt shodan-grizzly.json.gz'.format(argv[0])) | |
exit(1) | |
input_filename = argv[1] | |
output_filename = argv[2] | |
# Must have initialized the CLI before running this script | |
key = get_api_key() | |
# Create the API connection | |
api = Shodan(key) | |
# Create the output file | |
fout = open_file(output_filename, 'w') | |
# Open the file containing the list of IPs | |
with open(input_filename, 'r') as fin: | |
# Loop over all the IPs in the file | |
for line in fin: | |
ip = line.strip() # Remove any trailing whitespace/ newlines | |
# Wrap the API calls to nicely skip IPs which don't have data | |
try: | |
print('Processing: {}'.format(ip)) | |
info = api.host(ip) | |
# All the banners are stored in the "data" property | |
for banner in info['data']: | |
write_banner(fout, banner) | |
except: | |
pass # No data | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment