2014-01-20 6 views
2

У меня есть файл с около 500 устройствами, которые мне нужно выполнить для проверки, доступны ли они в настоящее время или нет из разных подсетях вокруг моей сети. Это, по сути, базовый тест для проверки проблемы маршрутизации/доступности.Linux - пинг всех устройств в файле для проверки доступности

Не знаете, с чего начать действительно. У меня есть базовый файл, в который я поместил каждый отдельный IP-адрес в файл по очереди.

Например, файл выглядит следующим образом:

192.168.1.1 
192.168.1.2 
192.168.1.3 
192.168.1.4 

Я бы это нужно, чтобы вернуть что-то вроде следующего, если третья в очереди не получил ответ:

192.168.1.1 Accessible 
192.168.1.2 Accessible 
192.168.1.3 Inaccessible 
192.168.1.4 Accessible 

Я запускаю Ubuntu здесь. Извиняюсь за то, что не знаю, с чего начать!

Cheers Steve.

+0

Как насчет того, чтобы использовать что-то вроде [Icinga] (https://www.icinga.org/)? – yegorich

+0

, с каким языком программирования вы знакомы? – CarlJ

ответ

3

Вы должны использовать nmap в режиме сканирования пинг с:

nmap -sn -oG - -v -iL hosts_to_scan.txt 

Это будет пытаться свистеть все хосты, содержащиеся в файле hosts_to_scan.txt.

Кстати, вы также можете specifify подсеть, если это так:

nmap -sn -oG - -v 192.168.1.0/24 

и/или сохранить результат в файл:

nmap -sn -oG status.txt -v 192.168.1.0/24 
nmap -sn -oG status.txt -v -iL hosts_to_scan.txt 
+0

спасибо, я попробую! Я все время использую nmap для пинга специальных подсетей (т. е. команды -sP 1.1.1.1-254). –

+0

проблема заключается в том, что он не возвращает недоступные устройства - которые являются устройствами, которые мне нужно видеть. ничего не может увидеть в файле справки nmap, который будет возвращать только недоступные устройства. есть идеи? –

+1

Конечно, используйте подробный режим (см. Обновленный ответ). Я также добавил greppable '-oG -', потому что это облегчит чтение вывода: –

1

Базовая схема будет пинг каждый из серверов и распечатать результат.

Если вы храните IP-адреса в виде ips.txt файла, вы можете сделать:

while read my_ip 
do 
    test_ping $my_ip 
done < ips.txt 

А затем создать функцию, такую ​​как test_ping, что пинги один раз для каждого IP:

test_ping() { 
    if ping -c 1 $1 &> /dev/null 
    then 
     echo "$1 Accessible" 
    else 
     echo "$1 Inaccessible" 
    fi 

} 
+0

спасибо! попробовав это сейчас. –

+0

Как было, @StephenConstantine? – fedorqui

1

Я бы используйте nmap, вероятно, для длинного списка, но если вы находитесь в командной строке и нуждаетесь в быстрой однострочной линии, это также будет выглядеть так:

$ for i in `cat file.txt `;do ping -c 1 $i;done 

PING 8.8.8.8 (8.8.8.8): 56 data bytes 
64 bytes from 8.8.8.8: icmp_seq=0 ttl=50 time=16.271 ms 

--- 8.8.8.8 ping statistics --- 
1 packets transmitted, 1 packets received, 0.0% packet loss 
round-trip min/avg/max/stddev = 16.271/16.271/16.271/0.000 ms 
PING 8.8.4.4 (8.8.4.4): 56 data bytes 
64 bytes from 8.8.4.4: icmp_seq=0 ttl=50 time=16.030 ms 

--- 8.8.4.4 ping statistics --- 
1 packets transmitted, 1 packets received, 0.0% packet loss 
round-trip min/avg/max/stddev = 16.030/16.030/16.030/0.000 ms 

На положительной ноте этот метод быстро и легко запомнить. Работает (возможно) со всеми основными оболочками (bash, zsh, * sh?).

С другой стороны, это довольно многословие, и вы не хотите, чтобы в 200 IP-адресах, даже 10, может быть трудно контролировать.

Я бы написал сценарий в рубине или pytho или любом другом языке, который вам нравится, если nmap не может его отрезать.

EDIT: Это один чище, а также имеет некоторые дополнительные статы:

for i in `cat file.txt `;do ping -c 1 $i|grep 64;done 
64 bytes from 8.8.8.8: icmp_seq=0 ttl=50 time=15.397 ms 
64 bytes from 8.8.4.4: icmp_seq=0 ttl=50 time=13.170 ms 

Там нет практически ничего, что не может быть сделано с гну-инструментов.