Módulo Ping
O módulo ping fornece funções para testar conectividade de rede através de ICMP, TCP e DNS. Este módulo é útil para monitoramento de disponibilidade, diagnóstico de problemas de rede e medição de latência em ambientes de produção.
Características principais:
-
Suporte a ICMP ping (IPv4 e IPv6)
-
Testes de porta TCP
-
Configuração flexível de parâmetros
-
Resolução DNS automática
-
Timeout configurável
Funções Disponíveis
Seção intitulada “Funções Disponíveis”1. ping.up([host], [count], [data_size], [timeout], [interval_ms])
Seção intitulada “1. ping.up([host], [count], [data_size], [timeout], [interval_ms])”Verifica se um host está acessível através de ping ICMP.
Parâmetros:
Seção intitulada “Parâmetros:”-
host (opcional, string): Endereço do host ou nome de domínio (ex: “google.com”, “192.168.1.1”)
-
count (opcional, número, padrão:
params.icmpUpNumPacketsou 3): Número de tentativas de ping -
data_size (opcional, número, padrão: 24): Tamanho do pacote de dados em bytes
-
timeout (opcional, número, padrão:
params.icmpUpTimeoutou 2): Timeout em segundos para cada tentativa -
interval_ms (opcional, número, padrão:
params.icmpUpIntervalou 100): Intervalo entre tentativas em milissegundos -
Se
hostnão for fornecido, usaparams.address -
Se
countnão for fornecido, usaparams.icmpUpNumPackets -
Se
timeoutnão for fornecido, usaparams.icmpUpTimeout -
Se
interval_msnão for fornecido, usaparams.icmpUpInterval
Retorno:
Seção intitulada “Retorno:”- boolean:
truese pelo menos um ping foi bem-sucedido,falsecaso contrário
Exemplo de Uso:
Seção intitulada “Exemplo de Uso:”-- Verificar se um host está acessívellocal acessivel = ping.up("google.com")-- acessivel = true (se responder ao ping)
-- Verificar com parâmetros personalizadoslocal resultado = ping.up("servidor.local", 5, 32, 5, 200)-- 5 tentativas, pacotes de 32 bytes, timeout de 5s, intervalo de 200ms
-- Testar endereço IPv6local ipv6_ok = ping.up("2001:4860:4860::8888")-- Testa conectividade IPv6 com Google DNS
-- Verificar múltiplos 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])
Seção intitulada “2. ping.send([host], [count], [data_size], [timeout], [interval_ms])”Mede a latência de ping ICMP para um host.
Parâmetros:
Seção intitulada “Parâmetros:”-
host (opcional,string): Endereço do host ou nome de domínio
-
count (opcional, número, padrão:
params.icmpTimeNumPacketsou 3): Número de tentativas de ping -
data_size (opcional, número, padrão: 24): Tamanho do pacote de dados em bytes
-
timeout (opcional, número, padrão:
params.icmpTimeTimeoutou 2): Timeout em segundos para cada tentativa -
interval_ms (opcional, número, padrão:
params.icmpTimeIntervalou 100): Intervalo entre tentativas em milissegundos -
Se
hostnão for fornecido, usaparams.address -
Se
countnão for fornecido, usaparams.icmpTimeNumPackets -
Se
timeoutnão for fornecido, usaparams.icmpTimeTimeout -
Se
interval_msnão for fornecido, usaparams.icmpTimeInterval
Retorno:
Seção intitulada “Retorno:”-
tuple:
(latencia, erro)onde:-
latencia (número ou nil): Latência média em milissegundos, ou
nilse falhar -
erro (string ou nil): Mensagem de erro, ou
nilse bem-sucedido
-
Exemplo de Uso:
Seção intitulada “Exemplo de Uso:”-- Medir latência básicalocal latencia, erro = ping.send("google.com")-- latencia = 25.3 (exemplo), erro = nil
-- Medir com parâmetros personalizadoslocal latencia, erro = ping.send("servidor.remoto", 10, 64, 5, 500)-- 10 tentativas, pacotes de 64 bytes, timeout 5s, intervalo 500ms
-- Tratar resultadolocal latencia, erro = ping.send("host.inacessivel")if latencia then print("Latência: " .. latencia .. "ms")else print("Erro: " .. erro) -- erro = "ping failed" ou mensagem específicaend
-- Comparar latência entre múltiplos 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])
Seção intitulada “3. ping.port(host, port, [count], [timeout])”Testa conectividade a uma porta TCP específica.
Parâmetros:
Seção intitulada “Parâmetros:”-
host (string): Endereço do host ou nome de domínio
-
port (número): Número da porta TCP a testar
-
count (opcional, número, padrão: 3): Número de tentativas de conexão
-
timeout (opcional, número, padrão: 2): Timeout em segundos para cada tentativa
Retorno:
Seção intitulada “Retorno:”-
tuple:
(latencia, erro)onde:-
latencia (número ou nil): Latência média de conexão em milissegundos, ou
nilse falhar -
erro (string ou nil): Mensagem de erro, ou
nilse bem-sucedido
-
Exemplo de Uso:
Seção intitulada “Exemplo de Uso:”-- Testar porta HTTP padrãolocal latencia, erro = ping.port("google.com", 80)-- latencia = 45.2 (exemplo), erro = nil
-- Testar porta 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
-- Testar múltiplas portaslocal 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 serviço 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 endendInformações Adicionais
Seção intitulada “Informações Adicionais”Resolução DNS Automática
Seção intitulada “Resolução DNS Automática”Todas as funções realizam resolução DNS automaticamente:
-- Funciona com nomes de domínioping.up("google.com")ping.send("api.github.com")ping.port("servidor.local", 443)
-- Funciona com endereços IPping.up("8.8.8.8")ping.send("192.168.1.1")ping.port("10.0.0.5", 22)Suporte a IPv4 e IPv6
Seção intitulada “Suporte a IPv4 e IPv6”O módulo detecta automaticamente o tipo de endereço:
-- IPv4ping.up("8.8.8.8")
-- IPv6ping.up("2001:4860:4860::8888")
-- Nome de domínio (resolvido para IPv4 ou IPv6)ping.up("google.com")Timeout Configurável
Seção intitulada “Timeout Configurável”Cada função permite configurar timeout individual:
-- Timeout curto para redes locaisping.up("router.local", 3, 24, 1) -- 1 segundo
-- Timeout longo para redes com alta latênciaping.up("servidor.remoto", 3, 24, 10) -- 10 segundos
-- Timeout específico por portaping.port("database.remoto", 5432, 3, 5) -- 5 segundos