Re: [python-brasil] Conexao ativa

516 views
Skip to first unread message

Gustavo Henrique Cervi

unread,
Aug 26, 2005, 2:41:43 PM8/26/05
to python...@yahoogrupos.com.br
Tem vários jeitos de saber.
O mais comum é pingando o gateway de sua conexao (o gateway da conexão).

Você ainda pode monitorar o pppd de outras várias formas:

1. (popen) "cat /var/log/messages"
2. pelo pid do pppd
3. "ps -ex | grep pppd | wc -l" (deve retornar maior q 0)
4. "ifconfig | grep ppp0 | wc -l" (deve retornar maior q 0)

-Gustavo


Adriano Côrtes Vieira wrote:

>Boa tarde a todos,
>
>
>Gostaria de saber se existe alguma forma de utilizando o python eu
>descobrir se minha conexão com a internet ainda esta ativa ou
>desconectou. Isto por que estou utilizando o PPP on demand, mas quando
>cai a conexao (desconectado pelo provedor ) e tento abrir meu socket
>novamente da erro porque o pppd segura os pacotes tcp/ip, nao retornando
>o erro, isto porque ele esta tentando reconectar, mas o socket nao
>consegue atingir o destino e fica travando minha aplicação.
>
>
>Grato,
>
>
>
>
>

===============================================================

Antes de enviar sua mensagem dê uma lida em:

http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar

===============================================================

Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html


Gustavo Henrique Cervi

unread,
Aug 26, 2005, 3:49:06 PM8/26/05
to python...@yahoogrupos.com.br
Hmm, é.. se o pppd estiver ativo sempre, só funcionará o método "ping" e
monitorando o /var/log/messages
Voce pode ver no /var/log/messages que quando a linha cair ele vai dizer
algo como:

Connection terminated.
Connect time 47.6 minutes.
Sent 751735 bytes, received 13509887 bytes.

Você pode monitorar o arquivo /var/log/messages com o popen ou com o
próprio open, fazendo readline (não sei se funciona em python, em perl
funciona bem, já usei isso). Então se vc detectar a substring
"Connection terminated." dentro do readline, é pq a linha foi-se...

ficaria (em pseudocodigo) com open:

abre o /var/log/messages
vai atá o fim do arquivo
while 1:
readline nele
se achou a substring "terminated":
faça algo de útil
senao
aguarde 2 segundos para o proximo loop


com popen:

abre o 'tail -f /var/log/messages'
vai atá o fim do arquivo
while 1:
readline nele
se achou a substring "terminated":
faça algo de útil
senao
aguarde 2 segundos para o proximo loop


- Gustavo

Adriano Côrtes Vieira wrote:

>Ok Gustavo, vou dar uma olhada nestas formas, mas só mais um detalhe,
>usanso o "PPP on demand", mesmo que a conexao tenha caido e o pppd esta
>esparando para reconectar, estes testes vao ter o resultado conforme vc
>indicou?
>
>
> Gustavo Henrique Cervi escreveu:


>
>
>>Tem vários jeitos de saber.
>>O mais comum é pingando o gateway de sua conexao (o gateway da conexão).
>>
>>Você ainda pode monitorar o pppd de outras várias formas:
>>
>>1. (popen) "cat /var/log/messages"
>>2. pelo pid do pppd
>>3. "ps -ex | grep pppd | wc -l" (deve retornar maior q 0)
>>4. "ifconfig | grep ppp0 | wc -l" (deve retornar maior q 0)
>>
>>-Gustavo
>>
>>
>>
>>
>
>
> Adriano Côrtes Vieira

> Deltaway - Sis. de Trânsito e Tecno. Ltda.
> Engenheiro de Computação
> (62) 3548-1003

luiz

unread,
Aug 26, 2005, 5:30:41 PM8/26/05
to python...@yahoogrupos.com.br
Oi Adriano e pessoal da lista,

Mais uma forma que pode ser adaptada para o seu caso(testada no Linux e
Windows e funcionou até em VPN) :

import socket
from copy import *


def check_host(host='10.xxx.xxx.xxx'):
a=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
a.settimeout(.5)
b=a.connect_ex((host, 80))
retorno=copy(b)
return b

aí é só perguntar if check_host()


temos usado esta função com sucesso com o seguinte objetivo quando o
funcionário conecta seu 'notebook' na rede, informações são passadas
automaticamente para uma base central. foi testado e serve para
verificar se o serviço e porta estão ativos, mas indiretamente funciona
até quando retiramos o cabo da rede.

no começo pensamos em usar o ping mas percebemos que perderíamos a
portabilidade, pois percebemos que existem pings e pings - a resposta e
a passagem de parâmetros se mostravam diferentes no Linux e no windows

abraços a todos

Campos

Em Sex, 2005-08-26 às 14:09 -0300, Adriano Côrtes Vieira escreveu:
> Boa tarde a todos,
>
>
> Gostaria de saber se existe alguma forma de utilizando o python eu
> descobrir se minha conexão com a internet ainda esta ativa ou
> desconectou. Isto por que estou utilizando o PPP on demand, mas quando
> cai a conexao (desconectado pelo provedor ) e tento abrir meu socket
> novamente da erro porque o pppd segura os pacotes tcp/ip, nao retornando
> o erro, isto porque ele esta tentando reconectar, mas o socket nao
> consegue atingir o destino e fica travando minha aplicação.
>
>
> Grato,
>
>
>

--
Mensagem enviada de uma máquina rodando GNU/Linux
LinuxCounter #173502
Eu programo em PYTHON
Eu uso Mozilla

8>( Saia da sua pseudo 'zona-de-conforto' :>)

João Paulo Fernandes Farias

unread,
Aug 26, 2005, 7:01:46 PM8/26/05
to python...@yahoogrupos.com.br
Interessante essa abordagem.

Mas esse host='10.xxx....' funciona ou tem que ser um host real? Pelo
que entendi, você tenta conectar a um servidor web, daí pergunto: e se
o servidor web estiver off? Vai parecer que você não está conectado,
mesmo estando, certo?

Bom, assumindo essa abordagem de conectar a um servidor web, eu
sugeriria fazer uma lista com sites "confiáveis" e tentar conectar a,
pelo menos, 2 ou 3 deles, se conseguir conectar a pelo menos 1, então
a net tá ativa.

Adaptando teu código, ficaria algo como:

import socket

confiaveis = ['www.google.com', 'www.yahoo.com', 'www.bb.com.br']

def check_host():
global confiaveis
for host in confiaveis:
a=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
a.settimeout(.5)
try:
b=a.connect_ex((host, 80))
if b==0: #ok, conectado
return True
except:
pass
a.close()
return False

print check_host()

--
JP

Reply all
Reply to author
Forward
0 new messages