{"library":"shodan","title":"Shodan Python Library","description":"The Shodan Python library provides a comprehensive wrapper around the Shodan REST API and the experimental Streaming API, allowing developers to programmatically access information about Internet-connected devices, search for exploits, perform bulk IP lookups, and consume real-time Shodan data. Version 1.31.0 is the latest release, with updates released periodically to add new features and handle API changes.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install shodan"],"cli":{"name":"shodan","version":"Usage: shodan [OPTIONS] COMMAND [ARGS]..."}},"imports":["from shodan import Shodan"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom shodan import Shodan\nfrom shodan.exception import APIError\n\nSHODAN_API_KEY = os.environ.get('SHODAN_API_KEY', 'YOUR_SHODAN_API_KEY')\n\nif not SHODAN_API_KEY or SHODAN_API_KEY == 'YOUR_SHODAN_API_KEY':\n    print(\"Please set the SHODAN_API_KEY environment variable or replace 'YOUR_SHODAN_API_KEY'.\")\nelse:\n    try:\n        api = Shodan(SHODAN_API_KEY)\n\n        # Lookup your current IP address information\n        my_ip_info = api.tools.myip()\n        print(f\"Your IP: {my_ip_info}\")\n\n        # Search for servers running Apache\n        results = api.search('apache')\n        print(f\"Results found for 'apache': {results['total']}\")\n        for result in results['matches']:\n            print(f\"  IP: {result['ip_str']}, Port: {result['port']}, Org: {result['org']}\")\n            break # Print only the first result for brevity\n\n        # Lookup a specific host (e.g., Google DNS)\n        host_info = api.host('8.8.8.8')\n        print(f\"\\nHost 8.8.8.8 info: {host_info['country_name']}, {host_info['org']}\")\n\n    except APIError as e:\n        print(f\"Error: {e}\")\n    except Exception as e:\n        print(f\"An unexpected error occurred: {e}\")","lang":"python","description":"This quickstart initializes the Shodan API client using an API key (preferably from an environment variable), retrieves the user's IP, performs a basic search for 'apache' servers, and looks up information for a specific IP address. It includes basic error handling for API-specific exceptions.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"1.31.0","pypi_latest":"1.31.0","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":3.6,"avg_import_s":0.6,"wheel_type":"sdist"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"shodan","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.55,"mem_mb":9.9,"disk_size":"26.4M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"shodan","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":3.3,"import_time_s":0.41,"mem_mb":9.9,"disk_size":"27M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"shodan","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.73,"mem_mb":11,"disk_size":"29.8M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"shodan","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":3.2,"import_time_s":0.62,"mem_mb":11,"disk_size":"30M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"shodan","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.68,"mem_mb":11.4,"disk_size":"19.4M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"shodan","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":4.1,"import_time_s":0.7,"mem_mb":11.4,"disk_size":"20M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"shodan","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.63,"mem_mb":11.8,"disk_size":"19.2M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"shodan","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":3.8,"import_time_s":0.68,"mem_mb":11.8,"disk_size":"20M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"shodan","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.52,"mem_mb":9.5,"disk_size":"25.4M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"shodan","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":3.7,"import_time_s":0.49,"mem_mb":9.5,"disk_size":"26M"}]}}