martes, 16 de julio de 2024

Escaneo de redes con nmap

En el mundo de la redes hay algunos programas imprescindibles para el escanear y descubrir puertos, para esto tenemos nmap.
Nmap es la abreviatura "Network Mapper" y esta diseñada para la exploración de redes y auditorias de seguridad, como si un radar de red se tratara, permitiendo tener una detallada de los dispositivos conectados, que servicios ofrecen y sus posibles vulnerabilidades.

Entre las funcionalidades de nmap destacan:
  • Identificar dispositivos: independientemente de si son ordenadores, servidores, router...
  • Escaneo de puertos: Detecta los puertos abiertos y los servicios que ejecutan (ssh, ftp, http..)
  • Identificar sistemas operativos: Determina el sistema operativo que utiliza cada dispositivo
  • Detectar versiones : Identifica la versión de los servicios que se ejecutan
  • Detectar vulnerabilidades: Al combinar todos los apartados anteriores podemos identificar potenciales puntos débiles de una red.


Debido a todas estas funcionalidades, nmap, es ampliamente utilizado para:
  • Administración de redes: Podemos inventariar redes, planificar actualizaciones o monitorear el tiempo de actividad de los servicios en ejecución.
  • Auditoria de seguridad: Identificando dispositivos expuestos detectando vulnerabilidades y tomar medidas de seguridad con respecto a la red.
  • Análisis de redes: Identificando firewalls y otros sistemas de seguridad.


Conceptos básicos antes de empezar con nmap:

Puerto de Red: Es el puerto donde se ejecutan los servicios.
Los puertos de una red pueden aparecer como:

  • open
    : El pueto esta listo para dar servicio TCP, datagramas UDP o asociaciones SCTP o el servicio ya esta en ejecución.
  • closed: El pueto esta cerrado, el servicio no esta activo.
  • wrapped: Hay un servicio real protegido.
  • filtered: En este estado no puede determinar si el puerto esta abierto por que hay un activado firewall dedicado o por software o reglas del enrutador. Esto ralentiza mucho el escaneo.
  • unfiltered: Sin filtrar, se puede acceder al puerto pero nmap n o puede determinar si esta abierto o cerrado. Se puede utilizar el escaneo Windows, SYN o FIN para determinar si el puerto esta abierto
  • open|filtered: Se muestran en este estado cuando no puede determinar si esta abierto o filtrado. Ocurre en escaneos puertos abiertos no dan respuesta. UDP, protocolo IP, FIN, NULL y Xmas clasifican los puertos de esta manera
  • closed|filtered: No se puede determinar si el puerto esta cerrado o filtrado.

Dirección IP: Es el identificador único de un dispositivo en una red. Esta compuesta por 4 números decimales separados por puntos: 192.168.0.100. Los valores para estos 4 números siempre estará comprendido entre 0 y 255.

Dirección MAC: Es el identificador único físico de un adaptador de red. A diferencia de una dirección IP, la dirección MAC esta grabada en el propio adaptador y no se puede cambiar. Identificando al fabricante y al lote que pertenece dentro de este mismo fabricante.

Máscara de red: Identifica la red de una IP. De esta manera un dispositivo puede saber si otros dispositivos están en la misma red o en otra red diferente.

Escaneo activo y escaneo pasivo::
  • Activo: Es un escaneo directo y preciso. Esto hace que su detección es más sencilla y puede ser más lento debido a las medidas de seguridad del equipo objetivo debido a un firewall, IDS, IBS, etc...
  • Pasivo: Es un escaneo más discreto, es decir menos intrusivo, pero también menos detallado.


Como se establece una conexión TCP/IP?:

Al proceso de conexión TCP/IP se le conoce como "handshake de tres vías". Con este proceso se asegura una conexión estable para la comunicación entre máquinas. Estos son los pasos que realiza:


  • Inicia la conexión (SYN): El dispositivo que inicia la conexión, cliente, envía un paquete SYN (synchronize) al dispositivo receptor, el servidor. Este paquete contiene el número de secuencia inical
  • Confirmación del servidor (SYN-ACK): El servidor recibe el paquete SYN y envía un paquete SYN-ACK (synchronize-acknowledge) al cliente confirmando la recepción del SYN y asignando su propio número de secuencia inicial.
  • Confirmación del clinete (ACK): El cliente recibe el paquete SYN-ACK y envía el paquete ACK (acknowledge) al servidor. Este paquete confirma la recepción del SYN-ACK y establece la conexión



Identificar equipos con nmap:
  • TCP SYN ping: Envía un paquete TCP vacío con el indicador SYN se pueden especificar puertos con el parametro -p

  • 
      # TCP SYN ping: 
      nmap -PS 192.168.1.80
      

  • TCP ACK ping: Envía un paquete ACK obligando a los equipos remotos a responder con RST revelanado su existencia en el proceso

  • 
      # TCP ACK ping: 
      nmap -PA 192.168.1.80
      

  • Ping UDP: Envía un paquete UDP a los puertos indicados. Al llegar a un puerto cerrado en la máquina destino debe generar a cambio un paquete de puerto ICMP inalcanzable, indicando que la maquina está activa. Suele ser muy útil para evitar firewalls y los filtros TCP

  • 
      # Ping UDP: (necesita sudo)
      nmap -PU 192.168.1.80
      

  • Ping por protocolo: Envía paquetes IP con el número de protocolo establecido en su encabezado IP. Busca respuestas utilizando el mismo protocolo que una prueba inalcanzable del protocolo ICMP que no es compatible con el destino. Cualquier respuesta indicara que la máquina está activa
  • 
      # Ping por protocolo: 
      nmap -PO 192.168.1.80
      

  • No hacer ping: Omite por completo el descubrimiento de equipos

  • 
      # No hacer ping: 
      nmap -PN 192.168.1.80
      


    Otas opciones de nmap:
  • -T: Con un valor de 0 a 5 siendo 0 más lento y 5 más rápido.
  • -p: Seguido de un valor o valores indica el puerto que se va a escanear. El valor puede ser único, ejem: -p 80, un conjunto serparado por comas -p 21,22,80. Por un rango 20-80.
  • -v: Incrementa la información que se muestra al realizar el escaneo.
  • -oN NOMBRE_ARCHIVO: Guarda la información del escaneo en un archivo de texto.
  • -oX NOMBRE_ARCHIVO.xml: Guarda la información del escaneo en un archivo en formato XML.
  • -V: Muestra las versiones de los servicios en ejecución.
  • -O: Muestra el sistema operativo de la máquina objetivo.




  • miércoles, 10 de julio de 2024

    Librería PyTermTk crea interfaces en terminal


    Buenas a todos! Hoy he descubierto una librería para Python que me ha dejado una espinita. Se llama PyTermTK y es una biblioteca que ofrece una gran variedad de características para crear TUIs (Terminar User Interfaces).
    Tiene un gran parecido a TKinter a la hora de diseñar una interfaz y vamos a ver como se instala y ver algunos de sus ejemplos.
    PyTermTK también tiene la opción para un diseñador de interfaces llamado ttkDesigner y veremos también como instalarlo y como usarlo.

    Instalación de la librería con pip3:
    
    
    # Instalación
    
    pip3 install pytermtk
    
    
    Que nos ofrece PyTermTk:
    • Fácilidad de uso con una API simple e intuitiva que la hace fácil de aprender y usar.
    • Potencia gracias a una amplia gama de widgets y funciones para crear TUIs complejas.
    • Flexibilidad para crear una variedad de aplicaciones, desde simples interfaces de línea de comandos hasta aplicaciones de escritorio completas.
    • Extensible ya permite agregar sus propias funciones y widgets.

    Gracias a estas funcionalidades de usar PyTermTk puedes crea TUIs atractivas y fáciles de usar que se pueden ejecutar en cualquier sistema operativo que tenga una terminal compatible. Además PyTermTk es una biblioteca liviana y eficiente que no consume muchos recursos de su sistema.



    Una de las cosas que más me ha gustado es que se puede usar incluso por ssh lo que hace que sea ideal para hacer programas más sencillos de usar para la terminal

    PyTermTk desde SSH

    PyTermTk desde Terminal en local




    ttkDesigner es una herramienta visual para diseñar interfaces de usuario de terminal (TUIs) utilizando la biblioteca pyTermTk. Permite crear TUIs de forma rápida y sencilla, sin necesidad de escribir código. 

    Instalación de ttkDesigner con pip3:
    
    
    # Instalación
    
    pip3 install --upgrade ttkdesigner
    
    
    Para usar ttkDesigner debes abrirlo desde tu terminal. Puedes hacerlo ejecutando el siguiente comando:
    
    
    # Ejecución de ttkDesigner
    
    ttkDesigner
    
    



    ttkDesigner


    Puedes encontrar toda la información sobre PyTermTk y ttkDesigner:

    pyTermTk: https://github.com/topics/pytermtk 

    ttkDesigner: https://github.com/ParthJadhav/Tkinter-Designer 

    theDumbPaintTool: h    ttps://github.com/topics/paint-tools 

    tlogg: https://github.com/dromara/TLog 

    ttkode: https://github.com/ceccopierangiolieugenio/ttkode





    lunes, 1 de julio de 2024

    Raspberry Pi 3 ventilador PWM

    Como estamos a Julio y se vienen 'las calores', es hora de refrigerar la Raspberry pi 3. Esta es una Raspberry que adquirí de segunda mano y viene sin ningún tipo de refrigeración y eso no es muy recomendable. Como le voy a dar varios usos (maquina arcade, probar SO etc) puede ser que tenerla sin un disipador no sea lo mejor. 

    Ya he encargado unos cuantos disipadores en una web chinesca, pero espero que sea valida para estos pequeños accesorios.

    También se me ocurrió ponerle un pequeño ventilador conectado a uno de los puertos GPIO de las Raspberry pi. Como los ventiladores son de 5V DC pero no tienen linea PWM, tenemos que crear un pequeño driver con un transistor que controle el PWM.

    Primero tenemos que saber cuales son las temperaturas aproximadas que alcanza el procesador. Investigando un poco he encontrado esta tabla, más o menos representativa:


    Temperaturas: Sin disipador Con disipador Disipador activo
    Sin carga: ~40ºC ~30ºC 25ºC - 30ºC
    Carga media: 50ºC - 60ºC 40ºC - 50ºC 30ºC - 40ºC
    Carga intensiva: 60ºC - 80ºC 50ºC - 70ºC 40ºC - 60ºC

    Tomando esta tabla como referencia crearemos unos perfiles y por último un perfil personalizado.

    También se puede añadir un DHT11 para tener una referencia de la temperatura ambiente, pero eso para otro momento, Por el momento nos vamos a centrar en el PWM 

    Programaremos en Python y usaremos las librerías RPi.GPIO para el control de los pines GPIO. La librería time para hacer una pausa antes de mostrar los datos y subprocess para capturar la salida de 'vcgencmd' donde nos mostrará el dato de measure_temp.  

    Con estos datos y con el perfil que tengamos seleccionado aplicara una velocidad u otra al ventilador.

    El programa completo se puede descargar desde Github

    En este punto ya tenemos la parte de programación. Ahora le toca el turno a la electrónica.

    Como queremos mover un ventilador, aunque pequeño, su carga es mucho más que los 15mA que puede entregar el pin de la Raspberry Pi. Para solucionar esto usaremos un transistor NPN como el BC548 una resistencia de 10Kohm y un diodo 1N4007

    Usaremos el siguiente diagrama:


    Una vez tenemos todo conectado tenemos que habilitar los pines de la Raspberry Pi. Tenemos un diagrama de los pines si en el terminal usamos el comando 'pinout'


    Este comando también nos dará información como el modelo, SoC, RAM, puertos USB y algunos parámetros más. Si necesitas más información sobre la placa podemos usar el comando 'raspinfo'

    Ahora solo falta que este programa se ejecute al iniciar la maquina. Esto es muy sencillo solo tenemos que añadir una linea en el 'crontab' ejecutando 'sudo crontab -e' que será la encargada de cargar el programa en el inicio del sistema. Añadiremos la siguiente linea:

    
      @reboot sleep 15; /usr/bin/python3 /home/ruta_del_archivo/pwm_fan_rpi3.py > /dev/null
      

    Lo podemos desglosar de la siguiente manera:
    • @reboot sleep 15; -> Iniciara el script cuando se reinicie la maquina y hayan pasado 15 segundos
    • /usr/bin/python3 -> Ruta donde se encuentra Python3
    • home/.../pwm_fan_rpi3.py -> ruta donde se encuentra el script de Python
    • > /dev/null -> mandamos la salida del programa a null
    Tengo que añadir que al intentar ejecutar el programa en el sistema RetroPie que tengo instalado este comando no me ha funcionado correctamente, he tenido que poner este:
      
    @reboot sleep 15 && python3 /home/pi/Ruta_del_archivo/pwm_fan_rpi3.py > /home/Ruta_para_log/cron.log 2>&1
    

    Por otro lado al cargar el programa me daba muchos errores de las librerías y la única solución que he encontrado es instalar las librerías con sudo. Haciendo esto todo ha funcionado perfectamente iniciando el ventilador al arrancar el sistema.

    Y bueno hasta aquí la parte de programación y teoría. Montaremos los componentes y probaremos que tal va el programa.

    Advertencia: 

    A partir de 80°C, la Raspberry Pi 3 comenzará a reducir su velocidad de reloj (thermal throttling) para protegerse del sobrecalentamiento. Esto puede afectar el rendimiento de la placa.

    Superar los 85°C durante un período prolongado puede dañar la Raspberry Pi 3.


    Fuente:

    domingo, 2 de junio de 2024

    ESP32 Micropython y Thonny IDE

    El ESP32 es un microcontrolador muy potente y versátil con módulos WiFi y Bluetooth integrados de bajo costo y alta potencia desarrollado por la compañía china Espressif
    Muy utilizado en el internet de las cosas, domótica, robótica y una amplia gama de proyectos y aplicaciones, sobre todo, si son aplicaciones que necesiten un bajo consumo de energía. 
    Es fácil de programar y cuenta con una gran comunidad a sus espaldas.
    Es el sucesor del más que famoso ESP8266 el cual es mono núcleo y no cuenta con comunicación bluetooth. En una de las cosas que si se parecen es en su bajo costo, se pueden encontrar desde unos 3€ aproximadamente.

    A día de hoy, en 2024, existen varias series y modelos del microcontrolador ESP32, cada uno con características y enfoques específicos pero en este articulo vamos a centrarnos en el modelo WROOM32.

    sábado, 9 de marzo de 2024

    Kdenlive, edita vídeo con código abierto

     Kdenlive es un editor de vídeo no lineal gratuito y de código abierto disponible para Linux, Windows y macOS. 

    Tengo que decir que el editor que utilizo para mis vídeo del canal de youtube y Kdenlive ha mejorado mucho con los años (no como mis vídeos jajaja). Al principio era muy fácil que se quedara colgado o que simplemente desapareciera la pantalla, esto ya no pasa. O es algo muy raro. También editar con un portátil con mas de 10 años tampoco era lo mejor. Para lo que lo uso a mi me va bien, y como todo, cuanto más tiempo de uso mejoramos nuestra curva de aprendizaje.

    Uno de los puntos fuertes de Kdenlive es que cuenta con una comunidad activa, comprometida y, generalmente, apasionada del software libre. Podemos tener información tanto en el foro oficial como en canales de Youtube tipo "Locos por Linux" o "Punto Edu".

    Aquí hay algunas de las características más destacables de Kdenlive:

    sábado, 2 de marzo de 2024

    WLED el mejor control para tus tiras LED


    WLED es un firmware de código abierto que te permite controlar tiras de LED digitales RGB con un microcontrolador ESP8266 o ESP32. Es una de las mejores alternativas a los controladores LED tradicionales, ya que ofrece una gran flexibilidad y personalización a través de una interfaz web intuitiva.

    Empecemos!

    Una tira de LED direccionable es un tipo de tira de LED que te permite controlar el color y el brillo de cada LED individual. La más popular es la denominada WS2812B y es la tira de led que he usado en varios proyectos con unos resultados totalmente satisfactorios. Uno de ellos es la iluminación para la caja del PC.