También podemos saber en cuántas líneas se repite un patrón utilizando la opción
ping.log se repite una vez, por tanto podemos saber que es un linux:
Ahora vamos a expresar esto con distintos colores para que quede muy bien; y de una forma mejorada:
#!/bin/bash rojo_luminoso='\033[1;31m' verde_luminoso='\033[1;32m' cyan_luminoso='\033[1;36m' sin_color='\033[0m' read -p "Introduce la dirección IP: " IP # Realizamos un ping al host y verificamos si el host es accesible if ping -c 1 $IP > /dev/null 2>&1; then echo "El host es accesible" # Obtenemos el valor del TTL TTL=$(ping -c 1 $IP | grep "ttl=" | awk '{print $6}' | tr -d "ttl=") echo "El TTL detectado es de $TTL" # Analizamos el valor del TTL para determinar el sistema operativo if [ $TTL -gt 60 ] && [ $TTL -lt 100 ]; then echo -e "${verde_luminoso}El sistema operativo es Linux/Unix ${sin_color}" #Aquí restauramos el color original. elif [ $TTL -gt 100 ] && [ $TTL -lt 170 ]; then echo -e "${cyan_luminoso}El sistema operativo es Windows ${sin_color}" else echo -e "${rojo_luminoso}No se puede determinar el sistema operativo con certeza ${sin_color}" fi else echo -e "${rojo_luminoso}El host no es accesible ${sin_color}" fi
Y este es el resultado:
También podemos convertir este mismo código en Python, utilizando la librería OS:
import os def detect_os(ip): # Ejecutar el comando ping response = os.system("ping -c 1 " + ip) if response == 0: # Obtener el valor del TTL ttl = os.popen("ping -c 1 " + ip + " | grep ttl | awk '{print $7}' | tr -d 'ttl='").read() ttl = int(ttl) # Analizar el valor del TTL para determinar el sistema operativo if ttl > 60 and ttl < 100: return "El sistema operativo es Linux/Unix" elif ttl > 100 and ttl < 170: return "El sistema operativo es Windows" else: return "No se puede determinar el sistema operativo con certeza" else: return "El host no es accesible" # Obtener la dirección IP ip = input("Introduce la dirección IP: ") # Detectar el sistema operativo os_name = detect_os(ip) # Imprimir el resultado print(os_name)