Отправьте пинг каждому IP в подсети - PullRequest
44 голосов
/ 02 февраля 2009

Есть ли способ командной строки для отправки пингов на каждый компьютер в подсети? Как

for(int i = 1; i < 254; i++)
    ping(192.168.1.i);

для обеспечения разрешения arp?

Ответы [ 14 ]

101 голосов
/ 02 февраля 2009

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

$ <b>nmap -n -sP 10.0.0.0/24</b>

Starting Nmap 4.20 ( http://insecure.org ) at 2009-02-02 07:41 CST
Host 10.0.0.1 appears to be up.
Host 10.0.0.10 appears to be up.
Host 10.0.0.104 appears to be up.
Host 10.0.0.124 appears to be up.
Host 10.0.0.125 appears to be up.
Host 10.0.0.129 appears to be up.
Nmap finished: 256 IP addresses (6 hosts up) scanned in 2.365 seconds
42 голосов
/ 17 августа 2015

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

fping -g 192.168.1.0/24

Ответ будет легко разобрать в скрипте:

192.168.1.1 is alive
192.168.1.2 is alive
192.168.1.3 is alive
192.168.1.5 is alive
...
192.168.1.4 is unreachable
192.168.1.6 is unreachable
192.168.1.7 is unreachable
...

Примечание: использование аргумента -a ограничит вывод доступными IP-адресами, вы можете использовать его, иначе fping также выведет недостижимые адреса:

fping -a -g 192.168.1.0/24

От человека:

fping отличается от ping тем, что вы можете указать любое количество целей в командной строке или укажите файл, содержащий списки целей пинговать Вместо отправки одной цели до истечения времени ожидания или Ответы: fping отправит пакет проверки связи и перейдет к следующему цель в круговой манере.

Подробнее: http://fping.org/

38 голосов
/ 02 февраля 2009

широковещательный пинг:

$ ping 192.168.1.255
PING 192.168.1.255 (192.168.1.255): 56 data bytes
64 bytes from 192.168.1.154: icmp_seq=0 ttl=64 time=0.104 ms
64 bytes from 192.168.1.51: icmp_seq=0 ttl=64 time=2.058 ms (DUP!)
64 bytes from 192.168.1.151: icmp_seq=0 ttl=64 time=2.135 ms (DUP!)
...

(добавить параметр -b в Linux)

17 голосов
/ 02 февраля 2009

В оболочке Bash:

#!/bin/sh

COUNTER=1

while [ $COUNTER -lt 254 ]
do
   ping 192.168.1.$COUNTER -c 1
   COUNTER=$(( $COUNTER + 1 ))
done
10 голосов
/ 02 февраля 2009

Утилита командной строки nmap также может сделать это:

nmap -sP 192.168.1.*
9 голосов
/ 23 февраля 2016

Я только обошёл этот вопрос, но ответы меня не удовлетворили. Итак, я свернул свой собственный:

echo $(seq 254) | xargs -P255 -I% -d" " ping -W 1 -c 1 192.168.0.% | grep -E "[0-1].*?:"
  • Преимущество 1: Вам не нужно устанавливать какой-либо дополнительный инструмент
  • Преимущество 2: это быстро. Он делает все параллельно с тайм-аутом для каждого пинга в 1 с ("-W 1"). Так что все закончится через 1с:)
  • Преимущество 3: вывод такой:
64 bytes from 192.168.0.16: icmp_seq=1 ttl=64 time=0.019 ms
64 bytes from 192.168.0.12: icmp_seq=1 ttl=64 time=1.78 ms
64 bytes from 192.168.0.21: icmp_seq=1 ttl=64 time=2.43 ms
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=1.97 ms
64 bytes from 192.168.0.11: icmp_seq=1 ttl=64 time=619 ms

Edit: И здесь то же самое, что и скрипт, когда ваши xargs не имеют флага -P, как в случае с openwrt (я только что узнал)

for i in $(seq 255);
do
 ping -W 1 -c 1 10.0.0.$i | grep 'from' &
done
6 голосов
/ 27 января 2014

Это модификация ответа @ david-rodríguez-dribeas, приведенного выше, который запускает все эхо-запросы параллельно (намного быстрее) и показывает только выходные данные для IP-адресов, которые возвращают эхо-запрос.

export COUNTER=1
while [ $COUNTER -lt 255 ]
do
    ping $1$COUNTER -c 1 -w 400 | grep -B 1 "Lost = 0" &
    COUNTER=$(( $COUNTER + 1 ))
done
5 голосов
/ 27 ноября 2016
for i in $(seq 1 254); do ping -c1 -t 1 192.168.11.$i; done

Добавление -t 1 ждет только одну секунду, прежде чем выйти. Это значительно повышает скорость, если к этой подсети подключено всего несколько устройств.

4 голосов
/ 24 января 2014
FOR /L %i in (1,1,254) DO PING 192.168.1.%i -n 1 -w 100 | for /f "tokens=3 delims=: " %j in ('find /i "TTL="') do echo %j>>IPsOnline.txt
2 голосов
/ 02 февраля 2009

В Linux, я думаю, ping -b 192.168.1.255 будет работать (192.168.1.255 - широковещательный адрес для 192.168.1. *), Однако IIRC, который не работает под Windows.

...