Escanear Red Local
¿Qué es el TTL?
TTL significa «Time to Live» (tiempo de vida) y es un ajuste que determina el tiempo que el paquete es válidos y estara disponible en una red antes de que el router los borre.
Script en BASH
Este script realiza un ping a toda la red, excluyendo la direccion de red y broadcast.
#! /bin/bash
#creo un bucle que va del 1 al 254
for i in $(seq 1 254);do
#Una vez que ejecuto el binario ping redirijo la salida stdout y stderr a /dev/null
timeout 1 ping -c 1 192.168.1.$i 2>/dev/null 1>/dev/null
if [ $? -eq 0 ];then
echo -e "\nHOST [*]"
python3 wichOS.py 192.168.1.$i
fi
done
Script en Python
#! /bin/python3.9
#importo las librerias necesarias
#para usar expreciones regulares y buscar el ttl
import re
#para obtener la ip que ingrese el usuario por la consola o interprete
import sys
#para ejecutar procesos desde python .
import subprocess
#solo se permiten dos argumentos, el nombre la herramienta y la IP
if len(sys.argv) != 2:
print("[Uso] python3 {} <ip-address>".format(sys.argv[0]))
#termino la ejecucion.
sys.exit(1)
def get_ttl(ip):
#creo el proceso
ping = subprocess.Popen(["/usr/bin/ping -c 1 {}".format(ip),""], \
stdout = subprocess.PIPE, shell = True )
#ejecutor el proceso llamado ping y lo almaceno en una tupla dentro de ttl
ttl = ping.communicate()
#busco dentro de la tupla el ttl y lo retorno como un numero entero
ttl = int(re.findall(r'\d{1,3}',re.findall(r'ttl=\d{1,3}',\
ttl[0].decode('utf-8'))[0])[0])
return ttl
def get_os(ttl):
#dependiendo del numero de ttl informara si es una maquina Windows o Linux
if ttl > 0 and ttl <= 64:
return "LINUX"
elif ttl > 64 and ttl <= 128:
return "WINDOWS"
else:
return "NOT FOUND"
if __name__ == '__main__':
#la primera posicion es el nombre de la herramienta y el segundo es la ip
ip = sys.argv[1]
ttl = get_ttl(ip)
os = get_os(ttl)
print("ip => {}\nttl => {}\nos => {}".format(ip,ttl,os))
USO
Para utilizarlo solo se debe clonar el repositorio y darle permiso de ejecucion al script en bash.