Rails Insights

Creu Sganwr Porth yn Ruby

Mae sganwyr porth yn offeryn pwysig ar gyfer unrhyw ddatblygwr neu arbenigwr diogelwch sy'n dymuno archwilio rhwydweithiau a gwasanaethau. Mae'r erthygl hon yn eich tywys trwy'r broses o greu sganwr porth syml yn Ruby, gan ei gwneud yn hawdd i ddechreuwyr ddeall y cysyniadau sylfaenol. Byddwn yn edrych ar sut i ddefnyddio Ruby i sganio porthau ar gyfrifiaduron penodol, gan gynnwys codau a phrosesau cam wrth gam.

Beth yw Sganwr Porth?

Mae sganwr porth yn offeryn sy'n archwilio porthau ar gyfrifiaduron neu rwydweithiau. Mae'n caniatáu i ddefnyddwyr wirio pa borthau sy'n agored a phryd y gallant dderbyn cysylltiadau. Mae hyn yn ddefnyddiol ar gyfer:

  • Archwilio diogelwch rhwydwaith
  • Adnabod gwasanaethau sy'n rhedeg ar gyfrifiaduron
  • Diagnostigio problemau cysylltedd

Paratoi'r Amgylchedd

Felly, cyn i ni ddechrau, mae angen i chi sicrhau bod Ruby wedi'i osod ar eich system. Gallwch wirio a yw Ruby wedi'i osod trwy redeg y gorchymyn canlynol yn eich terminal:

ruby -v

Os nad yw Ruby wedi'i osod, gallwch ei lawrlwytho o safle swyddogol Ruby.

Creu Sganwr Porth Sylfaenol

Nawr, gadewch i ni greu sganwr porth sylfaenol. Byddwn yn defnyddio'r gem 'socket' sydd eisoes yn rhan o Ruby. Mae'r gem hon yn caniatáu i ni greu cysylltiadau rhwydwaith.

Cam 1: Creu Ffeil Ruby

Creuwch ffeil newydd o'r enw port_scanner.rb yn eich golygydd testun. Yna, ychwanegwch y cod canlynol:

require 'socket'

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

  begin
    socket.connect(remote_addr)
    puts "Porth #{port} ar #{ip} yn agored."
  rescue Errno::ECONNREFUSED
    puts "Porth #{port} ar #{ip} yn gaeedig."
  ensure
    socket.close
  end
end

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

ip_address = ARGV[0] || '127.0.0.1'
ports_to_scan = (1..1024).to_a

scan_ports(ip_address, ports_to_scan)

Cam 2: Deall y Cod

Mae'r cod uchod yn cynnwys tri phrif swyddogaeth:

  • scan_port: Mae'r swyddogaeth hon yn ceisio cysylltu â phorth penodol ar IP penodol. Os yw'r cysylltiad yn llwyddiannus, bydd yn hysbysu bod y porth yn agored; os na, bydd yn hysbysu bod y porth yn gaeedig.
  • scan_ports: Mae'r swyddogaeth hon yn derbyn rhestr o borthau a'i phasio i'r swyddogaeth scan_port.
  • ip_address: Mae'r IP a fydd yn cael ei sganio yn cael ei ddarparu trwy'r llinell orchymyn. Os na chaiff ei ddarparu, bydd yn defnyddio '127.0.0.1' (y cyfrifiadur lleol).

Cam 3: Rhedeg y Sganwr

Ar ôl i chi ychwanegu'r cod, gallwch redeg y sganwr trwy'r gorchymyn canlynol yn eich terminal:

ruby port_scanner.rb 192.168.1.1

Mae '192.168.1.1' yn enghraifft o IP. Gallwch ei newid i unrhyw IP arall y dymunwch ei sganio.

Ychwanegu Gwelliannau

Mae'r sganwr porth sylfaenol hwn yn gweithio, ond gallwn ei wella ymhellach. Dyma rai syniadau ar gyfer gwelliannau:

  • Gweithredu Paralleliad: Gallwch ddefnyddio threaed i sganio porthau yn gyflymach.
  • Gosod Gwybodaeth: Gallwch ychwanegu gwybodaeth am y gwasanaethau sy'n rhedeg ar y porthau agored.
  • Gwybodaeth am y Porth: Gallwch ychwanegu cod i ddangos pa fath o borth yw pob un (HTTP, FTP, etc.).

Gweithredu Paralleliad

Dyma sut y gallwn ychwanegu gweithredu paralleliad i'n sganwr porth. Byddwn yn defnyddio'r gem 'thread' sydd ar gael yn Ruby:

require 'socket'
require 'thread'

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

  begin
    socket.connect(remote_addr)
    puts "Porth #{port} ar #{ip} yn agored."
  rescue Errno::ECONNREFUSED
    puts "Porth #{port} ar #{ip} yn gaeedig."
  ensure
    socket.close
  end
end

def scan_ports(ip, ports)
  threads = []
  ports.each do |port|
    threads << Thread.new { scan_port(ip, port) }
  end
  threads.each(&:join)
end

ip_address = ARGV[0] || '127.0.0.1'
ports_to_scan = (1..1024).to_a

scan_ports(ip_address, ports_to_scan)

Gyda'r gwelliant hwn, bydd y sganwr yn sganio porthau yn gyflymach gan ddefnyddio threaed.

Casgliad

Mae creu sganwr porth yn Ruby yn broses syml sy'n cynnig llawer o gyfleoedd i ddysgu am raglennu rhwydwaith a diogelwch. Mae'r cod a'r syniadau a gyflwynwyd yn yr erthygl hon yn cynnig sylfaen dda i ddechreuwyr. Gallwch barhau i ehangu ar y sganwr hwn trwy ychwanegu mwy o nodweddion a gwelliannau.

Gobeithio bod yr erthygl hon wedi bod yn ddefnyddiol ac yn hwyliog i chi. Peidiwch ag oedi cyn dechrau ar eich sganwr porth eich hun!

Published: August 12, 2024

© 2024 RailsInsights. All rights reserved.