Определить 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 адресу и про классовую адресацию.