Rails Insights

Bouwen van een Poortscanner in Ruby

In de wereld van netwerken en cybersecurity is het scannen van poorten een essentiële vaardigheid. Het stelt ons in staat om te begrijpen welke diensten actief zijn op een server en kan ons helpen bij het identificeren van kwetsbaarheden. In dit artikel gaan we stap voor stap een eenvoudige poortscanner bouwen in Ruby. We zullen de basisprincipes van netwerken en Ruby bespreken, en we zullen codevoorbeelden geven om je op weg te helpen.

Wat is een Poortscanner?

Een poortscanner is een tool die netwerkpoorten op een computer of server controleert om te bepalen welke poorten open zijn, welke gesloten zijn en welke gefilterd zijn. Dit kan nuttig zijn voor zowel netwerkbeheerders als kwaadwillende actoren. Het doel van deze tutorial is om je te leren hoe je een eenvoudige poortscanner kunt maken voor educatieve doeleinden.

Waarom Ruby?

Ruby is een krachtige en flexibele programmeertaal die bekend staat om zijn eenvoud en leesbaarheid. Het is een uitstekende keuze voor beginners en ervaren programmeurs. Met Ruby kun je snel prototypes bouwen en het heeft een rijke set aan bibliotheken die je kunt gebruiken voor netwerken en andere taken.

Benodigdheden

Voordat we beginnen, zorg ervoor dat je het volgende hebt geïnstalleerd:

  • Ruby (versie 2.0 of hoger)
  • Een teksteditor (zoals VSCode, Sublime Text of Atom)
  • Basiskennis van Ruby-programmering

De Basis van Netwerken

Voordat we in de code duiken, is het belangrijk om enkele basisconcepten van netwerken te begrijpen:

  • IP-adres: Een uniek adres dat aan elk apparaat op een netwerk wordt toegewezen.
  • Poort: Een virtuele toegangspoort voor communicatie tussen apparaten. Poorten worden genummerd van 0 tot 65535.
  • TCP en UDP: Twee protocollen die worden gebruikt voor netwerkcommunicatie. TCP is betrouwbaar en zorgt voor een verbinding, terwijl UDP sneller is maar geen garantie biedt voor levering.

Onze Eerste Poortscanner

Laten we nu beginnen met het bouwen van onze poortscanner. We zullen een eenvoudige scanner maken die een reeks poorten op een opgegeven IP-adres controleert.

Stap 1: Basisstructuur

Maak een nieuw Ruby-bestand aan, bijvoorbeeld poortscanner.rb, en begin met de volgende basisstructuur:

# poortscanner.rb

require 'socket'

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

  begin
    socket.connect(remote_address)
    puts "Poort #{port} is open"
  rescue Errno::ECONNREFUSED
    puts "Poort #{port} is gesloten"
  rescue Errno::ETIMEDOUT
    puts "Poort #{port} is gefilterd"
  ensure
    socket.close
  end
end

def scan_ports(ip, start_port, end_port)
  (start_port..end_port).each do |port|
    scan_port(ip, port)
  end
end

if ARGV.length != 3
  puts "Gebruik: ruby poortscanner.rb   "
  exit
end

ip = ARGV[0]
start_port = ARGV[1].to_i
end_port = ARGV[2].to_i

scan_ports(ip, start_port, end_port)

Stap 2: Uitleg van de Code

Hier is een korte uitleg van wat elke functie doet:

  • scan_port(ip, port): Deze functie probeert verbinding te maken met de opgegeven poort op het opgegeven IP-adres. Als de verbinding succesvol is, wordt er een bericht weergegeven dat de poort open is. Als de verbinding wordt geweigerd of als er een time-out optreedt, wordt er een overeenkomstig bericht weergegeven.
  • scan_ports(ip, start_port, end_port): Deze functie doorloopt een reeks poorten van start_port tot end_port en roept de functie scan_port aan voor elke poort.
  • Hoofdgedeelte: Dit gedeelte controleert of de juiste argumenten zijn doorgegeven en roept de functie scan_ports aan met de opgegeven parameters.

De Poortscanner Uitvoeren

Om de poortscanner uit te voeren, open je een terminal en navigeer je naar de map waar je poortscanner.rb hebt opgeslagen. Voer het volgende commando uit:

ruby poortscanner.rb   

Vervang <IP> door het IP-adres dat je wilt scannen, en <start_poort> en <eind_poort> door de poorten die je wilt controleren. Bijvoorbeeld:

ruby poortscanner.rb 192.168.1.1 1 100

Verbeteringen en Uitbreidingen

Nu je een basis poortscanner hebt, zijn hier enkele ideeën voor verbeteringen en uitbreidingen:

  • Multithreading: Maak gebruik van Ruby's threading om meerdere poorten tegelijk te scannen, wat de snelheid van je scanner kan verhogen.
  • Protocolkeuze: Voeg de mogelijkheid toe om te kiezen tussen TCP en UDP.
  • Resultaten opslaan: Sla de resultaten van je scans op in een bestand voor latere analyse.
  • GUI: Bouw een grafische gebruikersinterface voor je scanner om het gebruik te vergemakkelijken.

Conclusie

In dit artikel hebben we een eenvoudige poortscanner gebouwd in Ruby. We hebben de basisprincipes van netwerken besproken, de structuur van de code uitgelegd en enkele ideeën voor verbeteringen gegeven. Het bouwen van een poortscanner is een geweldige manier om je programmeervaardigheden te verbeteren en meer te leren over netwerken. Vergeet niet om altijd ethisch te handelen en alleen netwerken te scannen waarvoor je toestemming hebt.

Veel succes met je programmeerprojecten en blijf leren!

Published: August 12, 2024

© 2024 RailsInsights. All rights reserved.