Tenemos la librería shodan para realizar búsquedas desde Python utilizando su API. Por ejemplo si queremos hacer una búsqueda de equipos con windows XP, lo haríamos de esta forma:

import shodan
 
# introduce tu clave de API de Shodan
API_KEY = "INSERTAR API"
 
# crea una instancia del objeto API de Shodan
api = shodan.Shodan(API_KEY)
 
# realiza una búsqueda en Shodan por equipos con Windows XP instalado
query = "Windows XP"
results = api.search(query)
 
# imprime información básica sobre los resultados de la búsqueda
print(f"Se encontraron {results['total']} resultados:")
for result in results['matches']:
    print(f"IP: {result['ip_str']}\nPuerto: {result['port']}\nOrganización: {result.get('org', 'N/A')}\n")

Y este sería el output:

Ahora por ejemplo vamos a buscar por vídeo cámaras:

import shodan
 
# introduce tu clave de API de Shodan
API_KEY = "INSERTAR API"
 
# crea una instancia del objeto API de Shodan
api = shodan.Shodan(API_KEY)
 
# realiza una búsqueda en Shodan por equipos por cámaras de vídeo
query = "camera"
results = api.search(query)
 
# imprime información básica sobre los resultados de la búsqueda
print(f"Se encontraron {results['total']} resultados:")
for result in results['matches']:
    print(f"IP: {result['ip_str']}\nPuerto: {result['port']}\nOrganización: {result.get('org', 'N/A')}\n")

Y este es el resultado:

Incluso también podríamos exportar toda esta información a una hoja de excel usando la librería openpyxl:

import shodan
import openpyxl
 
# introduce tu clave de API de Shodan
API_KEY = "INSERTAR API"
 
# crea una instancia del objeto API de Shodan
api = shodan.Shodan(API_KEY)
 
# realiza una búsqueda en Shodan por cámaras de vídeo
query = "camera"
results = api.search(query)
 
# imprime información básica sobre los resultados de la búsqueda
print(f"Se encontraron {results['total']} resultados:")
for result in results['matches']:
    print(f"IP: {result['ip_str']}\nPuerto: {result['port']}\nOrganización: {result.get('org', 'N/A')}\n")
 
wb = openpyxl.Workbook()
sheet = wb.active
 
# escribe las cabeceras de las columnas en la primera fila de la hoja de trabajo
sheet.cell(row=1, column=1).value = "IP"
sheet.cell(row=1, column=2).value = "Puerto"
sheet.cell(row=1, column=3).value = "Organización"
 
# escribe los resultados de la búsqueda en las filas siguientes
for i, result in enumerate(results['matches']):
    sheet.cell(row=i+2, column=1).value = result['ip_str']
    sheet.cell(row=i+2, column=2).value = result['port']
    sheet.cell(row=i+2, column=3).value = result.get('org', 'N/A')
 
# guarda el archivo de Excel
wb.save("resultados_shodan.xlsx")
wb.close()

Y este es el resultado:

También podríamos sacar sólo las direcciones IP, simplemente extrayendo eso del diccionario:

import shodan
 
# introduce tu clave de API de Shodan
API_KEY = "INSERTAR API"
 
# crea una instancia del objeto API de Shodan
api = shodan.Shodan(API_KEY)
 
# realiza una búsqueda en Shodan por equipos con Windows XP instalado
query = "camera"
results = api.search(query)
 
# imprime información básica sobre los resultados de la búsqueda
print(f"Se encontraron {results['total']} resultados:")
for result in results['matches']:
    print(result['ip_str'])

Y este es el resultado:

Y estas direcciones IP también las podemos guardar en una hoja de excel:

import shodan
import openpyxl
 
# introduce tu clave de API de Shodan
API_KEY = "INSERTAR API"
 
# crea una instancia del objeto API de Shodan
api = shodan.Shodan(API_KEY)
 
# realiza una búsqueda en Shodan por equipos con Windows XP instalado
query = "camera"
results = api.search(query)
 
# imprime información básica sobre los resultados de la búsqueda
print(f"Se encontraron {results['total']} resultados:")
for result in results['matches']:
    print(result['ip_str'])
 
wb = openpyxl.Workbook()
sheet = wb.active
 
# escribe las cabeceras de las columnas en la primera fila de la hoja de trabajo
sheet.cell(row=1, column=1).value = "IP"
 
# escribe los resultados de la búsqueda en las filas siguientes
for i, result in enumerate(results['matches']):
    sheet.cell(row=i+2, column=1).value = result['ip_str']
 
# guarda el archivo de Excel
wb.save("resultados_shodan_IP.xlsx")
wb.close()

Y lo tenemos todo en un excel: