Notas de Luis

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:

computing/coding/python/api/conectar_python_con_shodan.txt · Última modificación: por 127.0.0.1