Verifique um intervalo de endereços IP para ver se um host está ativo

1

Eu preciso escrever um script de shell bash que irá verificar um intervalo de IP endereços para ver se um host está “vivo” nesse endereço. Também preciso listar os números IP daqueles que estão “vivos” e fornecer um resumo mostrando o número de endereços IP “vivos” e “não vivos”. O intervalo de endereços estará em uma rede de “Classe C”. Estou tendo problemas para descobrir como passar por cada argumento e fazer o ping de cada endereço individual dentro do intervalo.

Abaixo está um exemplo de execução do script que pretendo criar.

$ programName 192.168.42 18 22 

Checking: 192.168.42.18 19 20 21 22 

Live hosts: 
 192.168.42.21 
 192.168.42.22 

There were: 
 2 alive hosts 
 3 not alive hosts 
 found through the use of 'ping'.
    
por JMan18 20.11.2013 / 04:48

2 respostas

2

Isso deve começar você.

#!/bin/bash
for i in 'seq ${2} ${3}'
do
    ping -c 1 ${1}.${i} > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "${1}.${i} responded."
    else
        echo "${1}.${i} did not respond."
    fi
done

Exemplo de saída:

xxxx@xxxxxx:~$ bash test.sh 10.140.0 100 103
10.140.0.100 responded.
10.140.0.101 did not respond.
10.140.0.102 did not respond.
10.140.0.103 did not respond.

O manual do bash provavelmente pode lidar com qualquer outra coisa que você precise.

    
por 20.11.2013 / 05:23
2

Use o nmap . É a ferramenta padrão para o trabalho.

Como você só quer saber quais hosts estão online (e respondendo), execute um “ping scan”: nmap -sP .

Se você não se importa com a formatação da saída, seu script pode ser escrito assim:

#!/bin/sh
nmap -sP "$1.$2-$3"
    
por 21.11.2013 / 02:13