インターネットに接続されたデバイスの世界初の検索エンジンであるショーダンのためのモダンな非典型的な宝石。
$ gem install shodanz
require "shodanz"
client = Shodanz . client . new ( key : "YOUR_API_KEY" )注クライアントを作成するときに引数としてAPIキーを渡す代わりに、
SHODAN_API_KEY環境変数を設定することもできます。
ShodanzはAsyncを利用して非同期IOを提供します。これは、Shodanzを使用して既存のスクリプトを壊すことはありませんが、この無おそらないハニーポット検出器のように、より素晴らしいものを書くためのさらに柔軟性を提供します。
Async { ... }ブロックに包むだけで、Shodanzメソッドを非同期に実行するために注意してください。ブロック内のフィンランド語への他の非同期操作を待つには、.waitを呼び出します。
REST APIは、Shodanを検索し、ホストを検索し、クエリとさまざまなユーティリティ方法に関する要約情報を取得して、開発を容易にする方法を提供します。その使用方法に関するその他のアイデアについては、REST APIドキュメントを参照してください。
ものを検索してください、 'ya?
指定されたホストIPで見つかったすべてのサービスを返します。
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. Webサイトと同じクエリ構文を使用してShodanを検索し、ファセットを使用して異なるプロパティの概要情報を取得します。
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" } ) このメソッドは、ホストの結果を返さない唯一の違いでhost_searchと同一に動作します。クエリと一致する結果の合計数と要求されたファセット情報のみを返します。その結果、この方法ではクエリクレジットを消費しません。
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 } ) この方法を使用して、ShodanにIPまたはNetBlockをクロールするよう要求します。
client . scan ( "8.8.8.8" ) この方法を使用して、Shodanに特定のポートのためにインターネットをcraうと要求します。
この方法は、Shodanデータライセンスを持つセキュリティ研究者と企業に制限されています。研究者としてこの方法へのアクセスを申請するには、プロジェクトに関する情報を[email protected]にメールしてください。アクセスは虐待を防ぐために制限されています。
client . crawl_for ( port : 80 , protocol : "http" ) この方法を使用して、ユーザーが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" ) この方法を使用して、ユーザーがShodanで保存した検索クエリのディレクトリを検索します。
client . search_for_community_query ( "the best" )
client . search_for_community_query ( "the best" , page : 2 ) この方法を使用して、Shodanの保存された検索クエリの一般的なタグのリストを取得します。
client . popular_query_tags
client . popular_query_tags ( 20 ) このメソッドは、インターネットスキャンの起動時に使用できるすべてのプロトコルを含むオブジェクトを返します。
client . protocols この方法は、ショーダンクローラーが探しているポート番号のリストを返します。
client . ports このAPIキーにリンクされているShodanアカウントに関する情報を返します。
client . profile ホスト名の提供されたリストのIPアドレスを調べます。
client . resolve ( "google.com" )
client . resolve ( "google.com" , "bing.com" ) IPアドレスの指定されたリストに対して定義されているホスト名を調べます。
client . reverse_lookup ( "74.125.227.230" )
client . reverse_lookup ( "74.125.227.230" , "204.79.197.200" ) Webサーバーに接続するときにクライアントが送信するHTTPヘッダーを表示します。
client . http_headers インターネットから見た現在のIPアドレスを取得します。
client . my_ip 0(ハニーポットではない)から1.0(ハニーポット)の範囲のハニーポット確率スコアを計算します。
client . honeypot_score ( '8.8.8.8' ) client . infoストリーミングAPIは、HTTPベースのサービスであり、Shodanが収集したリアルタイムのデータストリームを返します。それを使用する方法に関するその他のアイデアについては、ストリーミングAPIドキュメントを参照してください。
このストリームは、Shodanが収集するすべてのデータを提供します。すべてにアクセスする必要がある場合、および/または独自のShodanデータベースをローカルに保存する場合は、このストリームを使用してください。特定のポートのみを気にする場合は、ポートストリームを使用してください。
client . banners do | data |
# do something with banner data
puts data
end このストリームは、特定のASNにあるデバイスのみに興味がある場合に備えて、バナーストリームのろ過された帯域幅を節約するビューを提供します。
client . banners_within_asns ( 3303 , 32475 ) do | data |
# do something with banner data
puts data
end このストリームは、特定の国にあるデバイスにのみ興味がある場合に備えて、バナーストリームのろ過された帯域幅を節約するビューを提供します。
client . banners_within_countries ( "DE" , "US" , "JP" ) do | data |
# do something with banner data
puts data
end 指定されたポートのリストのバナーデータのみを返します。このストリームは、ポートの特定のリストにのみ興味がある場合に備えて、バナーストリームのろ過された帯域幅を節約するビューを提供します。
client . banners_on_ports ( 21 , 22 , 80 ) do | data |
# do something with banner data
puts data
end ネットワークアラートで説明されているすべてのIP範囲で発見されたバナーを購読します。
client . alerts do | data |
# do something with banner data
puts data
end 特定のネットワークアラートで定義されたIP範囲で発見されたバナーを購読します。
client . alert ( "HKVGAIRWD79Z7W2T" ) do | data |
# do something with banner data
puts data
endExploits APIは、いくつかのエクスプロイト/脆弱性データソースへのアクセスを提供します。 Exploits APIドキュメントを参照して、使用方法についてのアイデアを参照してください。
さまざまなデータソースを検索してエクスプロイトを検索し、ファセットを使用して要約情報を取得します。
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. この方法は、結果を返さないという違いを持つ、エクスプロイトAPI search方法と同一に動作します。
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. 宝石は、MITライセンスの条件の下でオープンソースとして利用できます。