Testando internet com lua 🌙

瀏覽次數:109 次
跳到第一則未讀訊息

Arion Deno

未讀,
2023年5月3日 上午10:56:112023/5/3
收件者:lua...@googlegroups.com
estou testando conexao com a internet nesse seguinte modo
-------------------------------------------------------------------------
--[[
Testa conexaocom a internet, , retorna true, com exito ou false emerro
]]
function testa_conexao()
--[[
testando conexao com a internet.
se passar da continuidade a execucao
]]
local net = io.popen("ping -c 5 -i 0.5 google.com.br")
local resposta = net:read("*a")
print(resposta)
end
----------------------------------------------------------------------
aparentemente funciona, mas a resposta bem assim:
_________________________________________
Testando conexao com a Internet
PING google.com.br (142.250.219.163) 56(84) bytes of data.
64 bytes from gru06s63-in-f3.1e100.net (142.250.219.163): icmp_seq=1 ttl=59 time=10.7 ms.


Como posso retorno true ou fakse??

Arion Deno

未讀,
2023年5月3日 上午11:35:002023/5/3
收件者:lua...@googlegroups.com
Terei que filtrar a string de saída 

Para obter a resposta?  Correto?

Ou existe uma solução melhor? Ou maís simples?
Obrigado pela ajuda.   

Caso ninguém saiba, não tem problema.   
Eu estou tentando fazer sem socket. Porque será executada num ambiente com suporte basico do sistema 

Gabriel Duarte

未讀,
2023年5月3日 中午12:03:322023/5/3
收件者:lua...@googlegroups.com

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para lua-br+un...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/lua-br/CALCf74BN4qyqNuPVqdG-p9yw9oDGuB_kQ2NS-9HgenOysvwh2g%40mail.gmail.com.

IgorFreire

未讀,
2023年5月3日 中午12:24:492023/5/3
收件者:lua...@googlegroups.com
eu trataria a string de resposta..pois quando nao tiver respondendo vai aparecer "esgotado tempo limite"

--

hrcerq

未讀,
2023年5月3日 晚上8:00:222023/5/3
收件者:lua...@googlegroups.com
Olá.

> Terei que filtrar a string de saída
>
> Para obter a resposta? Correto?
>

Sim, lamentavelmente terá. Você pode realizar uma busca pelo texto
usando string.match, e depois usando a negação. Por exemplo:

local resposta = net:read "a"
local status = not resposta:match "0 received"
-- true = com acesso, false = sem acesso

Note que essa solução é um pouco frágil pois ainda precisaria se
preocupar com as configurações de idioma onde for executado, e
possíveis mudanças na saída do ping, a depender da versão e
implementação do mesmo.

> Ou existe uma solução melhor? Ou maís simples?

Sem usar socket, as opções realmente ficam mais limitadas, embora você
possa pensar em outros programas além do ping que facilitem o
tratamento ou o tornem mais robusto. De todo modo, é bom ter em mente
que o io.popen não é uma função portável e algumas plataformas não
suportam.


--
Att,
@hrcerq

0/ ´ ° ` o ´ ° ` \0

Arion Deno

未讀,
2023年5月9日 上午10:40:192023/5/9
收件者:lua...@googlegroups.com
Conforme a sugestão de vcs. 

Eu filtrar a string.  
Recebia do ping. 

Eu fiz assim

_---------------------

If( string.find( str, "O% loss") ) then 
  print(" conexão com internet")

end

Caso maus alguém precise,  está aí. 

Obrigado a todos pelas sugestões.

Agora vou pra parte de expressão regular.

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para lua-br+un...@googlegroups.com.

Rodrigo Régio

未讀,
2023年5月9日 上午11:29:272023/5/9
收件者:lua...@googlegroups.com
Olá auro...@gmail.com e a todos,

Quase não comento aqui mas não pude ignorar isto, mas ai diz que se a pessoa tiver 1% de perda ela já não possui conexão com internet, acho que pode ocorrer de perder alguns pacotes e ter conexão (principalmente se dou um ping sem internet e durante habilitar) não sei como você está fazendo, mas se vc deixar o usuário um tempo pingando isto pode ocorrer (de ter uma porcentagem de perdido maior mesmo tendo internet)...

Só quis comentar isto. E acho que o ideal é limitar a somente um ping e verificar se recebeu...

Desculpe qualquer incomodo...

Rodrigo Régio
--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para lua-br+un...@googlegroups.com.

Arion Deno

未讀,
2023年5月9日 上午11:38:042023/5/9
收件者:lua...@googlegroups.com
Claro Rogério, qual seria a melhor forma de fazer. ?




Breno Ramalho Lemes

未讀,
2023年5月9日 晚上9:07:252023/5/9
收件者:lua...@googlegroups.com
Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> os.execute('true')
true exit 0
> os.execute('false')
nil exit 1
> os.execute('fping -c 1 -i 1 -q www.google.com.br 2> /dev/null')
true exit 0
> os.execute('fping -c 1 -i 1 -q www.google.com.br 2> /dev/null')
nil exit 2

Esse comando fping é bem mais interessante para usar em scripts, não precisa fazer parse na resposta. Mas isso depende se você pode ou não instalar o fping no sistema. O fping tem cerca de 43 KB e não possui nenhuma dependência (só a libc).

Quanto ao problema de qual o limite de perda de pacotes para considerar sem conexão não tem resposta pronta, você precisa decidir isso. Porque um pacote pode ser bem sucedido, mas ainda assim está sem conexão (como 95% de perda de pacotes, por exemplo). Depende de quanto tempo (quantos pacotes) você quer esperar para ter mais precisão, ou quanta precisão você quer abrir mão para ter uma resposta mais rápida.

No fping você pode usar o parâmetro -c para dizer quantos pacotes quer testar. E o parâmetro -i o tempo de espera entre um teste e outro (se especificar -c maior que 1). E o parâmetro -t é o tempo para esperar por cada resposta (timeout).


Arion Deno

未讀,
2023年5月10日 上午8:59:512023/5/10
收件者:lua...@googlegroups.com
Bem realmente, owue vcs falaram tem razão. Então eu fiz uns testes e debugar ali ou aqui.


Então eu escolhi a palavras.  "packet loss".  Pq quando deixo sem o cabo de rede.  

O ping retorna outra coisa.  

A ideia era só saber se tinha conexão ou não.  Para enviar os dados no servidor.


Mais tarde eu vou testar o framework lápis. 

Obrigado a todos que me responderam 

Denis Dos Santos Silva

未讀,
2023年5月13日 晚上8:41:032023/5/13
收件者:Lua BR
fiz um utilitario para simplificar;
apesar de haver diversos programas ping,tracert,... nao eh algo mto simples


tem o fonte, executavel e um exemplo usando io.popen()
retorna a string online/offline
retorna o codigo para usar com cygwin/msys: echo $? ou no windows echo %%errorlevel%%

espero que ajude.

Arion Deno

未讀,
2023年5月14日 下午4:12:422023/5/14
收件者:lua...@googlegroups.com
Muito obrigado Denis. Pela sugestão 



hrcerq

未讀,
2023年5月20日 下午3:23:382023/5/20
收件者:lua...@googlegroups.com
Boa tarde.

> *link do repositorio https://github.com/denisdemaisbr/internet_check*
>
> tem o fonte, executavel e um exemplo usando io.popen()
> retorna a string online/offline

Se me permite, gostaria de adicionar uma sugestão em cima dessa ideia.
Mantendo essa premissa de que a máquina onde o programa executará de
fato esteja rodando Windows, e que enviar um programa escrito em C
pré-compilado seja uma opção viável para o colega, poderíamos no lugar
de criar um programa executável e chamar via io.popen, usar a própria
API C de Lua para criar uma biblioteca compartilhada (uma DLL, no
contexto de Windows).

Ao colocar essa DLL (que no exemplo abaixo estou chamando de vinetlib)
no diretório CPATH (bibliotecas C de Lua) da máquina de destino, o
programa Lua estará habilitado a fazer o seguinte:

-- INICIO
vinetlib = require "vinetlib"
print(vinetlib.vinet()) --> true ou false
-- FIM

Ou seja, uma simples função chamada no programa Lua que retorna true
caso conectado e false, caso contrário. O código para gerar essa DLL
pode ser observado a seguir (pegando as ideias do exemplo que
apresentou no repositório do github):

/* INICIO */

#include <stdio.h>
#include <ctype.h>
#include <unistd.h>

#define VC_EXTRALEAN
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <wininet.h>

#include "lua.h"
#include "lauxlib.h"

static int vinet(lua_State *L)
{
DWORD flags;
int rc;
BOOL isConnected;

isConnected = InternetGetConnectedState(&flags, 0);
rc = (isConnected) ? 1 : 0;

lua_pushboolean(L, rc);

return 1;
}

static const struct luaL_Reg vinetlib[] = {
{ "vinet", vinet },
{ NULL, NULL }
};

int luaopen_vinetlib(lua_State *L)
{
luaL_newlib(L, vinetlib);
return 1;
}

/* FIM */

Ou seja, basicamente incluí os cabeçalhos lua.h e lauxlib.h de Lua e
substituí a função main pela função vinet (verifica internet), que usa
a pilha virtual para guardar um booleano retornado, e depois cadastrar
essa função vinet usando o registro vinetlib.

A instrução de compilação fica a encargo do usuário, pois dependerá do
compilador que escolher utilizar. Parti da premissa de que a importação
das bibliotecas Lua seriam relativas, mas se possuir Lua no sistema,
poderá fazer absoluto também, fica a critério.

Denis Dos Santos Silva

未讀,
2023年5月21日 清晨7:41:512023/5/21
收件者:Lua BR
legal!

tentei fazer da "menor forma possivel" pra funcionar com o io.popen().

vou add uma dll para lua-5.1, 5.2, 5.3, 5.4 (32-bit) para funcionar usando o require() 

o lado bom de colocar como uma dll eh que pode retornar mais informacao



hrcerq

未讀,
2023年5月21日 晚上8:22:392023/5/21
收件者:lua...@googlegroups.com
> *legal!*
>

Que bom que gostou da sugestão. :)

> tentei fazer da "menor forma possivel" pra funcionar com o io.popen().

Sim. Porém o problema de usar o io.popen() nesse caso é a necessidade
de tratar a saída, além de abrir um novo processo só pra fazer essa
verificação. Fazendo como uma biblioteca, já trata no mesmo processo.

>
> vou add uma dll para lua-5.1, 5.2, 5.3, 5.4 (32-bit) para funcionar usando
> o require()

Só precisa atentar que na versão 5.1 a biblioteca auxiliar não define a
função luaL_newlib [1]. Nesse caso, precisaria usar a luaL_register [2].

> o lado bom de colocar como uma dll eh que pode retornar mais informacao

Ou menos, se for o desejado, trazendo apenas aquilo que é necessário.
Além disso, poderá depois incluir outras funções C para interface com o
sistema operacional, e empacotar tudo numa biblioteca só, no lugar de
criar funções específicas pra cada coisa e ficar tratando em separado,
e criando um monte de subprocessos desnecessários.

[1] https://www.lua.org/manual/5.2/pt/manual.html#luaL_newlib
[2] https://www.lua.org/manual/5.1/pt/manual.html#luaL_register
> --
> Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
> Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para lua-br+un...@googlegroups.com.
> Para ver esta discussão na web, acesse https://groups.google.com/d/msgid/lua-br/56db3eda-b00f-4fc4-855f-2db3f68c2d09n%40googlegroups.com.
回覆所有人
回覆作者
轉寄
0 則新訊息