-
-
Save EgeBalci/2dabf25ca8b9c2ba27d7a7c0a650ee70 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