#!/usr/bin/env python
# dump-images.py
#
# Extract all the image data from the banners and store them as separate images
# in a provided output directory.
#
# Example:
# shodan download --limit -1 screenshots.json.gz has_screenshot:true
# ./dump-images.py screenshots.json.gz images/

import shodan
import shodan.helpers as helpers

import os
import sys

# Usage
if len(sys.argv) != 3:
	print('Usage: {} <Shodan json.gz> <output directory>'.format(sys.argv[0]))
	sys.exit(-1)
	
input_file = sys.argv[1]
output_dir = sys.argv[2]

# Make sure the directory exists
if not os.path.exists(output_dir):
	os.mkdir(output_dir)

for banner in helpers.iterate_files(input_file):
	# Try to grab the screenshot from the banner
	screenshot = helpers.get_screenshot(banner)
	
	# If we found a screenshot then create a file w/ the data
	if screenshot:
		# Create the file handle
		image = open('{}/{}.jpg'.format(output_dir, banner['ip_str']), 'w')
		
		# Write the image data which is stored using base64 encoding
		image.write(screenshot['data'].decode('base64'))