Rails Insights

Construire un Scanner de Ports en Ruby

Dans le monde de la cybersécurité et de l'administration réseau, un scanner de ports est un outil essentiel. Il permet d'identifier les ports ouverts sur un système, ce qui peut aider à détecter des vulnérabilités potentielles. Dans cet article, nous allons explorer comment construire un scanner de ports simple en utilisant le langage de programmation Ruby. Que vous soyez un débutant ou un développeur expérimenté, ce guide vous fournira des informations utiles et des exemples de code pour vous aider à démarrer.

Qu'est-ce qu'un Scanner de Ports ?

Un scanner de ports est un programme qui envoie des requêtes à des ports spécifiques sur une machine cible pour déterminer leur état. Les ports peuvent être ouverts, fermés ou filtrés. Voici un aperçu des états des ports :

  • Ouvert : Le port accepte les connexions.
  • Fermé : Le port n'accepte pas les connexions.
  • Filtré : Le port est protégé par un pare-feu et ne répond pas aux requêtes.

Les scanners de ports sont souvent utilisés pour des tests de pénétration, mais ils peuvent également être utilisés à des fins légitimes, comme la gestion des réseaux.

Pré-requis

Avant de commencer, assurez-vous d'avoir Ruby installé sur votre machine. Vous pouvez vérifier cela en exécutant la commande suivante dans votre terminal :

ruby -v

Si Ruby n'est pas installé, vous pouvez le télécharger depuis le site officiel de Ruby.

Création d'un Scanner de Ports Simple

Nous allons créer un scanner de ports simple qui peut scanner une plage de ports sur une machine cible. Voici les étapes que nous allons suivre :

  1. Configurer les paramètres de base.
  2. Écrire une méthode pour scanner un port.
  3. Écrire une méthode pour scanner une plage de ports.
  4. Exécuter le scanner et afficher les résultats.

1. Configuration des Paramètres de Base

Commençons par créer un fichier Ruby, par exemple port_scanner.rb. Dans ce fichier, nous allons définir les paramètres de base, tels que l'adresse IP de la cible et la plage de ports à scanner.

target_ip = '127.0.0.1' # Remplacez par l'adresse IP de votre cible
start_port = 1
end_port = 1024

2. Écriture d'une Méthode pour Scanner un Port

Nous allons maintenant écrire une méthode qui tentera de se connecter à un port spécifique. Si la connexion réussit, cela signifie que le port est ouvert.

require 'socket'

def scan_port(ip, port)
  socket = Socket.new(:INET, :STREAM)
  remote_addr = Socket.sockaddr_in(port, ip)

  begin
    socket.connect(remote_addr)
    return true
  rescue Errno::ECONNREFUSED
    return false
  ensure
    socket.close
  end
end

3. Écriture d'une Méthode pour Scanner une Plage de Ports

Nous allons maintenant écrire une méthode qui utilisera la méthode scan_port pour scanner une plage de ports.

def scan_ports(ip, start_port, end_port)
  open_ports = []

  (start_port..end_port).each do |port|
    if scan_port(ip, port)
      open_ports << port
      puts "Port #{port} est ouvert."
    else
      puts "Port #{port} est fermé."
    end
  end

  open_ports
end

4. Exécution du Scanner et Affichage des Résultats

Enfin, nous allons exécuter notre scanner et afficher les résultats. Ajoutez le code suivant à la fin de votre fichier port_scanner.rb.

puts "Scanning #{target_ip} from port #{start_port} to #{end_port}..."
open_ports = scan_ports(target_ip, start_port, end_port)

puts "Ports ouverts : #{open_ports.join(', ')}" if open_ports.any?

Exécution du Scanner

Pour exécuter votre scanner de ports, ouvrez un terminal et naviguez jusqu'au répertoire où se trouve votre fichier port_scanner.rb. Exécutez la commande suivante :

ruby port_scanner.rb

Vous devriez voir une sortie indiquant quels ports sont ouverts et lesquels sont fermés. N'oubliez pas que le scanner peut prendre un certain temps, en fonction de la plage de ports que vous avez spécifiée.

Améliorations Possibles

Bien que notre scanner de ports soit fonctionnel, il existe plusieurs améliorations que vous pouvez envisager :

  • Multithreading : Pour accélérer le processus de scan, vous pouvez utiliser le multithreading afin de scanner plusieurs ports simultanément.
  • Options de ligne de commande : Ajoutez des options pour permettre à l'utilisateur de spécifier l'adresse IP et la plage de ports via la ligne de commande.
  • Rapports : Générez un rapport détaillé des ports ouverts, y compris des informations sur les services qui s'exécutent sur ces ports.

Conclusion

Dans cet article, nous avons construit un scanner de ports simple en Ruby. Nous avons appris à configurer les paramètres de base, à écrire des méthodes pour scanner des ports et à exécuter notre scanner. Bien que ce scanner soit basique, il constitue une excellente base pour des projets plus avancés. N'hésitez pas à explorer et à ajouter vos propres fonctionnalités pour le rendre encore plus puissant.

Nous espérons que cet article vous a été utile et que vous vous sentez prêt à créer votre propre scanner de ports. Bonne programmation !

Published: August 12, 2024

© 2024 RailsInsights. All rights reserved.