Рубрики
Вольер с пингвинами

Bash: проверка доступности устройства в сети

В данной заметке будет рассмотрен скрипт для проверки доступности устройства по указанному в качестве параметра ip адресу

Иногда необходимо быстро проверить доступность устройства в сети зная его ip адрес. Данный скрипт является оберткой для команды ping и предназначен для оптимизации взаимодействий с консолью.

Рассмотрим следующий скрипт:

#!/bin/bash

if [ -n "$1" ]
then
	if [[ $1 =~ ^((([0-1]{0,1}[0-9]{0,1}[0-9])|(2[0-4][0-9])|(25[0-5]))[\.]){3}(([0-1]{0,1}[0-9]{0,1}[0-9])|(2[0-4][0-9])|(25[0-5]))$ ]]
	then 
		targetIP=$1
	else
		if [[ $1 =~ ^(([0-1]{0,1}[0-9]{0,1}[0-9])|(2[0-4][0-9])|(25[0-5])) ]]
		then
			myIP=$(hostname --ip-address)
			targetIP=${myIP%.*}.$1
		else
			echo "Не корректно задан IP адрес в подсети 255.255.255.0" 
		fi
	fi
else
	echo "Не задан IP адрес компьютера"
fi

if [ -n "$targetIP" ]
then
	echo "Проверяется доступность адреса: "$targetIP
	if ping -W 1 -c 1 $targetIP > /dev/null
	then 
		echo "Доступен"
	else
		echo "Не доступен"
	fi
fi

В данном скрипте много внимания уделено интерфейсу и проверкам ошибок ввода.

В bash флаг -n проверяет что строка имеет не нулевую длину, следовательно с помощью конструкции if [ -n «$1» ] можно проверить задан ли пользователем параметр под номером 1, в нашем случае это ip адрес.

Конструкция if [[ $1 =~ ^((([0-1]{0,1}[0-9]{0,1}[0-9])|(2[0-4][0-9])|(25[0-5]))[\.]){3}(([0-1]{0,1}[0-9]{0,1}[0-9])|(2[0-4][0-9])|(25[0-5]))$ ]] проверяет корректность введенного ip адреса с помощью регулярного выражения: выражение должно иметь 3 части из чисел от 0 до 255 с точкой и одну часть из чисел от 0 до 255 без точки.

Если ip адрес задан не по описанному выше формату проводится проверка ввода на соответствие диапазону от 0 до 255. В таком случае определяется собственный ip адрес, что бы выделить адрес подсети и прикрепить заданное число к нему.

Команда ping -W 1 -c 1 $targetIP > /dev/null отключает вывод ping (переводит на /dev/null), а аргументы -W задает таймаут на ожидание ответа и -c задает количество отправляемых пакетов.
В случае успеха выводится сообщение о доступности машины.

Добавить комментарий

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.