Un joyau moderne et asynchrone Ruby pour Shodan, le premier moteur de recherche au monde pour les appareils connectés à Internet.
$ gem install shodanz
require "shodanz"
client = Shodanz . client . new ( key : "YOUR_API_KEY" )Remarque Vous pouvez également définir la variable d'environnement
SHODAN_API_KEYau lieu de passer la clé API comme argument lors de la création d'un client.
Shodanz utilise Async pour fournir une IO asyncronique. Cela ne rompt aucun script existant à l'aide de Shodanz, mais offre maintenant encore plus de flexibilité pour écrire des choses plus impressionnantes, comme ce détecteur de pot de miel asyncronique:
Remarque Pour exécuter n'importe quelle méthode Shodanz de manière asyncronique, enveloppez-la simplement dans un bloc
Async { ... }. Pour attendre toute autre opération asynchrone au finnois dans le bloc, appelez.waitdessus.
L'API REST fournit des méthodes pour rechercher Shodan, rechercher des hôtes, obtenir des informations sommaires sur les requêtes et une variété de méthodes d'utilité pour faciliter le développement. Reportez-vous à la documentation API REST pour plus d'idées sur la façon de l'utiliser.
Recherche pour des trucs, c'est 'Ya?
Renvoie tous les services qui ont été trouvés sur l'IP hôte donné.
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. Recherchez Shodan en utilisant la même syntaxe de requête que le site Web et utilisez des facettes pour obtenir des informations récapitulatives pour différentes propriétés.
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" } ) Cette méthode se comporte identique à host_search avec la seule différence que cette méthode ne renvoie aucun résultat de l'hôte, il ne renvoie que le nombre total de résultats qui correspondent à la requête et à toute information facette demandée. En conséquence, cette méthode ne consomme pas de crédits de requête.
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 } ) Utilisez cette méthode pour demander à Shodan de ramper une IP ou un NetBlock.
client . scan ( "8.8.8.8" ) Utilisez cette méthode pour demander à Shodan de ramper Internet pour un port spécifique.
Cette méthode est limitée aux chercheurs et aux entreprises de sécurité avec une licence de données Shodan. Pour demander l'accès à cette méthode en tant que chercheur, veuillez envoyer un courriel à [email protected] avec des informations sur votre projet. L'accès est limité pour prévenir les abus.
client . crawl_for ( port : 80 , protocol : "http" ) Utilisez cette méthode pour obtenir une liste de requêtes de recherche que les utilisateurs ont enregistrées à 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" ) Utilisez cette méthode pour rechercher le répertoire des requêtes de recherche que les utilisateurs ont enregistrées à Shodan.
client . search_for_community_query ( "the best" )
client . search_for_community_query ( "the best" , page : 2 ) Utilisez cette méthode pour obtenir une liste de balises populaires pour les requêtes de recherche enregistrées à Shodan.
client . popular_query_tags
client . popular_query_tags ( 20 ) Cette méthode renvoie un objet contenant tous les protocoles qui peuvent être utilisés lors du lancement d'une analyse Internet.
client . protocols Cette méthode renvoie une liste de numéros de port que les Crawlers Shodan recherchent.
client . ports Renvoie des informations sur le compte Shodan lié à cette clé API.
client . profile Recherchez l'adresse IP pour la liste fournie des noms d'hôtes.
client . resolve ( "google.com" )
client . resolve ( "google.com" , "bing.com" ) Recherchez les noms d'hôtes qui ont été définis pour la liste donnée des adresses IP.
client . reverse_lookup ( "74.125.227.230" )
client . reverse_lookup ( "74.125.227.230" , "204.79.197.200" ) Affiche les en-têtes HTTP que votre client envoie lors de la connexion à un serveur Web.
client . http_headers Obtenez votre adresse IP actuelle comme on le voit sur Internet.
client . my_ip Calcule un score de probabilité du pot de miel allant de 0 (pas un pot de miel) à 1,0 (est un pot de miel).
client . honeypot_score ( '8.8.8.8' ) client . infoL'API de streaming est un service basé sur HTTP qui renvoie un flux de données en temps réel collecté par Shodan. Reportez-vous à la documentation de l'API en streaming pour plus d'idées sur la façon de l'utiliser.
Ce flux fournit toutes les données collectées par Shodan. Utilisez ce flux si vous avez besoin d'accéder à tout et / ou souhaitez stocker votre propre base de données Shodan localement. Si vous ne vous souciez que des ports spécifiques, veuillez utiliser le flux de ports.
client . banners do | data |
# do something with banner data
puts data
end Ce flux fournit une vue filtrée et économique de la bande passante du flux de bannières au cas où vous ne vous intéressez que par les appareils situés dans certains ASN.
client . banners_within_asns ( 3303 , 32475 ) do | data |
# do something with banner data
puts data
end Ce flux offre une vue filtrée et économique de la bande passante du flux de bannières au cas où vous ne vous intéressez que par les appareils situés dans certains pays.
client . banners_within_countries ( "DE" , "US" , "JP" ) do | data |
# do something with banner data
puts data
end Renvoie uniquement les données de la bannière pour la liste des ports spécifiés. Ce flux fournit une vue filtrée et économise de la bande passante du flux de bannières au cas où vous ne vous intéressez que par une liste spécifique de ports.
client . banners_on_ports ( 21 , 22 , 80 ) do | data |
# do something with banner data
puts data
end Abonnez-vous aux bannières découvertes sur toutes les plages IP décrites dans les alertes réseau.
client . alerts do | data |
# do something with banner data
puts data
end Abonnez-vous aux bannières découvertes sur la plage IP définie dans une alerte de réseau spécifique.
client . alert ( "HKVGAIRWD79Z7W2T" ) do | data |
# do something with banner data
puts data
endL'API exploite donne accès à plusieurs sources de données d'exploit / vulnérabilité. Reportez-vous à la documentation API Exploits pour plus d'idées sur la façon de l'utiliser.
Recherchez une variété de sources de données pour les exploits et utilisez des facettes pour obtenir des informations récapitulatives.
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. Cette méthode se comporte identique à la méthode search API Exploits avec la différence qu'il ne renvoie aucun résultat.
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. Le GEM est disponible en open source en vertu des termes de la licence du MIT.