Существует ли способ командной строки для отправки сообщений на каждый компьютер в подсети? Как
for(int i = 1; i < 254; i++)
ping(192.168.1.i);
для обеспечения разрешения arp?
Существует ли способ командной строки для отправки сообщений на каждый компьютер в подсети? Как
for(int i = 1; i < 254; i++)
ping(192.168.1.i);
для обеспечения разрешения arp?
Я бы предложил использовать fping с опцией mask, так как вы не ограничиваете себя в ping.
fping -g 192.168.1.0/24
Ответ будет легко проанализирован в script:
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 тем, что вы можете указать любое количество целей в командной строке или указать файл, содержащий списки целей к ping. Вместо отправки одной цели до тех пор, пока она не выйдет из строя или ответы fping отправят пакет ping и перейдут к следующему цели в круговом режиме.
Дополнительная информация: http://fping.org/
Не все машины имеют nmap
, но это замечательный инструмент для любого обнаружения сети и, конечно, лучше, чем повторение с помощью независимых команд ping
.
$ nmap -n -sP 10.0.0.0/24 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
Широковещательный пинг:
$ 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)
В Bash оболочке:
#!/bin/sh
COUNTER=1
while [ $COUNTER -lt 254 ]
do
ping 192.168.1.$COUNTER -c 1
COUNTER=$(( $COUNTER + 1 ))
done
Утилита командной строки nmap также может сделать это:
nmap -sP 192.168.1.*
Это модификация ответа @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
Я только что пришел к этому вопросу, но ответы меня не удовлетворили. Итак, я сделал свой собственный:
echo $(seq 254) | xargs -P255 -I% -d" " ping -W 1 -c 1 192.168.0.% | grep -E "[0-1].*?:"
-W 1
" ). Так оно закончится в 1s:)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
Изменить: И вот то же самое, что и script, потому что когда ваши xargs не имеют флага -P, как в openwrt (я только что узнал)
for i in $(seq 255);
do
ping -W 1 -c 1 10.0.0.$i | grep 'from' &
done
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
В linux я думаю, что ping -b 192.168.1.255 будет работать (192.168.1.255 - это широковещательный адрес для 192.168.1. *), однако IIRC, который не работает под окнами.
Убедитесь, что этот пост в блоге имеет то, что вам нужно.
for i in $(seq 1 254); do ping -c1 -t 1 192.168.11.$i; done
Добавление -t 1
ждет только одну секунду перед выходом. Это значительно улучшает скорость, если у вас есть только несколько устройств, подключенных к этой подсети.
#!/bin/sh
COUNTER=$1
while [ $COUNTER -lt 254 ]
do
echo $COUNTER
ping -c 1 192.168.1.$COUNTER | grep 'ms'
COUNTER=$(( $COUNTER + 1 ))
done
#specify start number like this: ./ping.sh 1
#then run another few instances to cover more ground
#aka one at 1, another at 100, another at 200
#this just finds addresses quicker. will only print ttl info when an address resolves
for i in $(seq 1 254); do ping -c1 192.168.11.$i; done