Enviar um ping para cada IP numa sub-rede

Existe uma forma baseada na linha de comandos de enviar pings para cada computador numa sub-rede? Tipo

for(int i = 1; i < 254; i++)
    ping(192.168.1.i);
Para fazer cumprir a resolução arp?

Author: Max Ried, 2009-02-02

14 answers

Eu sugeriria o uso defping com a opção máscara, uma vez que você não está restringindo a si mesmo em ping.

fping -g 192.168.1.0/24

A resposta será fácil de processar num 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
...

Nota: Se usar o argumento -a irá restringir o resultado aos endereços ip alcançáveis, poderá querer usá-lo caso contrário a reprodução também irá imprimir os endereços inacessíveis:

fping -a -g 192.168.1.0/24

Do Homem:

Fping difere de ping na medida em que pode indicar qualquer número objectivos na linha de comandos, ou especificar um ficheiro que contenha as listas de alvos pingar. Em vez de enviar para um alvo até ele sair ou Respostas, o fping irá enviar um pacote de ping e passar para o seguinte alvo de uma forma rotineira.

Mais informações: http://fping.org/

 33
Author: Kyr, 2016-04-14 14:04:07

Nem todas as máquinas têm nmap disponível, mas é uma ferramenta maravilhosa para qualquer descoberta de rede, e certamente melhor do que iterar através de comandos independentes 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
 97
Author: Tom, 2009-02-02 13:48:28

Mensagem de transmissão:

$ 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!)
...

(Adicionar uma opção -b no Linux)

 38
Author: Ryan McGeary, 2009-02-02 13:25:53

In Bash shell:

#!/bin/sh

COUNTER=1

while [ $COUNTER -lt 254 ]
do
   ping 192.168.1.$COUNTER -c 1
   COUNTER=$(( $COUNTER + 1 ))
done
 16
Author: David Rodríguez - dribeas, 2013-12-17 16:22:39

O utilitário nmap da linha de comandos também pode fazer isto:

nmap -sP 192.168.1.*
 8
Author: Christian Studer, 2017-02-07 14:11:38

Esta é uma modificação da resposta @david-rodríguez-dribeas acima, que executa todos os pings em paralelo (muito mais rápido) e só mostra o resultado dos endereços ip que devolvem o ping.

export COUNTER=1
while [ $COUNTER -lt 255 ]
do
    ping $1$COUNTER -c 1 -w 400 | grep -B 1 "Lost = 0" &
    COUNTER=$(( $COUNTER + 1 ))
done
 6
Author: Adam Brown, 2015-11-18 15:25:42
Acabei de responder a esta pergunta, mas as respostas não me satisfizeram. Então eu enrolei o meu próprio:
echo $(seq 254) | xargs -P255 -I% -d" " ping -W 1 -c 1 192.168.0.% | grep -E "[0-1].*?:"
  • Vantagem 1: não precisa de instalar nenhuma ferramenta adicional
  • Vantagem 2: é rápido. Ele faz tudo em paralelo com um timout para cada ping de 1s ("-W 1"). Então terminará em 1s:)
  • Vantagem 3: a saída é assim
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

Editar: E aqui está o mesmo que script, para quando seus xargs não têm a bandeira-P, Como é the case in openwrt (I just found out)

for i in $(seq 255);
do
 ping -W 1 -c 1 10.0.0.$i | grep 'from' &
done
 6
Author: zabeltech, 2016-02-23 14:19:19
for i in $(seq 1 254); do ping -c1 -t 1 192.168.11.$i; done

Adicionar um -t 1 espera apenas um segundo antes de sair. Isso melhora muito a velocidade se você tiver apenas alguns dispositivos conectados a essa sub-rede.

 5
Author: JKalok, 2018-07-03 15:30:31
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
 3
Author: PCFixerGuy, 2014-01-23 22:07:16

No linux, acho que o ping-b 192.168.1.255 vai funcionar (192.168.1.255 é o endereço de transmissão para 192.168.1.* ) no entanto, IIRC que não funciona sob o windows.

 2
Author: Axelle Ziegler, 2009-02-02 13:25:06

Verifique se este post tem o que precisa.

 1
Author: Ólafur Waage, 2009-02-02 13:18:10
#!/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
 0
Author: Christopher Infante, 2013-04-07 01:10:59
Cheguei tarde, mas aqui está um pequeno guião que fiz para este propósito, que uso no Windows PowerShell. Você deve ser capaz de copiar e colar na ISE. Isto irá então executar o comando arp e salvar os resultados em A.ficheiro txt e abra - o no bloco de notas.
# 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
 0
Author: cxp cxd, 2018-01-21 02:58:53
for i in $(seq 1 254); do ping -c1 192.168.11.$i; done
 -3
Author: usbdongle, 2015-10-21 13:55:17