Executar ação ao conectar/desconectar [RESOLVIDO]

1. Executar ação ao conectar/desconectar [RESOLVIDO]

Tiago de Souza Ribeiro
TiagoSouza

(usa Arch Linux)

Enviado em 25/03/2012 - 18:53h

Olá, quero saber, sem tem algum modo em bash ou sh, de executar uma ação quando uma conexão for ativada, ou desativada. O que quero fazer é assim:
Quando a conexão eth0 conectar ou desconectar, reiniciar a ppp0 com "poff" e depois "pon", algo como:

OnInterface(eth0).up{
poff
sleep 5
pon
}
OnInterface(eth0).down{
poff
sleep 5
pon
}

Esse código ae encima, eu que inventei aqui, nem sei se existe isso em alguma linguagem, kkk, é só para entenderem como quero fazer em bash ou sh.

No aguardo, vlw!


  


2. MELHOR RESPOSTA

Lucas Doná Sfalcin
lucasdona

(usa Linux Mint)

Enviado em 29/03/2012 - 21:05h

Fala véiiiiii, esse script aqui vai resolver seu problema :-), coloquei comentários ao final das linhas para explicações. Espero que seja isso mesmo. Segue abaixo:






#!/bin/bash

#############################################################################################
###script para executar os comandos poff e pon toda vez que a eth0 conectar ou descoenctar###
#############################################################################################

#15 segundos pro sistema varregar opr completo, não sei se é necessário esse tempo todo, tem que testar
#sleep 15

ETH=$(ifconfig eth0 | grep "inet end" | wc -l) # 0 não está usando eth0, 1 está usando

#poff pon a primeira vez ŕa garantir
poff
pon

while true
do
ETH_TMP=$(ifconfig eth0 | grep "inet end" | wc -l) #quando conectar ou desconectar no eth0 vai entrar no if e executar poff pon

if ! [ $ETH -eq $ETH_TMP ] #se for igual ele não entra no if, pois o ! está negando, então, se a condição for verdadeira, virará falsa.
then
poff
pon
ETH=$ETH_TMP # igualar as variáveis para só entrar se mudar o estado da eth0 novamente
sleep 3 # pode colocar o tempo que quiser, até de 1 em 1 segundo não influenciará em nada no processamento
fi
sleep 3 # o mesmo que o outro sleep
done

Acho que vai funcionar 100%, executa na mão mesmo e monitora o comportamento dele, talvez tenha que dar uns sleeps depois de executar poff e pon, não sei.

3. Re: Executar ação ao conectar/desconectar [RESOLVIDO]

Lucas Doná Sfalcin
lucasdona

(usa Linux Mint)

Enviado em 25/03/2012 - 19:15h

um scrip pingando não serviria?
Exemplo:


#!/bin/bash

while true
do
if ! ping www.google.com.br
then
comando a ser executado
else
echo "conectado"
sleep5
fi
done

Se estiver conectado ele vai entrar no else, se desconectar vai entrar no if, aí voçê executa o comando.



4. Re: Executar ação ao conectar/desconectar [RESOLVIDO]

Tiago de Souza Ribeiro
TiagoSouza

(usa Arch Linux)

Enviado em 25/03/2012 - 19:37h

Olha, deixa eu explicar melhor:
Tenho uma conexão eth0, que é a da rede local aqui
Tenho uma conexão wlan0, que é a conexão com internet
E tenho uma conexão ppp0, que é pppoe sobre wireless com mikrotik
A ppp0 é compartilhada com a conexão local na eth0 pelo iptables.
Eu coloquei a ppp0 para ser ativada automaticamente na inicialização do ubuntu, para que eu não precise autenticar hotspot, do mikrotik, na wlan0 (autentificação no navegador), funciona beleza, mas sempre que a eth0 conecta, ou desconecta, o ubuntu para de usar a ppp0 e fica usando a wlan0, ae a navegação para, pois surge a autentificação no navegador, ae tenho que desativar a pppoe e ativar dnv com "poff" e "pon", e só queria deixar isso automatizado :D. Outro motivo pelo qual quero usar a ppp0, é que a conexão por pppoe aqui é mais estável e rápida, ae não quero usar a wlan0.

Pelo que observei nesse método ae lucasdona, ele vai executar um comando quando conseguir pingar o google, e nesse caso seria quando a ppp0 estivesse ativa ou wlan0 autenticada, e não é isso que eu procuro :s


5. Re: Executar ação ao conectar/desconectar [RESOLVIDO]

Lucas Doná Sfalcin
lucasdona

(usa Linux Mint)

Enviado em 25/03/2012 - 20:09h

Meio complicado isso, mas, se você ficasse verificando se o ip da interface existe, se existe é porque ta conectado naquela interface (eth0 ou wlan0), como o comando abaixo vc consegue obter o ip, não sei se irá ajudar em alguma coisa.

ifconfig eth0 | grep "inet end" | awk '{print $3}'
ifconfig wlan0 | grep "inet end" | awk '{print $3}'

Sei lá, vc pode gravar este ip em uma variável, daí da pra saber em qual interface de rede está conectado.

IP_eth0=$(ifconfig eth0 | grep "inet end" | awk '{print $3}')
IP_WLAN0=$(ifconfig wlan0 | grep "inet end" | awk '{print $3}')

Daí, você faz as verificações que quer fazer.


6. Re: Executar ação ao conectar/desconectar [RESOLVIDO]

Tiago de Souza Ribeiro
TiagoSouza

(usa Arch Linux)

Enviado em 25/03/2012 - 20:35h

Ah, se eu tivesse o script para fazer o que estou querendo, como eu faria para ele ser executado automaticamente? Adicionar na inicialização do ubuntu, vai executá-lo apenas uma vez, no começo, e pronto... :s

Ah, fiz esse script, que está no arquivo /etc/link-check que é chamado no rc.local:

while true; do
if ! [ "`ping -c 1 172.16.113.1`" ]; then
sleep 5
else
poff
pon
sleep 5
fi
done


Ele pinga o gateway da wlan0 a cada 5 segundos, se conseguir pingar, quer dizer que a ppp0 não está sendo usada, e sim a wlan0, ae ele reinicia a conexão pppoe com "poff" e "pon". (não é possível pingar nada na faixa 172.16.113.0/24 quando está usando a ppp0).
Ele está certo?
Eu queria um jeito que reiniciasse a conexão ppp0 imediatamente quando a eth0 fosse ativada ou desativada, mas não achei nada que fizesse isso :(

Edit: Testei agora esse método meu ae, não funciona, fica desconectando e conectando na ppp0 a cada 5 segundos, e olha que nem está dando para pingar 172.16.113.1 :(
Alguém pode ajudar?


7. Re: Executar ação ao conectar/desconectar [RESOLVIDO]

Lucas Doná Sfalcin
lucasdona

(usa Linux Mint)

Enviado em 26/03/2012 - 20:22h

Pode colocá-lo para iniciar em /etc/rc.local
Assim seu script iniciará como root, mas iniciando por este caminho não é possível iniciar mensagens gráficas nem aplicação gráfica. Exemplo do zenity, se rodar um script que mostra uma mensagem gráfica na tela usando o zenity ela não aparecerá, mas eu uso muito o /etc/rc.local para scripts rodarem em background.

O script não será executado só uma vez e pronto, ele está dentro de um "while true" então ficará rodando o tempo todo, basta vv colocar a repetição dentro do while true.


8. Re: Executar ação ao conectar/desconectar [RESOLVIDO]

Lucas Doná Sfalcin
lucasdona

(usa Linux Mint)

Enviado em 26/03/2012 - 20:35h

Tenta assim:

if ! ping -c 2 172.16.113.1
then
sleep 5
else
poff
pon
sleep 5
fi
done

O ping do if fica escrito limpo, sem aspa dupla nem simples e nem colchetes tmb.
Esse ip ai existe? vc consegue dar ping nele? porque se não ele irá entrar no if mesmo e realizar os comandos.
Uma forma de matar imediatamente o ppp0, pode ser feita assim:
ifconfig ppp0 down
ou
killall pppd

Tenta matar o ppp0 utilizando as duas formas para ver qual é a melhor.
Abraços.


9. Re: Executar ação ao conectar/desconectar [RESOLVIDO]

Lucas Doná Sfalcin
lucasdona

(usa Linux Mint)

Enviado em 26/03/2012 - 20:43h

Testa ele manualmente, sem ser na inicialização do sistema, mas, caso queira saber como foi a execução dele, mesmo ele sendo rodado em background vc pode fazer o seguinte onde ele é inicializado.

script.sh 1>> /home/usuario/script.log 2>&1 &

A linha acima grava toda a execução do script.sh no arquivo script.log na pasta /home/usuario. O "&" é para a linha rodar e dar continuidade a execução do sistema, isso no caso de estar rodando no rc.local.


10. Re: Executar ação ao conectar/desconectar [RESOLVIDO]

Tiago de Souza Ribeiro
TiagoSouza

(usa Arch Linux)

Enviado em 27/03/2012 - 08:14h

lucasdona escreveu:

Tenta assim:

if ! ping -c 2 172.16.113.1
then
sleep 5
else
poff
pon
sleep 5
fi
done

O ping do if fica escrito limpo, sem aspa dupla nem simples e nem colchetes tmb.
Esse ip ai existe? vc consegue dar ping nele? porque se não ele irá entrar no if mesmo e realizar os comandos.
Uma forma de matar imediatamente o ppp0, pode ser feita assim:
ifconfig ppp0 down
ou
killall pppd

Tenta matar o ppp0 utilizando as duas formas para ver qual é a melhor.
Abraços.


Olá, quando chegar em casa vou testar esses métodos seus. E sim, o ip existe, é o gateway da wlan0, mas é pingável apenas quando o ubuntu está usando apenas a wlan0 (172.16.113.xx), quando a ppp0 está em uso, o ping fica sem resposta, por estar em outra faixa de ip (10.10.113.xx) com gateway 10.10.113.254, esse foi o método que encontrei para verificar se está ou não usando a ppp0, se conseguir pingar o gateway, está usando a wlan0, se não conseguir, está usando a ppp0. Ah, ficar mandando ping de 5 em 5 segundos, não vai usar muita cpu não? CPU aqui é apenas um Celeron 430 1.8Ghz, que chega em 100% de uso com muita facilidade :(

E lucasdona: o meu que postei ae, eu já havia testado e ficava reiniciando a ppp0 sempre que fazia o else, e nem era possível pingar o gateway da wlan0, isso que é estranho :s Mas vou tentar o outro método ae :p


11. Re: Executar ação ao conectar/desconectar [RESOLVIDO]

Lucas Doná Sfalcin
lucasdona

(usa Linux Mint)

Enviado em 27/03/2012 - 22:00h

Você quer ativar o ppp0 se a wlan estiver ativa? mas ai vc não ficaria com 2 conexões ativas? mas vamos lá, se vc estiver conectado na wlan, aparecerá uma linha como essa abaixo

inet end.: 192.168.1.2 Bcast:192.168.1.255 Masc:255.255.255.0

Se não estiver conectado na wlan, essa linha não existirá, então, se for esse mesmo o caso, você nem precisa de fazer ping (gasta conexão e demora a dar retorno), vc pode verificar por essa linha no if mesmo, vou citar um exemplo:

if [ $(ifconfig wlan0 | grep "inet end" | wc -l) -eq 1 ]
then
echo "esta conectado na wlan0"
else
echo "nao esta na wlan0"
fi

O ifconfig lista o wlan0, o grep filtra pela string que quero procurar e o wc -l retorna o numero de linhas que obteve como resultado, se for = 1, a linha existe, então vc está conectado através da wlan, se retornar 0, significa que vc não está utilizando a wlan. O $ serve para guardar aquilo tudo entre parenteses em uma variável, o -eq pergunta se é igual, então vc sempre terá if (1 = 1) ou if (1 = 0).


12. Re: Executar ação ao conectar/desconectar [RESOLVIDO]

Tiago de Souza Ribeiro
TiagoSouza

(usa Arch Linux)

Enviado em 28/03/2012 - 19:47h

lucasdona escreveu:

Você quer ativar o ppp0 se a wlan estiver ativa? mas ai vc não ficaria com 2 conexões ativas? mas vamos lá, se vc estiver conectado na wlan, aparecerá uma linha como essa abaixo

inet end.: 192.168.1.2 Bcast:192.168.1.255 Masc:255.255.255.0

Se não estiver conectado na wlan, essa linha não existirá, então, se for esse mesmo o caso, você nem precisa de fazer ping (gasta conexão e demora a dar retorno), vc pode verificar por essa linha no if mesmo, vou citar um exemplo:

if [ $(ifconfig wlan0 | grep "inet end" | wc -l) -eq 1 ]
then
echo "esta conectado na wlan0"
else
echo "nao esta na wlan0"
fi

O ifconfig lista o wlan0, o grep filtra pela string que quero procurar e o wc -l retorna o numero de linhas que obteve como resultado, se for = 1, a linha existe, então vc está conectado através da wlan, se retornar 0, significa que vc não está utilizando a wlan. O $ serve para guardar aquilo tudo entre parenteses em uma variável, o -eq pergunta se é igual, então vc sempre terá if (1 = 1) ou if (1 = 0).


Não, não é isso: olha, deixa eu explicar o caso denovo:
Tenho uma conexão wlan0, é por onde chega a conexão de internet, mas ela pede autenticação quando conecta, autenticação por uma página no navegador, do mikrotik.
Tenho uma conexão ppp0, que é pppoe sobre wireless mikrotik, que acessa a internet normalmente, até mais rápido e estável, encima da wlan0, a diferença, é que a autenticação é feita automaticamente quando se usa a ppp0.
Tenho uma conexão eth0, que é a conexão ethernet da rede local aqui, com a qual compartilho internet, na ppp0, porém, se eu estiver navegando no ubuntu, com a wlan0 e ppp0 conectadas normalmente, e a eth0 conectar ou desconectar, o ubuntu para de usar a ppp0 e muda para a wlan0, então a autenticação aparece, e o mesmo autenticando, o acesso fica um pouco lento, pq até meu provedor recomenda que se use a ppp0 para estabilizar uns problemas que eles tem, dá para voltar a usar a ppp0 desativando-a com "poff", e ativando novamente com "pon", mas queria deixar isso automatizado
Ae o que eu quero, um script, que: Ao detectar que a conexão eth0 conectou, ou então desconectou, execute os comandos "poff" e "pon" no mesmo instante.
Tentei fazer com ping, mas não deu certo, usando a seguinte maneira:
Qualquer ip na faixa 172.16.113.0/24 só é pingável quando o ubuntu está usando a wlan0 para navegar, pois a ppp0 está em outra faixa, 10.10.113.xx/32, então havia tentado um script que fica pingando o gateway da wlan0, 172.16.113.1, se conseguir pingar, quer dizer que o ubuntu está usando a wlan0 para navegar, ae executava os comandos "poff" e "pon" que reinciavam a conexão pppoe, e o ubuntu voltava a usá-la. Porém, eu quero uma forma mais rápida, que detecte o momento exato que a eth0 conectar ou desconectar, para aí sim executar os comandos para reiniciar a pppoe, e outra coisa, que meu provedor mudou umas coisas, e para ao menos conseguir pingar o gateway, tem que já estar autenticado no navegador, senão, mesmo não usando a ppp0, não ia conseguir pingar, e iria continuar do mesmo jeito.
Então, alguém conhece uma forma de detectar o momento exato que uma conexão é estabelecida?



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts