14 ответов:
Я бы предложил использовать fping с опцией маски, так как вы не ограничиваете себя в ping.
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От человека:
FP отличается от 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
Это модификация ответа @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].*?:"
- Преимущество 1: Вам не нужно устанавливать никаких дополнительных инструментов
- преимущество 2: это быстро. Он делает все параллельно с таймаутом для каждого пинга 1s ("
-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Править: И здесь то же самое, что и в скрипте, ибо когда ваши xargs не имеют флага-P, как это case in openwrt (я только что узнал)
for i in $(seq 255); do ping -W 1 -c 1 10.0.0.$i | grep 'from' & done
for i in $(seq 1 254); do ping -c1 -t 1 192.168.11.$i; doneДобавление
-t 1ожидает только одну секунду перед выходом. Это значительно повышает скорость, если к этой подсети подключено всего несколько устройств.
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, который не работает под windows.
#!/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
Я пришел поздно, но вот небольшой скрипт, который я сделал для этой цели, который я запускаю в Windows PowerShell. Вы должны быть в состоянии скопировать и вставить его в ISE. В этом случае выполните команду ARP и сохранить результаты на .txt файл и откройте его в блокноте.
# Declare Variables $MyIpAddress $MyIpAddressLast # Declare Variable And Get User Inputs $IpFirstThree=Read-Host 'What is the first three octects of you IP addresses please include the last period?' $IpStart=Read-Host 'Which IP Address do you want to start with? Include NO periods.' $IpEnd=Read-Host 'Which IP Address do you want to end with? Include NO periods.' $SaveMyFilePath=Read-Host 'Enter the file path and name you want for the text file results.' $PingTries=Read-Host 'Enter the number of times you want to try pinging each address.' #Run from start ip and ping #Run the arp -a and output the results to a text file #Then launch notepad and open the results file Foreach($MyIpAddressLast in $IpStart..$IpEnd) {$MyIpAddress=$IpFirstThree+$MyIpAddressLast Test-Connection -computername $MyIpAddress -Count $PingTries} arp -a | Out-File $SaveMyFilePath notepad.exe $SaveMyFilePath
Comments