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.