Skip to content
Snippets Groups Projects
Select Git revision
  • fde0ab6fe28d292d68cdbd63cb853efe63632cf3
  • master default
2 results

index.html

Blame
  • utils.py 1.75 KiB
    import shodan
    
    def shodan_scan(api_key, ips):
        api = shodan.Shodan(api_key)
        scan_results = []
    
        for ip in ips:
            try:
                host_info = api.host(ip)
                scan_result = {
                    'ip_address': ip,
                    'open_ports': [{
                        'port': port_info['port'],
                        'protocol': port_info['_shodan']['module'],
                        'banner': port_info.get('banner', '')
                    } for port_info in host_info.get('data', []) if isinstance(port_info, dict)],
                    'geolocation': {
                        'country': host_info.get('country_name', 'Unknown'),
                        'city': host_info.get('city', 'Unknown'),
                        'latitude': host_info.get('latitude', 0),
                        'longitude': host_info.get('longitude', 0)
                    },
                    'vulnerabilities': []
                }
    
                vulns_info = host_info.get('vulns', [])
                if isinstance(vulns_info, list):
                    for cve in vulns_info:
                        if isinstance(cve, str):
                            scan_result['vulnerabilities'].append({
                                'cve': cve,
                                'summary': 'Details not provided by Shodan'  # Placeholder text
                            })
                        else:
                            print(f"Unexpected format for vulnerability detail: {cve}")
                else:
                    print(f"Vulnerabilities data is not in expected list format: {type(vulns_info)}")
    
                scan_results.append(scan_result)
            except shodan.APIError as e:
                print(f"Error scanning IP {ip}: {e}")
            except KeyError as ke:
                print(f"Key error: {ke} - Possible incorrect data structure access.")
    
        return scan_results