Rails Insights

Bygga en Port Scanner i Ruby

Att skapa en port scanner kan vara en utmärkt övning för att förbättra dina programmeringskunskaper och förstå nätverksprotokoll bättre. I denna artikel kommer vi att gå igenom hur man bygger en enkel port scanner i Ruby. Vi kommer att diskutera vad en port scanner är, hur den fungerar, och ge dig en steg-för-steg-guide för att skapa din egen. Låt oss dyka in!

Vad är en Port Scanner?

En port scanner är ett verktyg som används för att upptäcka öppna portar på en dator eller server. Genom att skanna dessa portar kan man få information om vilka tjänster som körs på en maskin och potentiellt identifiera säkerhetsrisker. Port scanning används ofta av systemadministratörer för att säkerställa att deras nätverk är säkra, men det kan också användas av illvilliga aktörer för att hitta sårbarheter.

Hur fungerar en Port Scanner?

En port scanner fungerar genom att skicka förfrågningar till specifika portar på en given IP-adress. Beroende på svaret från porten kan scannern avgöra om porten är öppen, stängd eller filtrerad. Här är de grundläggande stegen i hur en port scanner fungerar:

  1. Välj en IP-adress att skanna.
  2. Definiera ett intervall av portar att skanna.
  3. Skicka en förfrågan till varje port i intervallet.
  4. Analysera svaret för att avgöra portens status.

Förberedelser för att bygga en Port Scanner i Ruby

Innan vi börjar koda, se till att du har Ruby installerat på din dator. Du kan ladda ner Ruby från Ruby's officiella webbplats. När du har installerat Ruby kan du använda en textredigerare för att skriva din kod.

Skapa en ny Ruby-fil

Öppna din textredigerare och skapa en ny fil som heter port_scanner.rb. Detta kommer att vara din port scanner.

Steg-för-steg-guide för att bygga Port Scanner

1. Importera nödvändiga bibliotek

För att kunna skanna portar behöver vi använda Ruby's inbyggda socket-bibliotek. Lägg till följande kod i början av din fil:

require 'socket'

2. Definiera en metod för att skanna portar

Nu ska vi definiera en metod som kommer att skanna en specifik port. Denna metod kommer att ta en IP-adress och en port som argument och returnera om porten är öppen eller stängd.

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

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

3. Skapa en metod för att skanna ett intervall av portar

Nu ska vi skapa en metod som skannar ett intervall av portar. Denna metod kommer att använda vår tidigare definierade scan_port-metod.

def scan_ports(ip, start_port, end_port)
  (start_port..end_port).each do |port|
    if scan_port(ip, port)
      puts "Port #{port} är öppen."
    else
      puts "Port #{port} är stängd."
    end
  end
end

4. Huvudprogrammet

Nu ska vi sätta ihop allt i vårt huvudprogram. Vi kommer att be användaren om en IP-adress och ett portintervall att skanna.

puts "Ange IP-adress att skanna:"
ip = gets.chomp

puts "Ange startport:"
start_port = gets.chomp.to_i

puts "Ange slutport:"
end_port = gets.chomp.to_i

scan_ports(ip, start_port, end_port)

Fullständig kod för Port Scanner

Här är den fullständiga koden för vår port scanner:

require 'socket'

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

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

def scan_ports(ip, start_port, end_port)
  (start_port..end_port).each do |port|
    if scan_port(ip, port)
      puts "Port #{port} är öppen."
    else
      puts "Port #{port} är stängd."
    end
  end
end

puts "Ange IP-adress att skanna:"
ip = gets.chomp

puts "Ange startport:"
start_port = gets.chomp.to_i

puts "Ange slutport:"
end_port = gets.chomp.to_i

scan_ports(ip, start_port, end_port)

Testa din Port Scanner

För att testa din port scanner, öppna en terminal och navigera till den mapp där du har sparat port_scanner.rb. Kör följande kommando:

ruby port_scanner.rb

Följ instruktionerna i terminalen för att ange en IP-adress och ett portintervall. Du bör se resultaten av din port scanning i terminalen.

Avslutande tankar

Att bygga en port scanner i Ruby är en fantastisk övning för att lära sig mer om nätverksprogrammering och Ruby-syntax. Kom ihåg att använda din port scanner ansvarsfullt och endast på system som du har tillstånd att skanna. Med denna grundläggande scanner kan du nu börja utforska mer avancerade funktioner, som att lägga till fler protokoll eller skapa en GUI för din applikation.

Lycka till med ditt programmerande och ha kul med din nya port scanner!

Published: August 12, 2024

© 2024 RailsInsights. All rights reserved.