Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def info():
"""Shows general information about your account"""
key = get_api_key()
api = shodan.Shodan(key)
try:
results = api.info()
except shodan.APIError as e:
raise click.ClickException(e.value)
click.echo("""Query credits available: {0}
Scan credits available: {1}
""".format(results['query_credits'], results['scan_credits']))
def download(limit, skip, filename, query):
"""Download search results and save them in a compressed JSON file."""
key = get_api_key()
# Create the query string out of the provided tuple
query = ' '.join(query).strip()
# Make sure the user didn't supply an empty string
if query == '':
raise click.ClickException('Empty search query')
filename = filename.strip()
if filename == '':
raise click.ClickException('Empty filename')
# Add the appropriate extension if it's not there atm
if not filename.endswith('.json.gz'):
filename += '.json.gz'
def host(format, history, filename, save, ip):
"""View all available information for an IP address"""
key = get_api_key()
api = shodan.Shodan(key)
try:
host = api.host(ip, history=history)
# Print the host information to the terminal using the user-specified format
HOST_PRINT[format](host, history=history)
# Store the results
if filename or save:
if save:
filename = '{}.json.gz'.format(ip)
# Add the appropriate extension if it's not there atm
if not filename.endswith('.json.gz'):
filename += '.json.gz'
def scan_status(scan_id):
"""Check the status of an on-demand scan."""
key = get_api_key()
api = shodan.Shodan(key)
try:
scan = api.scan_status(scan_id)
click.echo(scan['status'])
except shodan.APIError as e:
raise click.ClickException(e.value)
def remove(user):
"""Remove and downgrade a member"""
key = get_api_key()
api = shodan.Shodan(key)
try:
api.org.remove_member(user)
except shodan.APIError as e:
raise click.ClickException(e.value)
click.secho('Successfully removed the member', fg='green')
def scan_list():
"""Show recently launched scans"""
key = get_api_key()
# Get the list
api = shodan.Shodan(key)
try:
scans = api.scans()
except shodan.APIError as e:
raise click.ClickException(e.value)
if len(scans) > 0:
click.echo(u'# {} Scans Total - Showing 10 most recent scans:'.format(scans['total']))
click.echo(u'# {:20} {:<15} {:<10} {:<15s}'.format('Scan ID', 'Status', 'Size', 'Timestamp'))
# click.echo('#' * 65)
for scan in scans['matches'][:10]:
click.echo(
u'{:31} {:<24} {:<10} {:<15s}'.format(
click.style(scan['id'], fg='yellow'),
def radar():
"""Real-Time Map of some results as Shodan finds them."""
key = get_api_key()
api = shodan.Shodan(key)
from shodan.cli.worldmap import launch_map
try:
launch_map(api)
except shodan.APIError as e:
raise click.ClickException(e.value)
except Exception as e:
raise click.ClickException(u'{}'.format(e))
def main(argv=None):
""" Main function / entry point """
from shodan import Shodan
from shodan.cli.helpers import get_api_key
api = Shodan(get_api_key())
return launch_map(api)