En el mundo de la ciberseguridad y la administración de redes, un escáner de puertos es una herramienta esencial. Permite a los administradores de sistemas y a los profesionales de la seguridad identificar los puertos abiertos en un dispositivo, lo que puede ayudar a detectar vulnerabilidades. En este artículo, te guiaré a través del proceso de construcción de un escáner de puertos simple utilizando Ruby, un lenguaje de programación conocido por su simplicidad y elegancia.
Un escáner de puertos es una herramienta que se utiliza para enviar solicitudes a puertos específicos en un dispositivo y determinar si esos puertos están abiertos, cerrados o filtrados. Esto se puede hacer mediante el envío de paquetes TCP o UDP y analizando las respuestas. Los escáneres de puertos son utilizados comúnmente por administradores de red para asegurar que sus sistemas estén protegidos y por hackers éticos para identificar vulnerabilidades en sistemas.
Antes de comenzar a construir nuestro escáner de puertos, asegúrate de tener lo siguiente:
Para comenzar, abre tu terminal y crea un nuevo directorio para tu proyecto:
mkdir escaner_puertos cd escaner_puertos
Luego, crea un archivo Ruby donde escribirás tu código:
touch escaner.rb
A continuación, vamos a escribir el código para nuestro escáner de puertos. Abre el archivo escaner.rb
en tu editor de texto favorito y comienza a escribir el siguiente código:
require 'socket' def escanear_puertos(ip, puertos) puertos.each do |puerto| begin socket = Socket.new(:INET, :STREAM) socket.connect(Socket.sockaddr_in(puerto, ip)) puts "Puerto #{puerto} está abierto." rescue Errno::ECONNREFUSED puts "Puerto #{puerto} está cerrado." rescue Errno::ETIMEDOUT puts "Puerto #{puerto} está filtrado." ensure socket.close if socket end end end ip = ARGV[0] || '127.0.0.1' puertos = (1..1024).to_a escanear_puertos(ip, puertos)
Vamos a desglosar el código para entender cómo funciona:
require 'socket'
: Esta línea importa la biblioteca de sockets de Ruby, que nos permite crear conexiones de red.def escanear_puertos(ip, puertos)
: Aquí definimos una función que toma una dirección IP y un array de puertos como argumentos.puertos.each do |puerto|
: Iteramos sobre cada puerto en el array de puertos.socket = Socket.new(:INET, :STREAM)
: Creamos un nuevo socket utilizando el protocolo IPv4 y TCP.socket.connect(Socket.sockaddr_in(puerto, ip))
: Intentamos conectar el socket al puerto especificado en la dirección IP dada.puts "Puerto #{puerto} está abierto."
: Si la conexión es exitosa, imprimimos que el puerto está abierto.rescue Errno::ECONNREFUSED
: Capturamos la excepción si la conexión es rechazada, indicando que el puerto está cerrado.rescue Errno::ETIMEDOUT
: Capturamos la excepción si la conexión se agota, indicando que el puerto está filtrado.ensure
: Aseguramos que el socket se cierre después de cada intento, independientemente de si la conexión fue exitosa o no.Una vez que hayas escrito el código, es hora de ejecutarlo. En la terminal, navega al directorio donde guardaste escaner.rb
y ejecuta el siguiente comando:
ruby escaner.rb [IP]
Reemplaza [IP]
con la dirección IP que deseas escanear. Si no proporcionas una dirección IP, el escáner utilizará 127.0.0.1
(localhost) por defecto.
Si deseas escanear tu propia máquina, simplemente ejecuta:
ruby escaner.rb 127.0.0.1
El escáner comenzará a verificar los puertos del 1 al 1024 y te mostrará cuáles están abiertos, cerrados o filtrados.
El escáner que hemos construido es bastante básico, pero hay muchas maneras de mejorarlo. Aquí hay algunas ideas:
Es importante recordar que el escaneo de puertos puede ser considerado una actividad intrusiva. Asegúrate de tener permiso para escanear cualquier dispositivo que no sea de tu propiedad. El escaneo no autorizado puede ser ilegal y puede tener consecuencias graves.
En este artículo, hemos aprendido cómo construir un escáner de puertos simple en Ruby. Esta herramienta puede ser útil para administradores de sistemas y profesionales de la seguridad para identificar puertos abiertos y potenciales vulnerabilidades. Con un poco de creatividad, puedes expandir y mejorar este escáner para adaptarlo a tus necesidades específicas. ¡Feliz programación!
© 2024 RailsInsights. All rights reserved.