Saber rede através da máscara

1. Saber rede através da máscara

Sérgio Abrantes Junior
pelo

(usa Debian)

Enviado em 15/03/2009 - 17:28h

Boa tarde pessoal,

Estou desenvolvendo um script para teste de redes que postarei aqui no VOl quando estiver pronto.
Ele basicamente verificará as interfaces de rede e se estão ativas, pingará para algumas máquinas na rede, gateway, testará se o DNS está funcionando e mostrará um relatório.
Isso surgiu com a necessidade de teste pelo cliente. Ex: O cliente te liga dizendo que não está conseguindo navegar na net. Ele entra com ssh e cairá no script que executará e mostrará os resultados. Evitando em grande parte uma visita desnecessária. A mioria dos erros é do provedor de internet.
Onde estou com dificuldade?
Após levantar as interfaces, ip e máscara eu rodo o nmap -sP 192.168.1.1-255 por exemplo e filtro os 3 primeiros hosts que estarão ativos para pingá-los.
Está tudo funcionando, mas estou colocando os valores para o nmap na mão.
O que estou precisando saber é como pegar o primeiro IP da rede e o ùltimo através da máscara de rede para passar esses parâmetros ao nmap.

Alguma sugestão?

Sérgio Abrantes
[]'s


  


2. Re: Saber rede através da máscara

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 16/03/2009 - 12:49h

Deixa eu ver se entendi: vc tá querendo q, das varreduras q vc tá fazendo com o nmap dentro dessa faixa d ip, pegue alguns hosts q estão ativos e d um novo comando com o nmap d novo? Se eu tiver errado, me corrija. Vamos tentar fazer um script legal...


3. Re: Saber rede através da máscara

Sérgio Abrantes Junior
pelo

(usa Debian)

Enviado em 16/03/2009 - 19:37h

Está ai a parte do código.
Estava testando e ele está pigando somente o primeiro ip que achou do nmap.

#Verifica eth0
VERI_ETH0=`ifconfig |grep eth0|awk '{print $1}'|wc -l`
if [ $VERI_ETH0 = "1" ]; then
ETH0=1
IPETH0=`ifconfig eth0|grep inet|awk '{print $2 }'|cut -d ":" -f2` 2> /dev/null
MASK_ETH0=`ifconfig eth0|grep Mask|awk '{print $4}'|cut -d ":" -f 2`
NMAP_ETH0=`nmap -sP 192.168.1.1-155|grep Host|awk '{print $2}'|head -n3|sort`
CONT1=1
while [ $CONT1 -le 3 ]; do

PING_ETH0=`ping -c 10 "$NMAP_ETH0|awk '{print $CONT1}'" |grep packets|awk '{print $4}'`
PING_ETH0_VETOR[$CONT1]="$PING_ETH0"
CONT1=$((CONT1+1))
done


else
ETH0=0
fi



4. Re: Saber rede através da máscara

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 17/03/2009 - 12:23h

Desculpe a minha ignorância, mas eu não sei como funciona o comando awk. O q ele faz?


5. ae

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 17/03/2009 - 15:28h

Seguinte amigo, seu código tem alguns erros, dentre eles, você esta fazendo somente 3 iterações (quando deveria ao todo correr toda a faixa de ip). Além disso do jeito que esta trabalhando será complicado fazer um loop (pois ta jogando todo o resultado em uma unica variavel, é melhor criar uma array)... além de mais alguns outros errinhos que vi... enfim, segue abaixo script corrigido e funcional:

------ inicio ---
#!/bin/bash
#Verifica eth0
VERI_ETH0=`ifconfig |grep eth0|awk '{print $1}'|wc -l`
if [ $VERI_ETH0 = "1" ]; then
ETH0=1
IPETH0=`ifconfig eth0|grep inet|awk '{print $2 }'|cut -d ":" -f2` 2> /dev/null
MASK_ETH0=`ifconfig eth0|grep Mask|awk '{print $4}'|cut -d ":" -f 2`

NMAP_ETH0=( ${NMAP_ETH0[@]} `nmap -sP 10.100.49.1-20|grep Host|awk '{print $2}'|sed s/[\(\)]//g|sort`)
count=1
for item in ${NMAP_ETH0[@]}; do
PING_ETH0=`ping -c 10 $item |grep packets|awk '{print $4}'`
echo "$item - Packets: $PING_ETH0"
count=`expr $count + 1`
done

else
ETH0=0
fi
----- fim ------
Substitua: 10.100.49.1-20 pela sua faixa de ip.
Testei aqui na minha rede e blz...

Em relação a pergunta do amigo acima sobre awk, é um utilitario que serve para tratar resultado de texto linha a linha (e não por coluna) por isso a confusão do script acima...

Boa sorte no programa completo.


6. Re: Saber rede através da máscara

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 17/03/2009 - 15:41h

Aaaahhh, tá. Legal... e o sed? O meu professor tentou me explicar, mas ele disse q o sed faz uma pancada d coisa! O q ele faz exatamente?

Obs.: desculpe estar perguntando aki, mas tou aproveitando pra aprender tb mais sobre shell script.


7. Re: Saber rede através da máscara

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 17/03/2009 - 16:20h

Desculpe a intromissão, mas eu me atrevi a colocar um menu para q facilite a inserção da faixa d ip desejada, evitando q ele precise toda vez editar o script pra colocar. Lá vai:

#!/bin/bash
#Verifica eth0
VERI_ETH0=`ifconfig |grep eth0|awk '{print $1}'|wc -l`
FAIXA_ETH0=$( dialog --inputbox --stdout 'Coloque a faixa de IP desejada. Ex.: 192.168.0.1-30' 0 0 )
if [ $VERI_ETH0 = "1" ]; then
ETH0=1
IPETH0=`ifconfig eth0|grep inet|awk '{print $2 }'|cut -d ":" -f2` 2> /dev/null
MASK_ETH0=`ifconfig eth0|grep Mask|awk '{print $4}'|cut -d ":" -f 2`
NMAP_ETH0=( ${NMAP_ETH0[@]} `nmap -sP $FAIXA_ETH0|grep Host|awk '{print $2}'|sed s/[\(\)]//g|sort`)
count=1
for item in ${NMAP_ETH0[@]}; do
PING_ETH0=`ping -c 10 $item |grep packets|awk '{print $4}'`
echo "$item - Packets: $PING_ETH0"
count=`expr $count + 1`
done

else
ETH0=0
fi

Falow!


8. sed

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 17/03/2009 - 17:48h

o sed é um editor de stream, muito usado para rodar expressões regulares (embora possa utiliza-las em outros utilitários também como o grep por exemplo). O principal uso é neste caso de processar grandes conteudos que primeiro precisam ser tratados para depois ter um processamento de expressão regular. Porém tem diversas outras utilidades (como tudo em unix, a imaginação é o limite para o uso das ferramentas basicas)...

Neste caso é uma expressão bem boboca, que simplesmente apaga (trocando tudo por vazio) os parenteses, pois ao usar o nmap para obter os ips, usando o awk (que separa por espaço/tabulação), o ip fica com uns parênteses nele e isto tava dando problema no meu ping...



9. ae

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 17/03/2009 - 18:43h

ae cara...
agora que vi direito sua pergunta, li que tava com problema no ping (de pingar só o primeiro) e ai vi o código... agora que vi a sua duvida de como descobrir o ip... vou dar uma verificada e se der eu posto! No restante, seu código tava quase que todo certo... Sorry...


10. ae

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 17/03/2009 - 18:51h

não sei se vai servir mas enfim:
Assim você pega o ip da maquina.
ifconfig eth0|grep inet|awk '{print $2 }'|head -n1|sed s/[^0-9^.]//g

E talvez assim, você usando o ip, pega do primeiro ao ultimo daquela faixa de ip, para então poder passar para o nmap.
ifconfig eth0|grep inet|awk '{print $2 }'|head -n1|sed s/[^0-9^.]//g | awk -F. '{print $1"."$2"."$3".1-255"}'

FAIXA_ETH0=`ifconfig eth0|grep inet|awk '{print $2 }'|head -n1|sed s/[^0-9^.]//g | awk -F. '{print $1"."$2"."$3".1-255"}'`

Faça o teste.



11. Re: Saber rede através da máscara

Sérgio Abrantes Junior
pelo

(usa Debian)

Enviado em 17/03/2009 - 19:10h

Obrigado meu caro,

Vou testar ele hoje a noite ou amanhã de manhã e dou um retorno.
Para informar o IP para o nmap, vou usar o ipmask para pegar o primeiro ip e último da rede.

Sérgio Abrantes
[]'s



12. Re: Saber rede através da máscara

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 18/03/2009 - 12:54h

Nó!... Percebi q tenho muita coisa pra aprender com Shell Script! Mas valew a explicação ae, stremer.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts