pinga em vários ips aplicar uma ação ao que não pingou [RESOLVIDO]

1. pinga em vários ips aplicar uma ação ao que não pingou [RESOLVIDO]

jose marciano de sousa brito
jmsb

(usa Outra)

Enviado em 19/08/2017 - 12:09h

pessoal tenho uma base de dados onde recebo ips em uma tabela quando usuário se conectar na rede wireless "portal captivia" preciso de ajuda de vcs pra desenvolver um script que fique pingando todos estes ips , se caso algum não ping , ele vai aplicar uma ação que sera remove da tabela ,lembrando que consigo importa da tabela via shell todos ips e colocando em arquivo.txt alinhado
então nesse caso já temos o aquivo com os ips.txt
segue o comando que uso pra exporta os ips pra arquivo .txt
mysql -D nome_do_banco -u user -psenha -e "select IP from liberacao INTO OUTFILE '/tmp/ipsping.txt'"

a ação que quero eu seja feita caso não ping e deleta o ip da tabela liberação do campo IP com seguinte comando

mysql -D banco -u user -psenha -e "delete from liberacao where IP='ip_naõ_pingou'"

objetivo da coisa e fazer com que se o usuário sair da rede ele tenha que se autenticar novamente .

agradeço ajuda



  


2. Re: pinga em vários ips aplicar uma ação ao que não pingou [RESOLVIDO]

jose marciano de sousa brito
jmsb

(usa Outra)

Enviado em 19/08/2017 - 16:00h

1 #!/bin/bash
2 # Program name: pingall.sh
3 date
4 cat /tmp/ipsping.txt | while read output
5 do
6 ping -c 2 "$output" > /dev/null
7 if [ $? -eq 0 ];then
8
9 echo "node $output is up"
10 else
11 echo "node $output is down"
12
13 fi
14 ############# aplicar este comando se ip não pinga
15 mysql -D banco -u user -psenha -e "delete from liberacao where IP='ip_naõ_pingou'"
16
17 done

galera este exemplo deu certo no ping , como incrementa o comando da linha 15



3. Re: pinga em vários ips aplicar uma ação ao que não pingou

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 19/08/2017 - 17:14h

jmsb escreveu:

pessoal tenho uma base de dados onde recebo ips em uma tabela quando usuário se conectar na rede wireless "portal captivia" preciso de ajuda de vcs pra desenvolver um script que fique pingando todos estes ips , se caso algum não ping , ele vai aplicar uma ação que sera remove da tabela ,lembrando que consigo importa da tabela via shell todos ips e colocando em arquivo.txt alinhado
então nesse caso já temos o aquivo com os ips.txt
segue o comando que uso pra exporta os ips pra arquivo .txt
mysql -D nome_do_banco -u user -psenha -e "select IP from liberacao INTO OUTFILE '/tmp/ipsping.txt'"

a ação que quero eu seja feita caso não ping e deleta o ip da tabela liberação do campo IP com seguinte comando

mysql -D banco -u user -psenha -e "delete from liberacao where IP='ip_naõ_pingou'"

objetivo da coisa e fazer com que se o usuário sair da rede ele tenha que se autenticar novamente .

agradeço ajuda


Segue sugestão:
while :;do COUNT=0
while read -r IP;do
#A LINHA abaixo é para "dar" um tempo maior, toda vez que inicia o laço.
let COUNT++; ((COUNT == 1)) && sleep 0.25 || sleep 0.125
if ! ping -c2 ${IP} > /dev/null;then
#COLOQUE O COMANDO DESEJADO
echo "NÃO PINGOU"
fi
echo "$line:$COUNT"
done<ARQ_IP.txt
done


Att.:
Marcelo OLiver


4. Re: pinga em vários ips aplicar uma ação ao que não pingou [RESOLVIDO]

jose marciano de sousa brito
jmsb

(usa Outra)

Enviado em 19/08/2017 - 21:02h

não entendi muito bem , fica desta forma ? os ips estão neste diretório (tmp/ipsping.txt) em um arquivo .txt

while :;do COUNT=0
while read -r /tmp/ipsping.txt;do
#A LINHA abaixo é para "dar" um tempo maior, toda vez que inicia o laço.
let COUNT++; ((COUNT == 1)) && sleep 0.25 || sleep 0.125
if ! ping -c2 ${IP} > /dev/null;then
mysql -D banco -u user -psenha -e "delete from liberacao where IP='iaqui eu pego quem?'"
echo "NÃO PINGOU"
fi
echo "$line:$COUNT"
done<ARQ_IP.txt


5. Re: pinga em vários ips aplicar uma ação ao que não pingou

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 19/08/2017 - 22:00h

jmsb escreveu:

não entendi muito bem , fica desta forma ? os ips estão neste diretório (tmp/ipsping.txt) em um arquivo .txt

while :;do COUNT=0
while read -r IP;do
#A LINHA abaixo é para "dar" um tempo maior, toda vez que inicia o laço.
let COUNT++; ((COUNT == 1)) && sleep 0.25 || sleep 0.125
if ! ping -c2 ${IP} > /dev/null;then
mysql -D banco -u user -psenha -e "delete from liberacao where IP='iaqui eu pego quem?'"
echo "NÃO PINGOU"
fi
done</tmp/ipsping.txt

Opá!
Segue com algumas explicações:

while :;do COUNT=0 #INÍCIO DO 1º LAÇO (INFINITO"
while read -r IP;do #INÍCIO do 2º LAÇO, LÊ OS IPs DO ARQUIVO (LINHA POR LINHA)
#A linha abaixo é um contador que define um tempo maior para a 1ª linha do "arquivo IP"
let COUNT++; ((COUNT == 1)) && sleep 0.25 || sleep 0.125 #Pode ser excluído, nesse caso exclua tbem, COUNT=0 e let COUNT++
if ! ping -c2 ${IP} > /dev/null;then # Note que a condição é NEGADA "if !" . . . . Se não PINGAR . . .
mysql -D banco -u user -psenha -e "delete from liberacao where IP=$IP #AQUI TEM O IP QUE NÃO PINGOU, ele é a var "$IP"
fi #FIM DO CONDICIONAL
done</tmp/ipsping.txt.txt # DEFINE ARQUIVO DOS IPS - FIM 2º LAÇO
done #FIM 1º LAÇO

Att.:
Marcelo oliver





6. Re: pinga em vários ips aplicar uma ação ao que não pingou

Paulo
paulo1205

(usa Ubuntu)

Enviado em 20/08/2017 - 01:42h

Use o fping. Ele é muito útil para testar vários destinos de modo quase-simultâneo.

A opção -u do fping gera na saída apenas a lista dos destinos que não estão respondendo. Então você poderia fazer algo parecido com o que vai abaixo.

#!/bin/bash

# Rediciona descritor nº 3 a partir da saída do fping, que está com a opção -u.
exec 3< <( fping -u -q -f arq_lista_ips )

# Lê cada um dos IPs que estão fora a partir do descritor nº 3.
while read ip_fora <&3; do
# chama comando que trata o $ip_fora. Abaixo seguem alguns comandos fictícios.
logger "Detectado que $ip_fora está fora do ar."
remove_ip_mysql $servidor $ip_fora
done

# Libera descritor nº 3.
exec 3<&-



7. Re: pinga em vários ips aplicar uma ação ao que não pingou

jose marciano de sousa brito
jmsb

(usa Outra)

Enviado em 21/08/2017 - 11:01h

msoliver escreveu:

jmsb escreveu:

não entendi muito bem , fica desta forma ? os ips estão neste diretório (tmp/ipsping.txt) em um arquivo .txt

while :;do COUNT=0
while read -r IP;do
#A LINHA abaixo é para "dar" um tempo maior, toda vez que inicia o laço.
let COUNT++; ((COUNT == 1)) && sleep 0.25 || sleep 0.125
if ! ping -c2 ${IP} > /dev/null;then
mysql -D banco -u user -psenha -e "delete from liberacao where IP='iaqui eu pego quem?'"
echo "NÃO PINGOU"
fi
done</tmp/ipsping.txt

Opá!
Segue com algumas explicações:

while :;do COUNT=0 #INÍCIO DO 1º LAÇO (INFINITO"
while read -r IP;do #INÍCIO do 2º LAÇO, LÊ OS IPs DO ARQUIVO (LINHA POR LINHA)
#A linha abaixo é um contador que define um tempo maior para a 1ª linha do "arquivo IP"
let COUNT++; ((COUNT == 1)) && sleep 0.25 || sleep 0.125 #Pode ser excluído, nesse caso exclua tbem, COUNT=0 e let COUNT++
if ! ping -c2 ${IP} > /dev/null;then # Note que a condição é NEGADA "if !" . . . . Se não PINGAR . . .
mysql -D banco -u user -psenha -e "delete from liberacao where IP=$IP #AQUI TEM O IP QUE NÃO PINGOU, ele é a var "$IP"
fi #FIM DO CONDICIONAL
done</tmp/ipsping.txt.txt # DEFINE ARQUIVO DOS IPS - FIM 2º LAÇO
done #FIM 1º LAÇO

Att.:
Marcelo oliver










testei aqui olha saída
Usage: ping [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
[-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos]
[-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]
[-w deadline] [-W timeout] [hop1 ...] destination








8. Re: pinga em vários ips aplicar uma ação ao que não pingou [RESOLVIDO]

jose marciano de sousa brito
jmsb

(usa Outra)

Enviado em 21/08/2017 - 11:03h


Usage: ping [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
[-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos]
[-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]
[-w deadline] [-W timeout] [hop1 ...] destination





testei olha saída


9. Re: pinga em vários ips aplicar uma ação ao que não pingou [RESOLVIDO]

jose marciano de sousa brito
jmsb

(usa Outra)

Enviado em 21/08/2017 - 11:36h

paulo1205 escreveu:

Use o fping. Ele é muito útil para testar vários destinos de modo quase-simultâneo.

A opção -u do fping gera na saída apenas a lista dos destinos que não estão respondendo. Então você poderia fazer algo parecido como o que vai abaixo.

#!/bin/bash

# Rediciona descritor nº 3 a partir da saída do fping, que está com a opção -u.
exec 3< <( fping -u -q -f arq_lista_ips )

# Lê cada um dos IPs que estão fora a partir do descritor nº 3.
while read ip_fora <&3; do
# chama comando que trata o $ip_fora. Abaixo seguem alguns comandos fictícios.
logger "Detectado que $ip_fora está fora do ar."
remove_ip_mysql $servidor $ip_fora
done

# Libera descritor nº 3.
exec 3<&-


opa !!!! este deu certo , muito obrigado , so me falar coisa, como faço pra gerar logs da ação que foi aplicada ?



10. Re: pinga em vários ips aplicar uma ação ao que não pingou [RESOLVIDO]

Ricardo Vasconcellos
qxada07

(usa Slackware)

Enviado em 21/08/2017 - 12:15h

Acho meio que arriscado tratar isso através de ping pois geralmente os desktops não respondem a ping quando estão com o firewall ativo.
Se algum desktop conectar na rede e não permitir a resposta do ping ele será desconectado da rede???

Att.

Ricardo Vasconcellos
Analista TI Sênior

Jesus Cristo morreu por mim e por você para que tenhamos vida eterna. Jesus Te ama
João 3:16


11. Re: pinga em vários ips aplicar uma ação ao que não pingou

jose marciano de sousa brito
jmsb

(usa Outra)

Enviado em 21/08/2017 - 15:07h

qxada07 escreveu:

Acho meio que arriscado tratar isso através de ping pois geralmente os leptos não respondem a ping quando estão com o firewall ativo.
Se algum desktop conectar na rede e não permitir a resposta do ping ele será desconectado da rede???

Att.

Ricardo Vasconcellos
Analista TI Sênior

Jesus Cristo morreu por mim e por você para que tenhamos vida eterna. Jesus Te ama
João 3:16


concordo cm vc qxada07 , porem nesta rede não teremos uso de desktop , a intenção e somente Smartphone por se trata de supermercado, vou por em produção se caso tive muita reclamação terei que repensa , mais se quiser pode sugeri uma ideia , ficarei grato .


12. Re: pinga em vários ips aplicar uma ação ao que não pingou [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 22/08/2017 - 18:02h

jmsb escreveu:

opa !!!! este deu certo , muito obrigado , so me falar coisa, como faço pra gerar logs da ação que foi aplicada ?


Depende do formato do log e de como você vai querer armazená-lo.

No exemplo que eu mostrei acima, eu usei o comando logger para gerar logs através do serviço syslog, e apenas com uma mensagem que dizia que o IP estava fora do ar, não com a ação. Mas você pode colocar como mensagem uma indicação da ação, e o logger vai jogar essa mensagem para o syslog.

Uma alternativa seria gravar o log num arquivo específico, o que você pode fazer simplesmente concatenando uma mensagem ao final do arquivo desejado.

LOGFILE=/tmp/log_desconexoes.txt

# ...

TIMESTAMP=$(date +%Y%m%d-%H%M%S%z)

exec 3< <(fping -q -u -f $ARQ_LISTA_IPS)
while read $ip_fora <&3; do
echo "$TIMESTAMP: Desconectando IP $ip_fora, pois não está pingando." >> $LOGFILE

comando_desconexao_IP $ip_fora
# Se você quiser que a saída do comando acima vá para o arquivo, pode
# redirecionar o comando também, comentando a linha acima e descomentando
# a linha abaixo.
#comando_desconexao_IP $ip_fora >> $LOGFILE 2>&1

comando_remocao_do_banco $ip_fora
done
exec 3<&-


A abordagem acima pode ter variações, como redirecionar todas as saída uma única vez a partir de um determinado ponto do script.

# Redireciona saída padrão para /tmp/out e saída de erros para /tmp/err,
# concatenando aos arquivos.
exec 1>>/tmp/out
exec 2>>/tmp/err
# Deste ponto em diante, tudo o que iria para a tela passará a ir para um dos
# aquivos especificados acima.


E existe também uma alternativa que pode lhe agradar, já que você está trabalhando com um banco SQL, que é gerar logs para o banco. Isso pode ser feito por meio da inclusão de informações numa tabela de logs, ou por meio das opções de auditoria do banco. Você decide.



01 02