From 9fb898f5133dec35288d591cd259f173b27172ca Mon Sep 17 00:00:00 2001 From: Richard Howe Date: Sun, 14 Jul 2024 11:36:07 -0400 Subject: [PATCH 1/2] Simplifying dictionary / json parsing logic --- shodan/cli/host.py | 13 ++++++------- shodan/helpers.py | 6 +++--- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/shodan/cli/host.py b/shodan/cli/host.py index 8ffdeed..6acb5a5 100644 --- a/shodan/cli/host.py +++ b/shodan/cli/host.py @@ -92,9 +92,8 @@ def host_print_pretty(host, history=False): click.echo('') # Show optional HTTP information - if 'http' in banner: - if 'title' in banner['http'] and banner['http']['title']: - click.echo('\t|-- HTTP title: {}'.format(banner['http']['title'])) + if banner.get('http') and banner['http'].get('title'): + click.echo('\t|-- HTTP title: {}'.format(banner['http']['title'])) # Show optional ssl info if 'ssl' in banner: @@ -102,15 +101,15 @@ def host_print_pretty(host, history=False): if 'issuer' in banner['ssl']['cert'] and banner['ssl']['cert']['issuer']: issuer = ', '.join(['{}={}'.format(key, value) for key, value in banner['ssl']['cert']['issuer'].items()]) click.echo('\t|-- Cert Issuer: {}'.format(issuer)) - if 'subject' in banner['ssl']['cert'] and banner['ssl']['cert']['subject']: + if banner['ssl']['cert'].get('subject'): subject = ', '.join(['{}={}'.format(key, value) for key, value in banner['ssl']['cert']['subject'].items()]) click.echo('\t|-- Cert Subject: {}'.format(subject)) - if 'versions' in banner['ssl'] and banner['ssl']['versions']: + if banner['ssl'].get('versions'): click.echo('\t|-- SSL Versions: {}'.format(', '.join([item for item in sorted(banner['ssl']['versions']) if not version.startswith('-')]))) - if 'dhparams' in banner['ssl'] and banner['ssl']['dhparams']: + if banner['ssl'].get('dhparams'): click.echo('\t|-- Diffie-Hellman Parameters:') click.echo('\t\t{:15s}{}\n\t\t{:15s}{}'.format('Bits:', banner['ssl']['dhparams']['bits'], 'Generator:', banner['ssl']['dhparams']['generator'])) - if 'fingerprint' in banner['ssl']['dhparams']: + if banner['ssl']['dhparams'].get('fingerprint'): click.echo('\t\t{:15s}{}'.format('Fingerprint:', banner['ssl']['dhparams']['fingerprint'])) diff --git a/shodan/helpers.py b/shodan/helpers.py index 563ecb4..c74685b 100644 --- a/shodan/helpers.py +++ b/shodan/helpers.py @@ -122,11 +122,11 @@ def iterate_files(files, fast=False): def get_screenshot(banner): - if 'screenshot' in banner and banner['screenshot']: + if banner.get('screenshot'): return banner['screenshot'] - elif 'opts' in banner and 'screenshot' in banner['opts']: + elif banner.get('opts') and banner['opts'].get('screenshot'):]: return banner['opts']['screenshot'] - + return None From 4b2490b41de108553c18fd48e5e600cc169278f8 Mon Sep 17 00:00:00 2001 From: Richard Howe Date: Sun, 14 Jul 2024 11:43:21 -0400 Subject: [PATCH 2/2] Updating implementation --- shodan/cli/host.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shodan/cli/host.py b/shodan/cli/host.py index 6acb5a5..590bbae 100644 --- a/shodan/cli/host.py +++ b/shodan/cli/host.py @@ -74,9 +74,9 @@ def host_print_pretty(host, history=False): for banner in sorted(host['data'], key=lambda k: k['port']): product = '' version = '' - if 'product' in banner and banner['product']: + if banner.get('product'): product = banner['product'] - if 'version' in banner and banner['version']: + if banner.get('version'): version = '({})'.format(banner['version']) click.echo(click.style('{:>7d}'.format(banner['port']), fg='cyan'), nl=False)