Определить ip адрес компьютера в локальной сети (Bash скрипт, Linux)


Рассмотрим как можно определить ip адрес компьютера в локальной сети. Для этих целей можно использовать ряд инструментов — например, nmap.



Также можно написать небольшой скрипт на bash, который будет без труда справляться с поставленной задачей. Написание данного скрипта и будет рассмотрено в рамках данной статьи.

Определить ip адрес компьютера в локальной сети


Создадим файл, который будет называться ipsearch при помощи любимого текстового редактора

mcedit ipsearch


Поместим туда следующее содержимое

#!/bin/bash
 for i in 192.168.1.{1..10}
 do
 if ping -c1 -w1 $i &>/dev/null

then
 echo $i is up;
 exit
 fi
 done


Разберем структуру BASH скрипта позволяющего определить ip адрес компьютера в локальной сети


Как и для любого скрипта, написанного под Linux в первой строке указывается sha-bang #, затем восклицательный знак и название командного интерпретатора



В основе скрипта цикл for — переменной i последовательно присваивается значение IP-адресов из заданного диапазона.

Для каждого из них выполняется последовательность действий описанная правилом if-then — в данном случае адрес просто пингуется, результат выполнения команды при этом перенаправляется в /dev/null. Если пинг есть (адрес доступен) в консоль выводится строка

[IP-адрес] is up



Завершается if при командой fi. exit обеспечивает выход из программы после завершения цикла for. Если exit не использовать после того как будет произведена попытка пропинговать все адреса из заданного диапазона потребуется нажать на клавиатуре сочетание клавиш CTRL+Z.



Добавляем права на исполнение файлу

chmod +x ipsearch

Выполняем из консоли

./ipsearch



Поскольку точкой в командной строке Linux обозначается текущая директория — указывая ./ мы задаем полный путь до исполняемого файла. Именно поэтому скрипт выполняется несмотря на то, что путь до него не прописан в переменной $PATH (она будет рассмотрена в одной из следующих статей).



То же самое, что делает написанный скрипт можно успешно выполнять при помощи однострочного скрипта

for i in 192.168.1.{1..10};do if ping -c1 -w1 $i &>/dev/null;then echo $i is up;fi;done


Однако скриптом пользоваться, в большинстве случаев, оказывается более удобно

Также читайте о том, как вычислить маску сети по IP адресу и про классовую адресацию.

Сказать спасибо