Rails Insights

Створення портового сканера на Ruby

У світі комп'ютерних мереж портовий сканер є важливим інструментом для виявлення відкритих портів на віддалених системах. Це може бути корисно для адміністраторів мереж, фахівців з безпеки та навіть для тих, хто просто хоче дізнатися більше про свою мережу. У цій статті ми розглянемо, як створити простий портовий сканер на мові програмування Ruby. Ми пройдемо через основи, розглянемо код і надамо кілька порад для покращення нашого сканера.

Що таке портовий сканер?

Портовий сканер — це інструмент, який перевіряє доступність портів на віддаленій машині. Кожен комп'ютер у мережі має унікальну IP-адресу, а порти використовуються для зв'язку між різними сервісами. Наприклад, веб-сервери зазвичай слухають на порту 80 (HTTP) або 443 (HTTPS). Сканування портів може допомогти виявити, які сервіси працюють на віддаленій машині, а також виявити потенційні вразливості.

Основи Ruby

Перед тим, як почати, важливо мати базові знання про Ruby. Ruby — це об'єктно-орієнтована мова програмування, яка відома своєю простотою та елегантністю. Якщо ви новачок у Ruby, рекомендуємо ознайомитися з основами, такими як змінні, цикли та методи.

Встановлення Ruby

Якщо у вас ще не встановлений Ruby, ви можете завантажити його з офіційного сайту ruby-lang.org. Для користувачів Windows рекомендується використовувати RubyInstaller, а для користувачів macOS — Homebrew.

Створення простого портового сканера

Тепер, коли у нас є Ruby, давайте створимо простий портовий сканер. Ми будемо використовувати стандартну бібліотеку Ruby для роботи з мережами.

Код портового сканера

Ось базовий код для нашого портового сканера:

require 'socket'

def scan_ports(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
      # Порт закритий
    rescue Errno::ETIMEDOUT
      # Тайм-аут
    rescue => e
      puts "Помилка: #{e.message}"
    end
  end

  open_ports
end

ip_address = '127.0.0.1' # Змініть на IP-адресу, яку ви хочете сканувати
ports_to_scan = (1..1024).to_a # Сканування портів з 1 по 1024

open_ports = scan_ports(ip_address, ports_to_scan)

puts "Відкриті порти на #{ip_address}: #{open_ports.join(', ')}"

Пояснення коду

Давайте розглянемо, як працює наш портовий сканер:

  • require 'socket': Ми імпортуємо бібліотеку Socket, яка дозволяє нам працювати з мережевими з'єднаннями.
  • scan_ports(ip, ports): Це метод, який приймає IP-адресу та масив портів для сканування.
  • Socket.new(:INET, :STREAM): Ми створюємо новий сокет для TCP-з'єднання.
  • socket.connect(Socket.sockaddr_in(port, ip)): Спробуємо підключитися до вказаного порту на вказаній IP-адресі.
  • open_ports << port: Якщо підключення успішне, ми додаємо порт до списку відкритих портів.
  • rescue: Обробка виключень для закритих портів та тайм-аутів.

Запуск сканера

Щоб запустити наш портовий сканер, збережіть код у файл з розширенням .rb, наприклад, port_scanner.rb. Потім відкрийте термінал і виконайте команду:

ruby port_scanner.rb

Ви повинні побачити список відкритих портів на вказаній IP-адресі.

Покращення нашого сканера

Наш базовий портовий сканер працює, але є кілька способів його покращити:

  • Масштабування: Додайте можливість сканувати більше портів, наприклад, від 1 до 65535.
  • Паралельне сканування: Використовуйте потоки або асинхронні запити для одночасного сканування кількох портів, що значно прискорить процес.
  • Вивід результатів: Додайте можливість зберігати результати сканування у файл для подальшого аналізу.
  • Графічний інтерфейс: Розгляньте можливість створення простого GUI для зручності використання.

Висновок

Створення портового сканера на Ruby — це чудовий спосіб навчитися основам мережевого програмування та покращити свої навички програмування. Хоча наш сканер є простим, він може бути основою для більш складних проектів. Не забувайте, що сканування портів може бути незаконним без дозволу власника системи, тому завжди дотримуйтесь етики та законодавства.

Сподіваємося, що ця стаття була корисною для вас, і ви зможете створити свій власний портовий сканер на Ruby. Успіхів у програмуванні!

Published: August 12, 2024

© 2024 RailsInsights. All rights reserved.