Pingi es una herramienta que sirve para realizar un ping a un host específico desarrollada en .Net. Va un poquito más allá de la herramienta ping convencional. Pingi es capaz de comprobar si un puerto TCP especifico está abierto, en caso afirmativo, da una respuesta válida.
Disclaimer
Ante todo aclarar que no soy un super experto en Redes. Intento informarme lo mejor que puedo y creo que mis experiencias quizás puedan servir a otros. Siéntete libre de mandarme un correo si ves caulquier tipo de errata 😊.
Contenido
Motivación
En mi trabajo gestionamos una amplia Red de dispositivos IP. En la mayoría de ocasiones el comando ping normal que viene con sistemas Windows o Linux, suelen ser suficientes para comprobar si un equipo responde (se comunica) en la Red o no lo hace. Ping es una utilidad de Red que viene en la gran mayoría de sistemas y que también sirve para comprobar la latencia de Red de un equipo específico (milisegundos que tarda en responder a una petición). En la mayoría de los casos ping es suficiente y no necesitarás nada más, pero en ciertas ocasiones me he encontrado con ciertas limitaciones:
- El dispositivo que quiero comprobar tiene capada la utilidad ping: Esto suele pasar mucho con equipos Windows modernos (Windows 11 p.e.), que, por defecto, no dejan entrar solicitudes ping (ICMP echo) a su sistema. Ping no responde a pesar de que el equipo se encuentra configurado y funcionando correctamente en la Red. Esto se puede solucionar configurando el cortafuegos del sistema.
- Algunos equipos no dan prioridad a la solicitud de echo ICMP utilizado por ping. Por mi experiencia he visto que muchos dispositivos no dan preferencia a los paquetes ICMP que utiliza ping para comprobar la comunicación de un dispositivo. Esto provoca que en ocasiones se genere un falso negativo. Sin embargo, estos equipos sí dan buena prioridad a otros puertos TCP, como por ejemplo http o ssh. Aquí es donde entra la particularidad de Pingi. Pingi permite comprobar que un puerto TCP especifico (80 para http p.e.) responda, por lo que ya no depende del protocolo ICMP. Además tambíen comprueba su latencia (milisegundos que tarda en responder).
Necesitaba una herramienta para auditar, aunque fuese de manera básica y rápida, si un equipo respondía independientemente de si este admitía ping o no, por eso creé Pingi.
También necesitaba registrar en un periodo largo de tiempo si el dispositivo dejaba de comunicar en algún momento.
Esto también se puede hacer con el comando ping del sistema, por ejemplo usando ping 192.168.1.1 -t > resultados.txt
Pingi puede crear un archivo de registro guardando solamente los cambios de estado, con fecha y hora incluidas. Al finalizar también muestra unas estadísticas sencillas, suficiente para mi caso. Ejemplo de archivo de salida usando protocolo ping:
[4/27/2024 12:43:31PM] Estado: Success Tiempo: 113ms Dirección: 192.168.1.64
[4/27/2024 12:43:42PM] Estado: TimedOut Tiempo: 3000ms. Dirección: 192.168.1.64
[4/27/2024 12:44:00PM] Estado: Success Tiempo: 239ms. Dirección: 192.168.1.64
[4/27/2024 12:44:05PM] Finalizado!
Estadisticas:
Aciertos: 13
Fallos: 5
72% a una media de 97ms.
Funcionamiento
El funcioamiento es bastante sencillo. Esto son los comandos que admite Pingi:
-h, --host Obligatorio. Indica el nombre de host remoto.
-o, --outputfile Archivo de salida donde se guardan los resultados
-p, --port Indica un puerto TCP específico, Pingi intentará comprobar si el puerto se encuentra abierto y lo considerará como "responde"
-n, --nodelay Indica si se tiene que enviar inmediatamente otro Ping despues de terminar otro.
--help Display this help screen.
--version Display version information.
Por ejemplo, si escribimos pingi -h 192.168.1.1 -o resultados.txt -p 443
resultados.txt
.
Siempre funciona de manera continua hasta que se para con CTRL+C
.
Argumento nodelay
El argumento nodelay es interesante para comprobar una conexión de manera más agresiba.
Este comando manda una petición inmediatamente después de terminar otra, sin esperar. Esto nos puede ayudar para notar de manera más evidente si un dispositivo tiene una conexión inestable.
En un dispositivo que funciona correctamente y tiene poca latencia, veremos como se generan un montón de respuestas por segundo manteniéndose de manera estable este comportamiento. En un dispositivo que tiene mucha latencia veremos como se generan registros muy rápido, luego se frena, sale algún error, etc.. el comportamiento es cambiante. Este comportamiento no es “la verdad absoluta” y podría cambiar dependiendo el equipo, la carga de trabajo que tenga, etc…
Obviamente es una manera muy básica para estresar/probar una conexión. Para esto deberíamos utilizar herramientas más avanzadas pero, al menos en mi caso, sirve para hacerme un foto rápida de como esta el asunto.
¿Donde puedo conseguir Pingi?
¡Sería genial que a alguien le resultara útil! 😊. Se puede conseguir en mi Github, acceso directo desde aquí.
¡Disfruten!