¿Encontrar en qué rango de red se encuentra el usuario?

¿Encontrar en qué rango de red se encuentra el usuario?

Estoy creando un escáner de red que funcionará en cualquier red. Este es mi código hasta ahora.

fd=$(date +%m%d%y%H%M%S)
echo -e "IP$fd\nReport of IP addresses on this intranet, test started at \n$(date)\n\nThe following IP addresses were found:" > IP$fd.txt
echo -e " Okay. Mind you, this could take a couple of minutes.\nI'll be scanning all 254 possibilities between 192.168.1.1 and 192.168.1.254\nI will ring the system bell when I am done.\nHere we go..."
for i in 192.168.0.{1..254}
do
echo "scanning $i"
if [ "$(ping -q -c1 $i)" ]
then
echo -e "AHA! Got one! ---- $i is up!"
fi
echo "END SCAN"
done
echo -e "That's all I got.\Test completed at\n$(date)\n" >> IP$fd.txt
echo -e \\a
echo -e "Your report is IP$fd.txt, and this is what it says:\n"
exit

Excepto que el problema es que esto sólo funcionará si su rango de IP es 192.168.0.1-255. No devolverá nada si la ip es 10.10.10.1.

¿Hay alguna forma de obtener el rango de red de los usuarios y aplicarlo a mi script?

Editar: estoy ejecutando como root

Respuesta1

No existe una forma portátil.

En Linux, puede enumerar todas las subredes IPv4 a las que pertenece el host:

ip -4 route show scope link | awk '{print $1}'

(Tenga en cuenta que puede habermás de uno.)

Respuesta2

Puede extraer los detalles de la red actual de la salida deifconfig -a

A partir de ahí deberías poder configurar variables para tu bucle for. Puede que sea más fácil trabajar con direcciones enteras que con direcciones de puntos.

Habrá múltiples rangos de direcciones, algunos de ellos IPV4 y otros IPV6.

Detectar redes cercanas a las que la máquina actual no está conectada directamente requeriría mucho más trabajo.

información relacionada