Рассмотрим пример который позволит отслеживать время задержки отправки пакета на IP адреса, TCP порта или Веб сайта.
Что нам потребуется:
Добавление и настройка устройства:
Настройка программ.
Для отправки данных будем использовать «cURL», а для получения данных о времени задержки отправки пакета будем использовать «hping3».
Установка «cURL» и «hping3».
sudo yum install hping3 curl
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 "https://VizIoT.com/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 "https://VizIoT.com/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
Добавления виджета:
Теперь вы все настроили и осталось дождаться отправки данных на сервер.