Uma jóia moderna e assíncrona para Shodan, o primeiro mecanismo de pesquisa do mundo para dispositivos conectados à Internet.
$ gem install shodanz
require "shodanz"
client = Shodanz . client . new ( key : "YOUR_API_KEY" )Observe que você também pode definir a variável de ambiente
SHODAN_API_KEYem vez de passar a chave da API como um argumento ao criar um cliente.
Shodanz utiliza assíncrono para fornecer IO assíncrono. Isso não quebra nenhum script existente usando Shodanz, mas agora oferece ainda mais flexibilidade para escrever coisas mais impressionantes, como esse detector de honeypot assíncrono:
Nota Para executar qualquer método shodanz de forma assíncrica, basta embrulhá -lo em um bloco
Async { ... }. Para aguardar qualquer outra operação assíncrona para finlandês no bloco, ligue para.wait
A API REST fornece métodos para pesquisar Shodan, procurar hosts, obter informações de resumo sobre consultas e uma variedade de métodos de utilidade para facilitar o desenvolvimento. Consulte a documentação da API REST para obter mais idéias sobre como usá -lo.
Pesquisar coisas, você está?
Retorna todos os serviços que foram encontrados no IP do host fornecido.
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. Pesquise Shodan usando a mesma sintaxe de consulta que o site e use facetas para obter informações de resumo para diferentes propriedades.
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" } ) Esse método se comporta idêntico ao host_search , com a única diferença de que esse método não retorna os resultados do host, ele retorna apenas o número total de resultados que correspondiam à consulta e a qualquer informação da faceta solicitada. Como resultado, esse método não consome 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 que Shodan rastreie um IP ou NetBlock.
client . scan ( "8.8.8.8" ) Use este método para solicitar que Shodan rastreie a Internet para uma porta específica.
Esse método é restrito a pesquisadores e empresas de segurança com uma licença de dados Shodan. Para solicitar acesso a esse método como pesquisador, envie um email para [email protected] com informações sobre seu projeto. O acesso é restrito para evitar abusos.
client . crawl_for ( port : 80 , protocol : "http" ) Use este método para obter uma lista de consultas de pesquisa que os usuários salvaram em 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 pesquisar no diretório de consultas de pesquisa que os usuários salvaram em Shodan.
client . search_for_community_query ( "the best" )
client . search_for_community_query ( "the best" , page : 2 ) Use este método para obter uma lista de tags populares para as consultas de pesquisa salvas em Shodan.
client . popular_query_tags
client . popular_query_tags ( 20 ) Este método retorna um objeto que contém todos os protocolos que podem ser usados ao iniciar uma varredura da Internet.
client . protocols Este método retorna uma lista de números de porta que os rastreadores Shodan estão procurando.
client . ports Retorna informações sobre a conta Shodan vinculada a esta chave da API.
client . profile Procure o endereço IP da lista fornecida de nomes de host.
client . resolve ( "google.com" )
client . resolve ( "google.com" , "bing.com" ) Procure os nomes de host que foram definidos para a lista fornecida de endereços IP.
client . reverse_lookup ( "74.125.227.230" )
client . reverse_lookup ( "74.125.227.230" , "204.79.197.200" ) Mostra os cabeçalhos HTTP que seu cliente envia ao se conectar a um servidor da web.
client . http_headers Obtenha seu endereço IP atual como visto na Internet.
client . my_ip Calcula uma pontuação de probabilidade do Honeypot variando de 0 (não um honeypot) a 1,0 (é um honeypot).
client . honeypot_score ( '8.8.8.8' ) client . infoA API de streaming é um serviço baseado em HTTP que retorna um fluxo de dados em tempo real coletado pela Shodan. Consulte a documentação da API de streaming para obter mais idéias sobre como usá -lo.
Esse fluxo fornece todos os dados que Shodan coleta. Use este fluxo se precisar de acesso a tudo e/ ou desejar armazenar seu próprio banco de dados Shodan localmente. Se você se preocupa apenas com portas específicas, use o fluxo de portas.
client . banners do | data |
# do something with banner data
puts data
end Esse fluxo fornece uma visão filtrada de largura de banda do fluxo de banners, caso você esteja interessado apenas em dispositivos localizados em determinados ASNs.
client . banners_within_asns ( 3303 , 32475 ) do | data |
# do something with banner data
puts data
end Esse fluxo fornece uma visão filtrada de largura de banda do fluxo de banners, caso você esteja interessado apenas em dispositivos localizados em determinados países.
client . banners_within_countries ( "DE" , "US" , "JP" ) do | data |
# do something with banner data
puts data
end Retorna apenas dados do banner para a lista de portas especificadas. Esse fluxo fornece uma visão filtrada de largura de banda do fluxo de banners, caso você esteja interessado apenas em uma lista específica de portas.
client . banners_on_ports ( 21 , 22 , 80 ) do | data |
# do something with banner data
puts data
end Inscreva -se em banners descobertos em todas as faixas de IP descritas nos alertas de rede.
client . alerts do | data |
# do something with banner data
puts data
end Inscreva -se nos banners descobertos no intervalo IP definido em um alerta de rede específico.
client . alert ( "HKVGAIRWD79Z7W2T" ) do | data |
# do something with banner data
puts data
endA API de explorações fornece acesso a várias fontes de dados de exploração/ vulnerabilidade. Consulte a documentação da API Explorações para obter mais idéias sobre como usá -la.
Pesquise em uma variedade de fontes de dados para fazer explorações e use facetas para obter informações de resumo.
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 ao método search de API de exploração com a diferença de que não retorna nenhum 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. A GEM está disponível como código aberto nos termos da licença do MIT.