Linux HTTP -> Время задержки отправки пакета

Рассмотрим пример который позволит отслеживать время задержки отправки пакета на IP адреса, TCP порта или Веб сайта.

Что нам потребуется:

  • Компьютер: Любой компьютер с операционной системой Linux
  • Программы:
    • nano — консольный текстовый редактор
    • grep — утилита командной строки, которая находит на вводе строки
    • cURL — программа командной строки, для работы с HTTP
    • hping3 – бесплатный генератор пакетов и анализатор для протокола TCP / IP, распространенный Salvatore Sanfilippo (также известный как Antirez)
    • crontab —демон, использующийся для периодического выполнения заданий в определённое время.

Добавление и настройка устройства:

  1. Добавим новое устройство в VizIoT с именем «Тест ПИНГ»
  2. Настроим параметры устройства. Попробуем пропинговать Google, IP адрес, порт IP адреса:
    1. Ключ tpgoogle с типом «Пользовательский»
    2. Ключ tpip с типом «Пользовательский»
    3. Ключ tpport с типом «Пользовательский»
  3. В «Основных настройках» устройства скопируем Ключ доступа и Пароль доступа.

Настройка программ.

Для отправки данных будем использовать «cURL», а для получения данных о времени задержки отправки пакета будем использовать «hping3».

Установка «cURL» и «hping3».

  • В RedHat или CentOS:
    sudo yum install hping3 curl
  • В Debian, Ubuntu или Linux Mint:
    sudo apt-get install hping3 curl

Посмотрим на результат команды:

> hping3 -c 1 -S -1 google.com

В ответ получите примерно такой текст:

HPING google.com (ens33 74.125.232.40): icmp mode set, 28 headers + 0 data bytes
len=46 ip=74.125.232.40 ttl=128 id=16442 icmp_seq=0 rtt=15.1 ms

--- google.com hping statistic ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 15.1/15.1/15.1 ms

Алгоритм действия.

Сохранить результат команды:

res_ping_google=$(hping3 -c 1 -S -1 google.com 2>&1)

Проверить наличие строки "1 packets received" так как она означает что пакет доставлен успешно:

isOk=$(echo $res_ping_google | grep -Eo '1 packets received')

по умолчанию значения задержки будет 9999 мс, если пакет доставлен успешно, то вытащим с результата средние время:

time_ping_google=9999
if [ "$isOk" == "1 packets received" ]
then
    time_ping_google=$(echo $res_ping_google | grep -Eo 'min/avg/max = [^ ]*' | grep -Eo '\/[^\/a-z]*\/' | grep -Eo '[^\/a-z]*')
fi

Для отправки HTTP GET запросов будем использовать CURL. Пример команды с запросом:

curl --silent "http://VizIoT.com:48656/update?key=______________&pass=______________&tpgoogle=$time_ping_google" > /dev/null

Теперь напишем скрипт, который будет отправлять на сервер информацию о температуре процессора и его ядер.

Создания скрипта.

Создадим скрипт используя текстовый редактор:

nano /var/viziot_ping.sh

Содержание скрипта:

key='_____________'
pass='_________________'
#Ping WEB сайт
res_ping_google=$(hping3 -c 1 -S -1 google.com 2>&1)
#Ping IP адрес
res_ping_ip=$(hping3 -c 1 -S -1 8.8.8.8 2>&1)
#Ping TCP порт
res_ping_port=$(hping3 -p 8080 -c 1 -S -1 google.com 2>&1)

time_ping_google=9999
time_ping_ip=9999
time_ping_port=9999

isOk=$(echo $res_ping_google | grep -Eo '1 packets received')
if [ "$isOk" == "1 packets received" ]
then
	time_ping_google=$(echo $res_ping_google | grep -Eo 'min/avg/max = [^ ]*' | grep -Eo '\/[^\/a-z]*\/' | grep -Eo '[^\/a-z]*')
fi

isOk=$(echo $res_ping_ip | grep -Eo '1 packets received')
if [ "$isOk" == "1 packets received" ]
then
	time_ping_ip=$(echo $res_ping_ip | grep -Eo 'min/avg/max = [^ ]*' | grep -Eo '\/[^\/a-z]*\/' | grep -Eo '[^\/a-z]*')
fi

isOk=$(echo $res_ping_port | grep -Eo '1 packets received')
if [ "$isOk" == "1 packets received" ]
then
	time_ping_port=$(echo $res_ping_port | grep -Eo 'min/avg/max = [^ ]*' | grep -Eo '\/[^\/a-z]*\/' | grep -Eo '[^\/a-z]*')
fi

#отправка запроса
curl --silent "http://VizIoT.com:48656/update?key=$key&pass=$pass&tpgoogle=$time_ping_google&tpip=$time_ping_ip&tpport=$time_ping_port" > /dev/null

Чтобы скрипт можно было выполнить ему надо дать права на выполнения

> chmod +x /var/viziot_ping.sh

Для ежеминутной отправки будем использовать демон cron. Запустим редактор cron

> crontab -e

Обязательно в самом начале должны быть такие строки:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

И в самый конец добавим строку, которая будет запускать скрипт «/var/viziot_ping.sh» каждую минуту:

0-59 * * * * /var/viziot_ping.sh

Добавления виджета:

  1. Создадим новую панель с именем «Тест ПИНГ»
  2. Добавим виджет «Время Пинга»
    • тип: «График»;
    • устройство: «Тест ПИНГ»;
    • параметры: tpgoogle , tpip , tpport

Теперь вы все настроили и осталось дождаться отправки данных на сервер.