
Tengo un programa simple al que llamo ipsweep. Todo lo que se supone que debe hacer es hacer ping a una dirección IP y mostrar las IP en uso.
Esto es lo que hice la primera vez:
#!/bin/bash
for ip in {1...254}; do
ping -c 1 $1.$ip
done
Funcionó, pero muestra información que no necesito. Todo lo que necesito son las direcciones IP en uso. Mostró todo esto con cada IP:
Entonces intenté agregar algunos 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
Ahora la consola muestra solo las IP, pero muestra TODAS las IP, sin importar si están en usuario o no (solo necesito las que están en uso, repito). Llevo 5 horas intentando solucionar esto, pero sigo sin poder. Sé que con un si esto se podría solucionar, pero no sé cómo escribirlo.
Respuesta1
Usando el código de salida de ping para determinar si el host está vivo:
#!/bin/bash
for ip in {1..254}; do
ping -q -c 1 $1.$ip >2 2>&- && printf %s.%s\\n $1 $ip
done
Respuesta2
En primer lugar, no es aconsejable comprobar la conectividad con un solo paquete, pero:
# 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
Tanto los ejemplos de éxito como los de fracaso contienen la --- 192.168.100.122 ping statistics ---
línea " " con la que estás detectando grep ping
.
Podrías hacerlo grep ", 0% packet loss"
en su lugar.