Cómo obtener un banner de puerto abierto en Python

En este artículo, veremos cómo obtener un banner de puerto abierto en Python. Aquí discutiremos 

¿Qué es Puerto?

Puerto es una terminología utilizada en las redes informáticas. Es posible que sepa que cada vez que se conecta a Internet, a su sistema o cualquier dispositivo al que se esté conectando se le asigna una dirección IP. Entonces, cuando busca algo en Internet, su dirección IP se envía al servidor donde reside su página o respuesta. Después de recibir una solicitud, el servidor devuelve la página deseada a su sistema. Ahora, suponga que ha abierto varias pestañas y ha ido a diferentes sitios web, como YouTube, Chrome, Amazon o cualquier otro sitio web. Luego aquí, cómo la computadora sabe qué solicitud es para qué pestaña, esto se hace con la ayuda de un número de puerto. Los puertos no son más que entidades lógicas utilizadas por nuestro sistema para realizar conexiones con la red. Hay rangos de puertos y cada puerto funciona para un trabajo en particular. El puerto va de 1 a 65535. Los puertos van del 49152 al 65535 y los utilizan los navegadores de los clientes. Entonces, cuando solicitas algo en la red, se asigna un número de puerto entre 49152 y 65535 y eso es único. Este número de puerto se puede reasignar nuevamente, una vez que se cierra la sesión.

¿Qué es Banner? 

Banner es la descripción que devuelve el servidor. Contiene una descripción del sistema host, como el tipo de software, la versión del sistema, etc. Este banner debe mantenerse oculto ya que los atacantes o piratas informáticos pueden usar este banner para atacar explotando cualquier bucle mientras usan la descripción del sistema. Y la captura de pancartas no es más que colocar la pancarta en un sistema en la red y la captura de pancartas es un delito si se practica sin el permiso requerido.

¿Qué es Puerto Abierto?

Los puertos están abiertos y cerrados. Si un puerto no está abierto, no podremos hacer una conexión entre dos sistemas. Entonces, cuando hacemos cualquier actividad en la red, los puertos requeridos están abiertos y, como resultado, obtenemos la respuesta en nuestro sistema. Ahora, después de discutir estas tres palabras clave, podrá comprender lo que realmente estamos tratando de hacer. Para obtener un banner de puerto abierto, usaremos un módulo de socket. El socket es una forma de conectar dos Nodes en una red para comunicarse entre sí. Un Node escucha en un puerto particular en una IP, mientras que el otro socket se comunica con el otro para formar una conexión. El servidor forma el socket de escucha mientras el cliente se comunica con el servidor. 

Ejemplo 1

Primero, veamos cómo podemos ver qué puertos están abiertos para nuestro sistema para el que estamos usando subprocesos para un cálculo rápido. Podemos obtener la dirección IP del host local pasando la variable host a la función gethostbyname() del módulo de socket. Aquí AF_INET especifica que la dirección IP es IPV4 (Protocolo de Internet versión 4) y SOCKET_STREAM  especifica que es un socket TCP. A continuación, hemos establecido el estado = Falso, que será verdadero cada vez que hagamos una conexión. La función connect() se usa para hacer conexiones entre host_ip y puerto. 

Python3

import socket
import threading
import time
  
# function to scan ports and see which ports are open
def scan_port(port):
    # we will check port of localhost
    host = "localhost"
    host_ip = socket.gethostbyname(host)
      
    # print("host_ip = {}".format(host_ip))
    status = False
  
    # create instance of socket
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  
    # connecting the host ip address and port
    try:
        s.connect((host_ip, port))
        status = True
    except:
        status = False
  
    if status:
        print("port {} is open".format(port))
  
  
start_time = time.time()
  
for i in range(0, 100000):
    thread = threading.Thread(target=scan_port, args=[i])
    thread.start()
  
end_time = time.time()
print("To all scan all ports it took {} seconds".format(end_time-start_time))
How to Get Open Port Banner in Python

 

Ejemplo 2

Aquí puede ver que hemos agregado s.recv(1024).decode(). Esto significa que el socket devolverá el banner en 1024 bytes de tamaño de búfer y luego lo decodificaremos en una string. Ahora, para obtener banners en estos puertos abiertos, solo necesitamos agregar una línea más después de realizar la conexión, banner = s.recv(1024).decode().

Python3

import socket
import threading
import time
  
def scan_port(port):
    try:
        host = "localhost"
        host_ip = socket.gethostbyname(host)
        status = False
  
        # create instance of socket
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  
        # connecting the host ip address and port
        s.connect((host_ip, port))
        try:
            banner = s.recv(1024).decode()
            print("port {} is open with banner {}".format(port, banner))
  
        except:
            print("port {} is open ".format(port))
  
    except:
        pass
  
  
start_time = time.time()
  
for i in range(0, 100000):
    thread = threading.Thread(target=scan_port, args=[i])
    thread.start()
  
end_time = time.time()
print("To scan all ports it took {} seconds".format(end_time-start_time))

Producción:

How to Get Open Port Banner in Python

Podemos ver que el puerto 22 está abierto con su información de banner.

Publicación traducida automáticamente

Artículo escrito por preetimurmu8967 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *