Я намагаюся написати сценарій, в якому перераховані всі хости в моїй локальній мережі (їх близько 20) і записується статус ping поруч із кожним хостом. У мене є файл оренди DHCP, тому у мене є всі IP-адреси (скажімо, 10.0.0.1, 10.0.0.2 тощо), все, що мені потрібно, - це статус ping для кожного хоста.
Отже, мій сценарій запускає один пінг для кожного хоста:
ping -c 1 10.0.0.1
На жаль, коли хост офлайн, пінг потребує тривалого часу. Я перевірив man ping
, схоже, є два варіанти встановлення затримки очікування: -w deadline
і -W timeout
. Я думаю, що мене цікавить останнє.
Тому я спробував це:
ping -c 1 -W 1 10.0.0.1
Але чекати одну секунду на офлайн-хості все ще занадто довго. Я спробував встановити його нижче секунди, але, здається, він взагалі не враховує параметр:
ping -c 1 -W 0.1 10.0.0.1 # timeout option is ignored, apparently
Чи є спосіб встановити час очікування на нижче значення? Якщо ні, то чи є альтернативи?
Редагувати
- ОС - Дебіан Ленні.
- Хости, на які я намагаюся пінг, - це фактично точки доступу. Вони перебувають у тій же vlan і підмережі, що і користувачі (для простоти розгортання та заміни). Ось чому я не хочу сканувати всю підмережу (наприклад, з a
ping -b
).
Редагувати №2
Я прийняв fping
рішення (дякую за всі інші відповіді). Ця команда робить саме те, що я шукав:
fping -c1 -t500 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4
Ця команда займає щонайбільше 500 мс, і надає мені статус пінгу всіх хостів відразу:
10.0.0.1 : [0], 84 bytes, 5.71 ms (5.71 avg, 0% loss)
10.0.0.2 : [0], 84 bytes, 7.95 ms (7.95 avg, 0% loss)
10.0.0.3 : [0], 84 bytes, 16.1 ms (16.1 avg, 0% loss)
10.0.0.4 : [0], 84 bytes, 48.0 ms (48.0 avg, 0% loss)
10.0.0.1 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 5.71/5.71/5.71
10.0.0.2 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 7.95/7.95/7.95
10.0.0.3 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 16.1/16.1/16.1
10.0.0.4 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 48.0/48.0/48.0
У Debian Lenny установка тривіальна:
aptitude update
aptitude install fping