Una gema moderna y asíncrata de rubí para Shodan, el primer motor de búsqueda del mundo para dispositivos conectados a Internet.
$ gem install shodanz
require "shodanz"
client = Shodanz . client . new ( key : "YOUR_API_KEY" )Tenga en cuenta que también puede establecer la variable de entorno
SHODAN_API_KEYen lugar de pasar la tecla API como argumento al crear un cliente.
Shodanz utiliza Async para proporcionar IO asíncrono. Esto no rompe ningún script existente usando shodanz, pero ahora ofrece aún más flexibilidad para escribir cosas más increíbles, como este detector de honeypot asíncrono:
Nota Para ejecutar cualquier método de Shodanz de forma asincronosa, simplemente envuélvalo en un bloque
Async { ... }. Para esperar a que cualquier otra operación de Async se finje en el bloque,.wait.
La API REST proporciona métodos para buscar Shodan, buscar hosts, obtener información resumida sobre consultas y una variedad de métodos de utilidad para facilitar el desarrollo. Consulte la documentación de la API REST para obtener más ideas sobre cómo usarla.
Buscar cosas, ¿estás?
Devuelve todos los servicios que se han encontrado en la IP de host dada.
client . host ( "8.8.8.8" ) # Default
client . host ( "8.8.8.8" , history : true ) # All historical banners should be returned.
client . host ( "8.8.8.8" , minify : true ) # Only return the list of ports and the general host information, no banners. Busque Shodan utilizando la misma sintaxis de consulta que el sitio web y use facetas para obtener información de resumen para diferentes propiedades.
client . host_search ( "mongodb" )
client . host_search ( "nginx" )
client . host_search ( "apache" , after : "1/12/16" )
client . host_search ( "ssh" , port : 22 , page : 1 )
client . host_search ( "ssh" , port : 22 , page : 2 )
client . host_search ( "ftp" , port : 21 , facets : { link : "Ethernet or modem" } ) Este método se comporta idéntico a host_search con la única diferencia de que este método no devuelve los resultados del host, solo devuelve el número total de resultados que coincidieron con la consulta y cualquier información faceta que se solicitó. Como resultado, este método no consume créditos de consulta.
client . host_count ( "apache" )
client . host_count ( "apache" , country : "US" )
client . host_count ( "apache" , country : "US" , state : "MI" )
client . host_count ( "apache" , country : "US" , state : "MI" , city : "Detroit" )
client . host_count ( "nginx" , facets : { country : 5 } )
client . host_count ( "apache" , facets : { country : 5 } ) Use este método para solicitar a Shodan para rastrear una IP o Netblock.
client . scan ( "8.8.8.8" ) Utilice este método para solicitar a Shodan para rastrear Internet para un puerto específico.
Este método está restringido a investigadores de seguridad y empresas con una licencia de datos de Shodan. Para solicitar acceso a este método como investigador, envíe un correo electrónico [email protected] con información sobre su proyecto. El acceso está restringido para evitar el abuso.
client . crawl_for ( port : 80 , protocol : "http" ) Use este método para obtener una lista de consultas de búsqueda que los usuarios han guardado en Shodan.
client . community_queries
client . community_queries ( page : 2 )
client . community_queries ( sort : "votes" )
client . community_queries ( sort : "votes" , page : 2 )
client . community_queries ( order : "asc" )
client . community_queries ( order : "desc" ) Use este método para buscar el directorio de consultas de búsqueda que los usuarios han guardado en Shodan.
client . search_for_community_query ( "the best" )
client . search_for_community_query ( "the best" , page : 2 ) Use este método para obtener una lista de etiquetas populares para las consultas de búsqueda guardadas en Shodan.
client . popular_query_tags
client . popular_query_tags ( 20 ) Este método devuelve un objeto que contiene todos los protocolos que se pueden usar al iniciar un escaneo de Internet.
client . protocols Este método devuelve una lista de números de puerto que los rastreadores de Shodan están buscando.
client . ports Devuelve información sobre la cuenta de Shodan vinculada a esta clave API.
client . profile Busque la dirección IP para la lista proporcionada de nombres de host.
client . resolve ( "google.com" )
client . resolve ( "google.com" , "bing.com" ) Busque los nombres de host que se han definido para la lista dada de direcciones IP.
client . reverse_lookup ( "74.125.227.230" )
client . reverse_lookup ( "74.125.227.230" , "204.79.197.200" ) Muestra los encabezados HTTP que su cliente envía cuando se conecta a un servidor web.
client . http_headers Obtenga su dirección IP actual como se ve desde Internet.
client . my_ip Calcula una puntuación de probabilidad de honeypot que varía de 0 (no un honeypot) a 1.0 (es un honeypot).
client . honeypot_score ( '8.8.8.8' ) client . infoLa API de transmisión es un servicio basado en HTTP que devuelve un flujo de datos en tiempo real recopilado por Shodan. Consulte la documentación de la API de transmisión para obtener más ideas sobre cómo usarla.
Esta secuencia proporciona todos los datos que Shodan recopila. Use esta transmisión si necesita acceso a todo y/ o desea almacenar su propia base de datos de Shodan localmente. Si solo se preocupa por los puertos específicos, utilice la transmisión de puertos.
client . banners do | data |
# do something with banner data
puts data
end Esta transmisión proporciona una vista filtrada de ancho de banda de la transmisión de pancartas en caso de que solo esté interesado en dispositivos ubicados en ciertos ASN.
client . banners_within_asns ( 3303 , 32475 ) do | data |
# do something with banner data
puts data
end Esta transmisión proporciona una vista filtrada de ancho de banda de la transmisión de pancartas en caso de que solo esté interesado en dispositivos ubicados en ciertos países.
client . banners_within_countries ( "DE" , "US" , "JP" ) do | data |
# do something with banner data
puts data
end Solo devuelve datos de banner para la lista de puertos especificados. Esta transmisión proporciona una vista filtrada de ancho de banda de la transmisión de pancartas en caso de que solo esté interesado en una lista específica de puertos.
client . banners_on_ports ( 21 , 22 , 80 ) do | data |
# do something with banner data
puts data
end Suscríbase a las pancartas descubiertas en todos los rangos de IP descritos en las alertas de red.
client . alerts do | data |
# do something with banner data
puts data
end Suscríbase a las pancartas descubiertas en el rango IP definido en una alerta de red específica.
client . alert ( "HKVGAIRWD79Z7W2T" ) do | data |
# do something with banner data
puts data
endLa API de Exploits proporciona acceso a varias fuentes de datos de exploit/ vulnerabilidad. Consulte la documentación de la API de Exploits para obtener más ideas sobre cómo usarla.
Busque una variedad de fuentes de datos para exploits y use facetas para obtener información resumida.
client . exploits_api . search ( "python" ) # Search for python vulns.
client . exploits_api . search ( port : 22 ) # Port number for the affected service if the exploit is remote.
client . exploits_api . search ( type : "shellcode" ) # A category of exploit to search for.
client . exploits_api . search ( osvdb : "100007" ) # Open Source Vulnerability Database ID for the exploit. Este método se comporta idéntico al método search de API de Exploits con la diferencia de que no devuelve ningún resultado.
client . exploits_api . count ( "python" ) # Count python vulns.
client . exploits_api . count ( port : 22 ) # Port number for the affected service if the exploit is remote.
client . exploits_api . count ( type : "shellcode" ) # A category of exploit to search for.
client . exploits_api . count ( osvdb : "100007" ) # Open Source Vulnerability Database ID for the exploit. La gema está disponible como código abierto bajo los términos de la licencia MIT.