ポートスキャナーは、ネットワーク上のデバイスが開いているポートを特定するためのツールです。これにより、セキュリティの評価やネットワークのトラブルシューティングが可能になります。この記事では、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.