мета-данные страницы
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| zadanie_6._mikrotik [2024/04/17 19:09] – wikiadmin | zadanie_6._mikrotik [2024/06/08 06:43] (текущий) – [Пишем скрипт получения данных с Mikrotik] wikiadmin | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ====== Задание №6. Mikrotik ====== | + | ======= Задание №6. Mikrotik |
| - | ===Устанавливаем соединение с Mikrotik=== | + | ======Устанавливаем соединение с Mikrotik====== |
| - | ==Немного теории про шлюз и туннель== | + | =====Немного теории про шлюз и туннель===== |
| // | // | ||
| Строка 14: | Строка 14: | ||
| {{: | {{: | ||
| - | ==Проверка связности с Mikrotik== | + | ====Проверка связности с Mikrotik==== |
| IP маршрутизатора: | IP маршрутизатора: | ||
| Сделаем Ping до маршрутизатора: | Сделаем Ping до маршрутизатора: | ||
| - | | + | |
| Если в ответе увидим | Если в ответе увидим | ||
| - | 64 bytes from 192.168.111.2: | + | |
| то связь с маршрутизатором есть. | то связь с маршрутизатором есть. | ||
| - | Если ответов не будет, значит связи с маршрутизатором нет. Прервём выполнение команды 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 | + | |
| + | < | ||
| + | |||
| + | Эта команда задаёт имя пользователя = user1 и передает маршрутизатору команду получения списка пользователей WiFi: | ||
| + | | ||
| Введем пароль: | Введем пароль: | ||
| + | |||
| Получим таблицу MAC-адресов пользователей WiFi с уровнями сигналов.: | Получим таблицу MAC-адресов пользователей WiFi с уровнями сигналов.: | ||
| + | |||
| Подключим свой мобильный телефон к wifi на этом маршрутизаторе: | Подключим свой мобильный телефон к wifi на этом маршрутизаторе: | ||
| + | |||
| SSID: Mikrotik, пароль: | SSID: Mikrotik, пароль: | ||
| + | |||
| И снова запустим\ команду. Список пользователей должен измениться. | И снова запустим\ команду. Список пользователей должен измениться. | ||
| - | Пишем скрипт получения данных с Mikrotik | + | |
| - | Будем использовать библиотеку librouteros. Эту библиотеку нужно установить: | + | ====Пишем скрипт получения данных с Mikrotik==== |
| + | Будем использовать библиотеку | ||
| Обновляем список пакетов: | Обновляем список пакетов: | ||
| - | 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 | + | |
| Описываем соединение: | Описываем соединение: | ||
| - | api = connect(host=' | + | |
| Выполняем команду на маршрутизаторе: | Выполняем команду на маршрутизаторе: | ||
| - | wifiuser=api.path(' | + | |
| Затем в цикле for проходим по всем полученным записям и отображаем их на экране. | Затем в цикле for проходим по всем полученным записям и отображаем их на экране. | ||
| + | |||
| В конце скрипта закрываем соединение с роутером. | В конце скрипта закрываем соединение с роутером. | ||
| - | Скрипт: | + | |
| + | |||
| + | __Скрипт: | ||
| + | < | ||
| from librouteros import connect | from librouteros import connect | ||
| api = connect(host=' | api = connect(host=' | ||
| wifiuser=api.path(' | wifiuser=api.path(' | ||
| - | for item in wifiuser | + | for item in wifiuser: |
| - | print (item, “\n”) | + | |
| api.close() | api.close() | ||
| + | </ | ||
| + | |||
| Получаем массив данных о пользователях Wifi сети Mikrotik на нашем роутере. | Получаем массив данных о пользователях Wifi сети Mikrotik на нашем роутере. | ||
| + | |||
| Элементы массива разделены на наименование элемента и значение элемента, | Элементы массива разделены на наименование элемента и значение элемента, | ||
| + | |||
| Второй элемент массива — это интерфейс ‘interface’: | Второй элемент массива — это интерфейс ‘interface’: | ||
| + | |||
| Нас интересует третий элемент массива. Для его отображения в команде print напишем: | Нас интересует третий элемент массива. Для его отображения в команде print напишем: | ||
| - | print (item[‘mac-address’], | + | |
| - | Запустите скрипт. Теперь вместо всех параметров нам будут отображаться только MAC-адреса пользователей WiFi сети. | + | Запустите скрипт. |
| + | |||
| + | Теперь вместо всех параметров нам будут отображаться только MAC-адреса пользователей WiFi сети. | ||
| Добавим второй параметр – уровень сигнала, | Добавим второй параметр – уровень сигнала, | ||
| - | print (item[‘mac-address’], | + | |
| Запустите скрипт. Вы получили список MAC-адресов пользователей сети WiFi и их уровни сигналов. | Запустите скрипт. Вы получили список MAC-адресов пользователей сети WiFi и их уровни сигналов. | ||
| + | |||
| Записываем полученные данные в БД SQL | Записываем полученные данные в БД SQL | ||
| + | |||
| В предыдущих заданиях мы в базе данных pythondb создали таблицу registrations со столбцами mac и signal. | В предыдущих заданиях мы в базе данных pythondb создали таблицу registrations со столбцами mac и signal. | ||
| Запишем полученные с роутера значения в эту таблицу. | Запишем полученные с роутера значения в эту таблицу. | ||
| + | |||
| Добавляем в начало скрипта команды работы с SQL: | Добавляем в начало скрипта команды работы с SQL: | ||
| - | import sqlite3 | + | |
| - | con = sqlite3.connect('/ | + | con = sqlite3.connect('/ |
| - | cur = con.cursor() | + | cur = con.cursor() |
| Затем внутри цикла сформируем строку вставки данных в таблицу SQL: | Затем внутри цикла сформируем строку вставки данных в таблицу SQL: | ||
| - | Insert | + | insert |
| Для проверки выведем получившуюся команду на экран: | Для проверки выведем получившуюся команду на экран: | ||
| - | Print(insert) | + | print(insert) |
| Выполним скрипт, | Выполним скрипт, | ||
| Вставка данных в таблицу SQL выполняется командами: | Вставка данных в таблицу SQL выполняется командами: | ||
| - | Cur.execute(insert) | + | cur.execute(insert) |
| - | Con.commit() | + | con.commit() |
| В конце скрипта добавим: | В конце скрипта добавим: | ||
| - | Cur.close() | + | cur.close() |
| Выполним скрипт и проверим наличие данных в таблице SQL: | Выполним скрипт и проверим наличие данных в таблице SQL: | ||
| - | Sqlite3 | + | sqlite3 |
| - | Select | + | |
| Видим, что новые записи добавляются в дополнение ранее добавленным. | Видим, что новые записи добавляются в дополнение ранее добавленным. | ||
| Для того, чтобы получить в таблице только актуальные данные нужно предварительно очистить таблицу registrations SQL-командой: | Для того, чтобы получить в таблице только актуальные данные нужно предварительно очистить таблицу registrations SQL-командой: | ||
| - | DELETE FROM registrations | + | |
| Напишем в скрипте перед циклом: | Напишем в скрипте перед циклом: | ||
| - | Cur.execute(“DELETE FROM registrations”) | + | cur.execute(“DELETE FROM registrations”) |
| - | Con.commit() | + | con.commit() |
| - | Итоговый скрипт | + | |
| + | __Итоговый скрипт__ | ||
| + | < | ||
| from librouteros import connect | from librouteros import connect | ||
| import sqlite3 | import sqlite3 | ||
| - | con = sqlite3.connect('/ | + | con = sqlite3.connect('/ |
| cur = con.cursor() | cur = con.cursor() | ||
| api = connect(host=' | api = connect(host=' | ||
| wifiuser=api.path(' | wifiuser=api.path(' | ||
| - | Cur.execute(“DELETE FROM registrations”) | + | cur.execute(“DELETE FROM registrations”) |
| - | Con.commit() | + | con.commit() |
| - | for item in wifiuser | + | for item in wifiuser: |
| - | Insert | + | insert |
| - | Cur.execute(insert) | + | cur.execute(insert) |
| - | Con.commit() | + | con.commit() |
| api.close() | api.close() | ||
| + | </ | ||
| - | Теперь наш сайт показывает данные о пользователях | + | При выполнении, |
| + | |||
| + | Теперь у нас в таблице registrations базы данных есть список MAC-адресов активных пользователей WiFi, но в таблице users для пользователей указаны не корректные MAC-адреса (столбец mac). | ||
| + | |||
| + | Для того, чтобы запрос (который вы делали в самостоятельной работе) показывал список активных пользователей необходимо, | ||
| + | |||
| + | Зайдите в sqlite3 (в команде укажите правильный путь к вашей базе данных): | ||
| + | sqlite3 pythondb | ||
| + | |||
| + | Добавьте записи пользователей к правильными MAC-адресами, | ||
| + | INSERT INTO registrations (mac, signal) VALUES (' | ||
| + | |||
| + | Проверьте, | ||
| + | SELECT * FROM users; | ||
| + | |||
| + | // | ||
| Написанный вами на самостоятельной работе скрипт отображает список пользователей WiFi сети из базы данных. | Написанный вами на самостоятельной работе скрипт отображает список пользователей WiFi сети из базы данных. | ||
| + | |||
| Данные в базе данных обновляются скриптом написанным выше. | Данные в базе данных обновляются скриптом написанным выше. | ||
| - | Запуск скрипта автоматически по расписанию в Linux | + | |
| + | ====Запуск скрипта автоматически по расписанию в Linux==== | ||
| Xxx | Xxx | ||
| + | |||
| Можно сделать чтение списка пользователей и его отображение без записи в БД SQL. Может возникнуть проблема с одновременным доступом на маршрутизатор | Можно сделать чтение списка пользователей и его отображение без записи в БД SQL. Может возникнуть проблема с одновременным доступом на маршрутизатор | ||