ポートスキャナーは、ネットワーク上のデバイスが開いているポートを特定するためのツールです。これにより、セキュリティの評価やネットワークのトラブルシューティングが可能になります。この記事では、Rubyを使用してシンプルなポートスキャナーを作成する方法を説明します。初心者の方でも理解できるように、ステップバイステップで進めていきますので、安心してください。
ポートスキャナーは、特定のIPアドレスに対して、指定したポートが開いているかどうかを確認します。ポートは、ネットワーク上の通信のエンドポイントであり、各ポートには特定のサービスが関連付けられています。例えば、HTTPはポート80、HTTPSはポート443で動作します。
ポートスキャンにはいくつかの種類があります。以下は一般的なポートスキャンの種類です:
ポートスキャナーを作成するためには、Rubyがインストールされている必要があります。Rubyは、シンプルで読みやすい構文を持つプログラミング言語です。以下の手順でRubyをインストールしてください:
# Ubuntuの場合 sudo apt-get install ruby # macOSの場合 brew install ruby # Windowsの場合 RubyInstallerを使用してインストール
それでは、実際にポートスキャナーを実装してみましょう。以下のコードは、指定したIPアドレスの特定のポートが開いているかどうかを確認するシンプルなポートスキャナーです。
require 'socket' def port_scanner(ip, ports) open_ports = [] ports.each do |port| begin socket = Socket.new(:INET, :STREAM) socket.connect(Socket.sockaddr_in(port, ip)) open_ports << port socket.close rescue Errno::ECONNREFUSED, Errno::ETIMEDOUT # ポートが閉じているか、接続できない場合は何もしない end end open_ports end ip_address = '127.0.0.1' # スキャンするIPアドレス ports_to_scan = (1..1024).to_a # スキャンするポート範囲 open_ports = port_scanner(ip_address, ports_to_scan) puts "開いているポート: #{open_ports.join(', ')}"
上記のコードは、以下のように動作します:
port_scanner
関数を定義し、IPアドレスとポートのリストを引数として受け取ります。open_ports
リストに追加します。基本的なポートスキャナーが完成したので、次は機能を拡張してみましょう。以下の機能を追加することを検討してみてください:
スキャンを並列に実行するために、Rubyのスレッドを使用します。以下のコードは、ポートスキャンを並列に実行する方法を示しています。
require 'socket' require 'thread' def port_scanner(ip, ports) open_ports = [] threads = [] ports.each do |port| threads << Thread.new do begin socket = Socket.new(:INET, :STREAM) socket.connect(Socket.sockaddr_in(port, ip)) open_ports << port socket.close rescue Errno::ECONNREFUSED, Errno::ETIMEDOUT # ポートが閉じているか、接続できない場合は何もしない end end end threads.each(&:join) # すべてのスレッドが完了するまで待機 open_ports end ip_address = '127.0.0.1' # スキャンするIPアドレス ports_to_scan = (1..1024).to_a # スキャンするポート範囲 open_ports = port_scanner(ip_address, ports_to_scan) puts "開いているポート: #{open_ports.join(', ')}"
この記事では、Rubyを使用してシンプルなポートスキャナーを作成する方法を説明しました。ポートスキャナーは、ネットワークのセキュリティ評価やトラブルシューティングに役立つツールです。基本的なスキャナーを作成した後は、並列処理やログ機能などの拡張を検討してみてください。
プログラミングは実践が重要ですので、ぜひ自分でコードを試してみてください。質問や疑問があれば、気軽にコメントしてください。楽しいプログラミングライフを!
© 2024 RailsInsights. All rights reserved.