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!
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.
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:
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.
Öppna din textredigerare och skapa en ny fil som heter port_scanner.rb
. Detta kommer att vara din port scanner.
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'
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
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
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)
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)
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.
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!
© 2024 RailsInsights. All rights reserved.