Está en la página 1de 7

Scapy es una biblioteca de Python para análisis de paquetes de red.

Permite crear,
enviar, capturar y analizar paquetes de red de una amplia gama de protocolos. Scapy
es una herramienta poderosa que puede ser utilizada para una variedad de propósitos,
como:

 Análisis de redes
 Seguridad informática
 Desarrollo de software de red

El código que hemos realizado es un script de Python que utiliza Scapy para realizar un
ping a una dirección IP de destino. El código funciona de la siguiente manera:

 Importa las bibliotecas necesarias: sys, time y scapy.


 Define una función llamada ping(), que es la función principal del script.
 En la función ping(), verifica si el número de argumentos es correcto. Si no es
correcto, imprime un mensaje de error y finaliza el script.
 Si el número de argumentos es correcto, obtiene la dirección IP de destino desde el
argumento.
 Luego, crea un paquete ICMP (ping) con la dirección IP de destino como destino.
 Guarda el tiempo de inicio en una variable.
 Envia el paquete ICMP y espera una respuesta.
 Si se recibe una respuesta, calcula el tiempo que tardó en llegar la respuesta.
 Imprime un mensaje con la información de la respuesta.
 Si no se recibe una respuesta, imprime un mensaje de error.

Importación de bibliotecas

El primer paso es importar las bibliotecas necesarias. En este caso, necesitamos


importar las bibliotecas sys, time y scapy.

Definición de la función ping()

La función ping() es la función principal del script. Esta función es responsable de crear
el paquete ICMP, enviarlo, esperar la respuesta y mostrar la información de la
respuesta.

Verificación de la cantidad de argumentos


La primera línea de la función ping() verifica si el número de argumentos es correcto. Si
el número de argumentos no es correcto, imprime un mensaje de error y finaliza el
script.

Obtención de la dirección IP de destino

La segunda línea de la función ping() obtiene la dirección IP de destino desde el


argumento.

Creación del paquete ICMP

La tercera línea de la función ping() crea un paquete ICMP (ping) con la dirección IP de
destino como destino.

Guardado del tiempo de inicio

La cuarta línea de la función ping() guarda el tiempo de inicio en una variable. Este
tiempo se utilizará para calcular el tiempo que tardó en llegar la respuesta.

Envío del paquete ICMP

La quinta línea de la función ping() envía el paquete ICMP.

Espera de la respuesta

La sexta línea de la función ping() espera una respuesta al paquete ICMP.

Cálculo del tiempo de respuesta

La séptima línea de la función ping() calcula el tiempo que tardó en llegar la respuesta.
Para ello, resta el tiempo de inicio del tiempo actual.

Impresión de la información de la respuesta

La octava línea de la función ping() imprime un mensaje con la información de la


respuesta. Si se recibió una respuesta, el mensaje incluirá la dirección IP de la máquina
que envió la respuesta y el tiempo que tardó en llegar la respuesta. Si no se recibió una
respuesta, el mensaje indicará que no se recibió respuesta.

Aquí tenemos el código que hemos utilizado:

import sys
import time
from scapy.all import sr1, IP, ICMP

def ping(destination_ip):
# Crear el paquete ICMP (ping)
packet = IP(dst=destination_ip) / ICMP()

# Guardar el tiempo de inicio


start_time = time.time()

# Enviar el paquete y esperar la respuesta


response = sr1(packet, timeout=2, verbose=0)

# Calcular el tiempo que tardó en recibir la respuesta


elapsed_time = time.time() - start_time

if response:
print(f"Respuesta recibida de {response.src} en {elapsed_time:.6f} segundos")
else:
print("No se recibió respuesta")

if __name__ == "__main__":
# Verificar la cantidad de argumentos
if len(sys.argv) != 2:
print("Uso: python ping.py <dirección_IP>")
sys.exit(1)

# Obtener la dirección IP de destino desde el argumento


destination_ip = sys.argv[1]
# Realizar el ping
ping(destination_ip)

Vamos a probar a realizar una prueba contra un servidor Ubuntu de prueba y vemos lo
que saldría:

Y si no recibiera respuesta saldría:

Y aquí comprobamos que no se pueden poner dos direcciones IP:

Importación de bibliotecas

El primer paso es importar las bibliotecas necesarias. En este caso, necesitamos


importar las bibliotecas paramiko y hashlib.

Definición de funciones

El script define dos funciones:

 execute_ssh_command(): Esta función ejecuta un comando en una máquina remota a


través de SSH.
 generate_md5_hash(): Esta función genera un hash MD5 de una palabra.

Ejecución de comandos SSH


La función execute_ssh_command() funciona de la siguiente manera:

1. Solicita al usuario que ingrese el comando a ejecutar en la máquina remota.


2. Crea un objeto paramiko.SSHClient().
3. Establece la política de claves host como paramiko.AutoAddPolicy().
4. Se conecta a la máquina remota con el nombre de usuario y la contraseña
especificados por el usuario.
5. Ejecuta el comando y obtiene el resultado.
6. Imprime el resultado del comando.
7. Cierra la conexión SSH.

La función generate_md5_hash() funciona de la siguiente manera:

1. Solicita al usuario que ingrese la palabra que desea hashear.


2. Calcula el hash MD5 de la palabra.
3. Imprime el hash MD5.

Este sería el código:

import paramiko
import hashlib

def execute_ssh_command(ip):
try:
# Solicitar comando al usuario
command = input("Ingrese el comando a ejecutar en la máquina remota: ")

# Conectar a la máquina remota


client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(ip, username='tu_usuario', password='tu_contraseña') #
Reemplaza 'tu_usuario' y 'tu_contraseña'
# Ejecutar comando y obtener resultado
stdin, stdout, stderr = client.exec_command(command)
result = stdout.read().decode('utf-8')

# Mostrar resultado
print(f"Resultado del comando en {ip}:\n{result}")

# Cerrar conexión SSH


client.close()

except Exception as e:
print(f"Error: {e}")

def generate_md5_hash():
# Solicitar palabra al usuario
word = input("Ingrese la palabra que desea hashear en MD5: ")

# Calcular el hash MD5


md5_hash = hashlib.md5(word.encode()).hexdigest()

# Mostrar el resultado
print(f"Hash MD5 de '{word}': {md5_hash}")

if __name__ == "__main__":
while True:
print("\nMenú:")
print("1. Ejecutar comando a través de SSH contra una máquina remota.")
print("2. Generar un hash MD5.")
print("3. Salir")

choice = input("Seleccione una opción (1, 2 o 3): ")

if choice == '1':
ip = input("Ingrese la dirección IP de la máquina remota: ")
execute_ssh_command(ip)
elif choice == '2':
generate_md5_hash()
elif choice == '3':
print("Saliendo del programa. ¡Hasta luego!")
break
else:
print("Opción no válida. Por favor, seleccione 1, 2 o 3.")
En esta captura se ve el funcionamiento del script con los resultados obtenidos:

También podría gustarte