мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
zadanie_6._mikrotik [2024/04/17 19:10] wikiadminzadanie_6._mikrotik [2024/06/08 06:43] (текущий) – [Пишем скрипт получения данных с Mikrotik] wikiadmin
Строка 1: Строка 1:
-====== Задание №6. Mikrotik ======+======= Задание №6. Mikrotik =======
  
-====Устанавливаем соединение с Mikrotik====+======Устанавливаем соединение с Mikrotik======
  
-===Немного теории про шлюз и туннель===+=====Немного теории про шлюз и туннель=====
 //Используем маршрутизатор Mikrotik LTAP Mini LTE Kit// //Используем маршрутизатор Mikrotik LTAP Mini LTE Kit//
  
Строка 14: Строка 14:
 {{:pasted:20240417-190803.png}} {{:pasted:20240417-190803.png}}
  
-===Проверка связности с Mikrotik===+====Проверка связности с Mikrotik====
 IP маршрутизатора: 192.168.111.2 IP маршрутизатора: 192.168.111.2
  
 Сделаем Ping до маршрутизатора: Сделаем Ping до маршрутизатора:
-  Ping 192.168.111.2+  ping 192.168.111.2
 Если в ответе увидим Если в ответе увидим
-64 bytes from 192.168.111.2: icmp_seq=1 ttl=64 time=0.072 ms+  64 bytes from 192.168.111.2: icmp_seq=1 ttl=64 time=0.072 ms
 то связь с маршрутизатором есть. то связь с маршрутизатором есть.
-Если ответов не будет, значит связи с маршрутизатором нет. Прервём выполнение команды ping нажатием Ctrl+C+ 
 +//Если ответов не будет, значит связи с маршрутизатором нет.//  
 + 
 +Прервём выполнение команды ping нажатием Ctrl+C 
 + 
 Для удаленного доступа на маршрутизатор используем программу ssh: Для удаленного доступа на маршрутизатор используем программу ssh:
-Ssh –l user1 192.168.111.2 interface wireless registration-table print +  ssh –l user1 192.168.111.2 interface wireless registration-table print 
-Эта команда задаёт имя пользователя = user1 и передает маршрутизатору команду получения списка пользователей WiFi: interface wireless registration-table print+ 
 +<bootnote critical>В строке выше -l это латинская строчная маленькая L, а не -1 (минус единица)</bootnote> 
 + 
 +Эта команда задаёт имя пользователя = user1 и передает маршрутизатору команду получения списка пользователей WiFi:  
 +  interface wireless registration-table print
 Введем пароль: mikrotik Введем пароль: mikrotik
 +
 Получим таблицу MAC-адресов пользователей WiFi с уровнями сигналов.: Получим таблицу MAC-адресов пользователей WiFi с уровнями сигналов.:
 +
 Подключим свой мобильный телефон к wifi на этом маршрутизаторе: Подключим свой мобильный телефон к wifi на этом маршрутизаторе:
 +
 SSID: Mikrotik, пароль: mikrotik SSID: Mikrotik, пароль: mikrotik
 +
 И снова запустим\ команду. Список пользователей должен измениться. И снова запустим\ команду. Список пользователей должен измениться.
-Пишем скрипт получения данных с Mikrotik + 
-Будем использовать библиотеку librouteros. Эту библиотеку нужно установить:+====Пишем скрипт получения данных с Mikrotik==== 
 +Будем использовать библиотеку //librouteros//. Эту библиотеку нужно установить:
 Обновляем список пакетов: Обновляем список пакетов:
- Sudo apt update+  sudo apt update
 Проверяем наличие пакета: Проверяем наличие пакета:
-Apt list | grep python3-librouteros+  apt list | grep python3-librouteros
 Устанавливаем библиотеку Устанавливаем библиотеку
- Sudo apt install python3- librouteros+  sudo apt install python3-librouteros
 Ещё раз проверяем наличие пакета. Ещё раз проверяем наличие пакета.
  
 Для подключения библиотеки к нашему скрипту в начале скрипта Python напишем: Для подключения библиотеки к нашему скрипту в начале скрипта Python напишем:
-from librouteros import connect+  from librouteros import connect
 Описываем соединение: Описываем соединение:
-api = connect(host='192.168.111.2',username='user1',password='mikrotik')+  api = connect(host='192.168.111.2',username='user1',password='mikrotik')
 Выполняем команду на маршрутизаторе: Выполняем команду на маршрутизаторе:
- wifiuser=api.path('interface’, ‘wireless’, ‘registration-table’)+  wifiuser=api.path('interface’, ‘wireless’, ‘registration-table’)
 Затем в цикле for проходим по всем полученным записям и отображаем их на экране. Затем в цикле for проходим по всем полученным записям и отображаем их на экране.
 +
 В конце скрипта закрываем соединение с роутером. В конце скрипта закрываем соединение с роутером.
-Скрипт:+ 
 + 
 +__Скрипт:__ 
 +<code>
 from librouteros import connect from librouteros import connect
 api = connect(host='192.168.111.2',username='user1',password='mikrotik') api = connect(host='192.168.111.2',username='user1',password='mikrotik')
 wifiuser=api.path('interface’, ‘wireless’, ‘registration-table’) wifiuser=api.path('interface’, ‘wireless’, ‘registration-table’)
-for item in wifiuser +for item in wifiuser: 
-print (item, “\n”)+     print (item, “\n”)
 api.close() api.close()
 +</code>
 +
 Получаем массив данных о пользователях Wifi сети Mikrotik на нашем роутере. Получаем массив данных о пользователях Wifi сети Mikrotik на нашем роутере.
 +
 Элементы массива разделены на наименование элемента и значение элемента, разделенные знаком «:». Например, первый элемент массива — это номер строки '.id’: '*1'. Элементы массива разделены на наименование элемента и значение элемента, разделенные знаком «:». Например, первый элемент массива — это номер строки '.id’: '*1'.
 +
 Второй элемент массива — это интерфейс ‘interface’: ‘wlan1’ Второй элемент массива — это интерфейс ‘interface’: ‘wlan1’
 +
 Нас интересует третий элемент массива. Для его отображения в команде print напишем: Нас интересует третий элемент массива. Для его отображения в команде print напишем:
- print (item[‘mac-address’], “\n”) +  print (item[‘mac-address’], “\n”) 
-Запустите скрипт. Теперь вместо всех параметров нам будут отображаться только MAC-адреса пользователей WiFi сети.+Запустите скрипт.  
 + 
 +Теперь вместо всех параметров нам будут отображаться только MAC-адреса пользователей WiFi сети. 
 Добавим второй параметр – уровень сигнала, отделим его от MAC-адреса разделителем « - »: Добавим второй параметр – уровень сигнала, отделим его от MAC-адреса разделителем « - »:
- print (item[‘mac-address’], “ - ”, item[‘signal-strength-ch1’],  “\n”)+  print (item[‘mac-address’], “ - ”, item[‘signal-strength-ch1’],  “\n”)
 Запустите скрипт. Вы получили список MAC-адресов пользователей сети WiFi и их уровни сигналов. Запустите скрипт. Вы получили список MAC-адресов пользователей сети WiFi и их уровни сигналов.
 +
 Записываем полученные данные в БД SQL Записываем полученные данные в БД SQL
 +
 В предыдущих заданиях мы в базе данных pythondb создали таблицу registrations со столбцами mac и signal. В предыдущих заданиях мы в базе данных pythondb создали таблицу registrations со столбцами mac и signal.
 Запишем полученные с роутера значения в эту таблицу. Запишем полученные с роутера значения в эту таблицу.
 +
 Добавляем в начало скрипта команды работы с SQL: Добавляем в начало скрипта команды работы с SQL:
- import sqlite3 +  import sqlite3 
- con = sqlite3.connect('/home/bsk23-01-student-1/python/pythondb'+  con = sqlite3.connect('/home/bsk23-01-student-1/python/pythondb'
- cur = con.cursor()+  cur = con.cursor()
 Затем внутри цикла сформируем строку вставки данных в таблицу SQL: Затем внутри цикла сформируем строку вставки данных в таблицу SQL:
- Insert = “INSERT INTO registrations (mac, signal) VALUES (‘” + item[‘mac-address’] + “’,’” + item[‘signal-strength-ch1’] + “’)”+  insert = “INSERT INTO registrations (mac, signal) VALUES (‘” + item[‘mac-address’] + “’,’” + str(item[‘signal-strength-ch1’]+ “’)”
 Для проверки выведем получившуюся команду на экран: Для проверки выведем получившуюся команду на экран:
- Print(insert)+  print(insert)
 Выполним скрипт, проверим правильно ли сформирована команда вставки данных. Выполним скрипт, проверим правильно ли сформирована команда вставки данных.
 Вставка данных в таблицу SQL выполняется командами: Вставка данных в таблицу SQL выполняется командами:
- Cur.execute(insert) +  cur.execute(insert) 
- Con.commit()+  con.commit()
 В конце скрипта добавим: В конце скрипта добавим:
- Cur.close()+  cur.close()
 Выполним скрипт и проверим наличие данных в таблице SQL: Выполним скрипт и проверим наличие данных в таблице SQL:
- Sqlite3 pythondb +  sqlite3 pythondb 
- Select * from registrations+  select * from registrations
 Видим, что новые записи добавляются в дополнение ранее добавленным. Видим, что новые записи добавляются в дополнение ранее добавленным.
 Для того, чтобы получить в таблице только актуальные данные нужно предварительно очистить таблицу registrations SQL-командой: Для того, чтобы получить в таблице только актуальные данные нужно предварительно очистить таблицу registrations SQL-командой:
- DELETE FROM registrations+  DELETE FROM registrations
 Напишем в скрипте перед циклом: Напишем в скрипте перед циклом:
- Cur.execute(“DELETE FROM registrations”) +  cur.execute(“DELETE FROM registrations”) 
- Con.commit() +  con.commit() 
-Итоговый скрипт+ 
 +__Итоговый скрипт__ 
 +<code>
 from librouteros import connect from librouteros import connect
 import sqlite3 import sqlite3
- con = sqlite3.connect('/home/bsk23-01-student-1/python/pythondb')+con = sqlite3.connect('/home/bsk23-01-student-1/python/pythondb')
 cur = con.cursor() cur = con.cursor()
 api = connect(host='192.168.111.2',username='user1',password='mikrotik') api = connect(host='192.168.111.2',username='user1',password='mikrotik')
 wifiuser=api.path('interface’, ‘wireless’, ‘registration-table’) wifiuser=api.path('interface’, ‘wireless’, ‘registration-table’)
-Cur.execute(“DELETE FROM registrations”) +cur.execute(“DELETE FROM registrations”) 
- Con.commit() +con.commit() 
-for item in wifiuser +for item in wifiuser: 
-Insert = “INSERT INTO registrations (mac, signal) VALUES (‘” + item[‘mac-address’] + “’,’” + item[‘signal-strength-ch1’] + “’)” + insert = “INSERT INTO registrations (mac, signal) VALUES (‘” + item[‘mac-address’] + “’,’” + str(item[‘signal-strength-ch1’]+ “’)” 
-Cur.execute(insert) + cur.execute(insert) 
- Con.commit()+ con.commit()
 api.close() api.close()
 +</code>
  
-Теперь наш сайт показывает данные о пользователях+При выполнении, скрипт не выводит никакой информации на экран. Скрипт считывает с маршрутизатора список MAC-адресов активных WiFi пользователей и записывает этот список в базу данных в таблицу registrations. 
 + 
 +Теперь у нас в таблице registrations базы данных есть список MAC-адресов активных пользователей WiFi, но в таблице users для пользователей указаны не корректные MAC-адреса (столбец mac). 
 + 
 +Для того, чтобы запрос (который вы делали в самостоятельной работе) показывал список активных пользователей необходимо, чтобы в таблице users были пользователи с правильными MAC-адресами. 
 + 
 +Зайдите в sqlite3 (в команде укажите правильный путь к вашей базе данных): 
 +  sqlite3 pythondb 
 +   
 +Добавьте записи пользователей к правильными MAC-адресами, которые у вас попали в таблицу registrations (вместо mac3, mac1 и mac5 укажите нужные MAC-адреса): 
 +  INSERT INTO registrations (mac, signal) VALUES ('mac3', '-72'), ('mac1','-85'), ('mac5','-69'); 
 +   
 +Проверьте, что у вас в таблице users добавились записи: 
 +  SELECT * FROM users; 
 + 
 +//**Если всё сделано корректно то теперь наш сайт показывает данные об активных пользователях сети WiFi**//
 Написанный вами на самостоятельной работе скрипт отображает список пользователей WiFi сети из базы данных. Написанный вами на самостоятельной работе скрипт отображает список пользователей WiFi сети из базы данных.
 +
 Данные в базе данных обновляются скриптом написанным выше. Данные в базе данных обновляются скриптом написанным выше.
-Запуск скрипта автоматически по расписанию в Linux+ 
 +====Запуск скрипта автоматически по расписанию в Linux====
 Xxx Xxx
 +
 Можно сделать чтение списка пользователей и его отображение без записи в БД SQL. Может возникнуть проблема с одновременным доступом на маршрутизатор Можно сделать чтение списка пользователей и его отображение без записи в БД SQL. Может возникнуть проблема с одновременным доступом на маршрутизатор