Módulo Ping
El módulo ping proporciona funciones para probar la conectividad de red mediante ICMP, TCP y DNS. Este módulo es útil para el monitoreo de disponibilidad, diagnóstico de problemas de red y medición de latencia en entornos de producción.
Características principales:
-
Soporte para ping ICMP (IPv4 y IPv6)
-
Pruebas de puerto TCP
-
Configuración flexible de parámetros
-
Resolución DNS automática
-
Timeout configurable
Funciones Disponibles
Sección titulada «Funciones Disponibles»1. ping.up([host], [count], [data_size], [timeout], [interval_ms])
Sección titulada «1. ping.up([host], [count], [data_size], [timeout], [interval_ms])»Comprueba si un host es accesible mediante ping ICMP.
Parámetros:
Sección titulada «Parámetros:»-
host (opcional, string): Dirección del host o nombre de dominio (ej: “google.com”, “192.168.1.1”)
-
count (opcional, número, por defecto:
params.icmpUpNumPacketso 3): Número de intentos de ping -
data_size (opcional, número, por defecto: 24): Tamaño del paquete de datos en bytes
-
timeout (opcional, número, por defecto:
params.icmpUpTimeouto 2): Timeout en segundos para cada intento -
interval_ms (opcional, número, por defecto:
params.icmpUpIntervalo 100): Intervalo entre intentos en milisegundos -
Si
hostno se proporciona, usaparams.address -
Si
countno se proporciona, usaparams.icmpUpNumPackets -
Si
timeoutno se proporciona, usaparams.icmpUpTimeout -
Si
interval_msno se proporciona, usaparams.icmpUpInterval
Retorno:
Sección titulada «Retorno:»- boolean:
truesi al menos un ping fue exitoso,falseen caso contrario
Ejemplo de Uso:
Sección titulada «Ejemplo de Uso:»-- Comprobar si un host es accesiblelocal acessivel = ping.up("google.com")-- acessivel = true (si responde al ping)
-- Comprobar con parámetros personalizadoslocal resultado = ping.up("servidor.local", 5, 32, 5, 200)-- 5 intentos, paquetes de 32 bytes, timeout de 5s, intervalo de 200ms
-- Probar dirección IPv6local ipv6_ok = ping.up("2001:4860:4860::8888")-- Prueba conectividad IPv6 con Google DNS
-- Comprobar múltiples hostslocal hosts = {"router.local", "192.168.1.1", "8.8.8.8"}for _, host in ipairs(hosts) do if ping.up(host) then print(host .. " está online") else print(host .. " está offline") endend2. ping.send([host], [count], [data_size], [timeout], [interval_ms])
Sección titulada «2. ping.send([host], [count], [data_size], [timeout], [interval_ms])»Mide la latencia de ping ICMP hacia un host.
Parámetros:
Sección titulada «Parámetros:»-
host (opcional,string): Dirección del host o nombre de dominio
-
count (opcional, número, por defecto:
params.icmpTimeNumPacketso 3): Número de intentos de ping -
data_size (opcional, número, por defecto: 24): Tamaño del paquete de datos en bytes
-
timeout (opcional, número, por defecto:
params.icmpTimeTimeouto 2): Timeout en segundos para cada intento -
interval_ms (opcional, número, por defecto:
params.icmpTimeIntervalo 100): Intervalo entre intentos en milisegundos -
Si
hostno se proporciona, usaparams.address -
Si
countno se proporciona, usaparams.icmpTimeNumPackets -
Si
timeoutno se proporciona, usaparams.icmpTimeTimeout -
Si
interval_msno se proporciona, usaparams.icmpTimeInterval
Retorno:
Sección titulada «Retorno:»-
tuple:
(latencia, erro)donde:-
latencia (número o nil): Latencia media en milisegundos, o
nilsi falla -
erro (string o nil): Mensaje de error, o
nilsi tiene éxito
-
Ejemplo de Uso:
Sección titulada «Ejemplo de Uso:»-- Medir latencia básicalocal latencia, erro = ping.send("google.com")-- latencia = 25.3 (ejemplo), erro = nil
-- Medir con parámetros personalizadoslocal latencia, erro = ping.send("servidor.remoto", 10, 64, 5, 500)-- 10 intentos, paquetes de 64 bytes, timeout 5s, intervalo 500ms
-- Manejar resultadolocal latencia, erro = ping.send("host.inacessivel")if latencia then print("Latência: " .. latencia .. "ms")else print("Erro: " .. erro) -- erro = "ping failed" o mensaje específicoend
-- Comparar latencia entre múltiples hostslocal hosts = { "dns.google", "cloudflare-dns.com", "quad9.net"}
for _, host in ipairs(hosts) do local latencia, erro = ping.send(host, 5) if latencia then print(host .. ": " .. string.format("%.2f", latencia) .. "ms") endend3. ping.port(host, port, [count], [timeout])
Sección titulada «3. ping.port(host, port, [count], [timeout])»Prueba la conectividad a un puerto TCP específico.
Parámetros:
Sección titulada «Parámetros:»-
host (string): Dirección del host o nombre de dominio
-
port (número): Número del puerto TCP a probar
-
count (opcional, número, por defecto: 3): Número de intentos de conexión
-
timeout (opcional, número, por defecto: 2): Timeout en segundos para cada intento
Retorno:
Sección titulada «Retorno:»-
tuple:
(latencia, erro)donde:-
latencia (número o nil): Latencia media de conexión en milisegundos, o
nilsi falla -
erro (string o nil): Mensaje de error, o
nilsi tiene éxito
-
Ejemplo de Uso:
Sección titulada «Ejemplo de Uso:»-- Probar puerto HTTP por defectolocal latencia, erro = ping.port("google.com", 80)-- latencia = 45.2 (ejemplo), erro = nil
-- Probar puerto HTTPSlocal latencia, erro = ping.port("google.com", 443)if latencia then print("HTTPS acessível com latência: " .. latencia .. "ms")else print("HTTPS inacessível: " .. erro)end
-- Probar múltiples puertoslocal portas = {22, 80, 443, 3306, 5432}for _, porta in ipairs(portas) do local latencia, erro = ping.port("servidor.local", porta, 2, 3) if latencia then print("Porta " .. porta .. " aberta (" .. latencia .. "ms)") else print("Porta " .. porta .. " fechada ou inacessível") endend
-- Verificar servicio específicolocal function verificar_servico(host, porta, nome_servico) local latencia, erro = ping.port(host, porta) if latencia then log.info(nome_servico .. " OK (" .. latencia .. "ms)") return true else log.error(nome_servico .. " FALHA: " .. erro) return false endendInformación Adicional
Sección titulada «Información Adicional»Resolución DNS Automática
Sección titulada «Resolución DNS Automática»Todas las funciones realizan resolución DNS automáticamente:
-- Funciona con nombres de dominioping.up("google.com")ping.send("api.github.com")ping.port("servidor.local", 443)
-- Funciona con direcciones IPping.up("8.8.8.8")ping.send("192.168.1.1")ping.port("10.0.0.5", 22)Soporte para IPv4 e IPv6
Sección titulada «Soporte para IPv4 e IPv6»El módulo detecta automáticamente el tipo de dirección:
-- IPv4ping.up("8.8.8.8")
-- IPv6ping.up("2001:4860:4860::8888")
-- Nombre de dominio (resuelto a IPv4 o IPv6)ping.up("google.com")Timeout Configurable
Sección titulada «Timeout Configurable»Cada función permite configurar el timeout de forma individual:
-- Timeout corto para redes localesping.up("router.local", 3, 24, 1) -- 1 segundo
-- Timeout largo para redes con alta latenciaping.up("servidor.remoto", 3, 24, 10) -- 10 segundos
-- Timeout específico por puertoping.port("database.remoto", 5432, 3, 5) -- 5 segundos