
Eu tenho um programa simples que chamo de ipsweep. Tudo o que ele deve fazer é executar ping em um endereço IP e mostrar os IPs em uso.
Isto é o que fiz da primeira vez:
#!/bin/bash
for ip in {1...254}; do
ping -c 1 $1.$ip
done
Funcionou, mas está mostrando informações que não preciso. Tudo que preciso são os endereços IP em uso. Mostrou tudo isso com cada IP:
Então tentei adicionar alguns filtros como| grep "ping" | cut -d " " -f 2
#!/bin/bash
for ip in {1...254}; do
ping -c 1 $1.$ip | grep "ping" | cut -d " " -f 2 &
done
Agora o console mostra apenas os IPs, mas mostra TODOS os IPs, sejam eles de usuário ou não (só preciso dos que estão em uso, repito). Estou tentando resolver isso há 5 horas, mas ainda não consigo. Eu sei que com um if isso poderia ser resolvido, mas não sei como escrever.
Responder1
Usando o código de saída ping para determinar se o host está ativo:
#!/bin/bash
for ip in {1..254}; do
ping -q -c 1 $1.$ip >2 2>&- && printf %s.%s\\n $1 $ip
done
Responder2
Primeiro, verificar a conectividade com um único pacote não é aconselhável, mas:
# IP address 192.168.100.1 exists, 192.168.100.122 does not.
walt@bat:~(0)$ ping -c 1 192.168.100.1
PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.
64 bytes from 192.168.100.1: icmp_seq=1 ttl=63 time=2.76 ms
--- 192.168.100.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 2.763/2.763/2.763/0.000 ms
walt@bat:~(0)$ ping -c 1 192.168.100.122
PING 192.168.100.122 (192.168.100.122) 56(84) bytes of data.
--- 192.168.100.122 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
Os exemplos de sucesso e fracasso contêm a --- 192.168.100.122 ping statistics ---
linha " " que você está detectando grep ping
.
Você poderia grep ", 0% packet loss"
em vez disso.