Определить, в каком сетевом диапазоне находится пользователь?

Определить, в каком сетевом диапазоне находится пользователь?

Я делаю сетевой сканер, который будет работать в любой сети. Это мой код на данный момент

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

Проблема в том, что это сработает только если ваш диапазон IP-адресов составляет 192.168.0.1-255. Если IP-адрес 10.10.10.1, то ничего не вернется.

Можно ли как-то получить диапазон сети пользователя и применить его к своему скрипту?

Редактировать: Я работаю как root

решение1

Портативного способа не существует.

В Linux вы можете получить список всех подсетей IPv4, к которым принадлежит хост, используя:

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

(Обратите внимание, что может бытьбольше одного.)

решение2

Вы можете извлечь текущие данные сети из выходных данныхifconfig -a

Из этого вы должны быть в состоянии настроить переменные для вашего цикла for. Возможно, будет проще работать с целыми адресами, чем с точечно-четверными числами.

Будет несколько диапазонов адресов, некоторые из которых будут IPV4, а некоторые — IPV6.

Для обнаружения близлежащих сетей, к которым текущая машина не подключена напрямую, потребуется гораздо больше работы.

Связанный контент