- en
- Language: ru
- Documentation version: latest
Задания
Предупреждение
Начиная с раздела «9. Функции» для проверки заданий есть автоматические тесты. Они помогают проверить все ли соответствует поставленной задаче, а также дают обратный отклик по тому, что не соответствует задаче. Как правило, после первого периода адаптации к тестам, становится проще делать задания с тестами.
Задание 25.1
Для заданий 25 раздела нет тестов!
Необходимо создать два скрипта:
create_db.py
add_data.py
Код в скриптах должен быть разбит на функции. Какие именно функции и как разделить код, надо решить самостоятельно. Часть кода может быть глобальной.
create_db.py - в этот скрипт должна быть вынесена функциональность по созданию БД:
должна выполняться проверка наличия файла БД
если файла нет, согласно описанию схемы БД в файле dhcp_snooping_schema.sql, должна быть создана БД
имя файла бд - dhcp_snooping.db
В БД должно быть две таблицы (схема описана в файле dhcp_snooping_schema.sql):
switches - в ней находятся данные о коммутаторах
dhcp - тут хранится информация полученная из вывода sh ip dhcp snooping binding
Пример выполнения скрипта, когда файла dhcp_snooping.db нет:
$ python create_db.py
Создаю базу данных...
После создания файла:
$ python create_db.py
База данных существует
add_data.py - с помощью этого скрипта, выполняется добавление данных в БД. Скрипт должен добавлять данные из вывода sh ip dhcp snooping binding и информацию о коммутаторах
Соответственно, в файле add_data.py должны быть две части:
информация о коммутаторах добавляется в таблицу switches
данные о коммутаторах, находятся в файле switches.yml
информация на основании вывода sh ip dhcp snooping binding добавляется в таблицу dhcp
вывод с трёх коммутаторов: файлы sw1_dhcp_snooping.txt, sw2_dhcp_snooping.txt, sw3_dhcp_snooping.txt
так как таблица dhcp изменилась, и в ней теперь присутствует поле switch, его нужно также заполнять. Имя коммутатора определяется по имени файла с данными
Пример выполнения скрипта, когда база данных еще не создана:
$ python add_data.py
База данных не существует. Перед добавлением данных, ее надо создать
Пример выполнения скрипта первый раз, после создания базы данных:
$ python add_data.py
Добавляю данные в таблицу switches...
Добавляю данные в таблицу dhcp...
Пример выполнения скрипта, после того как данные были добавлены в таблицу (порядок добавления данных может быть произвольным, но сообщения должны выводиться аналогично выводу ниже):
$ python add_data.py
Добавляю данные в таблицу switches...
При добавлении данных: ('sw1', 'London, 21 New Globe Walk') Возникла ошибка: UNIQUE constraint failed: switches.hostname
При добавлении данных: ('sw2', 'London, 21 New Globe Walk') Возникла ошибка: UNIQUE constraint failed: switches.hostname
При добавлении данных: ('sw3', 'London, 21 New Globe Walk') Возникла ошибка: UNIQUE constraint failed: switches.hostname
Добавляю данные в таблицу dhcp...
При добавлении данных: ('00:09:BB:3D:D6:58', '10.1.10.2', '10', 'FastEthernet0/1', 'sw1') Возникла ошибка: UNIQUE constraint failed: dhcp.mac
При добавлении данных: ('00:04:A3:3E:5B:69', '10.1.5.2', '5', 'FastEthernet0/10', 'sw1') Возникла ошибка: UNIQUE constraint failed: dhcp.mac
При добавлении данных: ('00:05:B3:7E:9B:60', '10.1.5.4', '5', 'FastEthernet0/9', 'sw1') Возникла ошибка: UNIQUE constraint failed: dhcp.mac
При добавлении данных: ('00:07:BC:3F:A6:50', '10.1.10.6', '10', 'FastEthernet0/3', 'sw1') Возникла ошибка: UNIQUE constraint failed: dhcp.mac
При добавлении данных: ('00:09:BC:3F:A6:50', '192.168.100.100', '1', 'FastEthernet0/7', 'sw1') Возникла ошибка: UNIQUE constraint failed: dhcp.mac
При добавлении данных: ('00:E9:BC:3F:A6:50', '100.1.1.6', '3', 'FastEthernet0/20', 'sw3') Возникла ошибка: UNIQUE constraint failed: dhcp.mac
При добавлении данных: ('00:E9:22:11:A6:50', '100.1.1.7', '3', 'FastEthernet0/21', 'sw3') Возникла ошибка: UNIQUE constraint failed: dhcp.mac
При добавлении данных: ('00:A9:BB:3D:D6:58', '10.1.10.20', '10', 'FastEthernet0/7', 'sw2') Возникла ошибка: UNIQUE constraint failed: dhcp.mac
При добавлении данных: ('00:B4:A3:3E:5B:69', '10.1.5.20', '5', 'FastEthernet0/5', 'sw2') Возникла ошибка: UNIQUE constraint failed: dhcp.mac
При добавлении данных: ('00:C5:B3:7E:9B:60', '10.1.5.40', '5', 'FastEthernet0/9', 'sw2') Возникла ошибка: UNIQUE constraint failed: dhcp.mac
При добавлении данных: ('00:A9:BC:3F:A6:50', '10.1.10.60', '20', 'FastEthernet0/2', 'sw2') Возникла ошибка: UNIQUE constraint failed: dhcp.mac
Оба скрипта вызываются без аргументов.
Задание 25.2
Для заданий 25 раздела нет тестов!
В этом задании необходимо создать скрипт get_data.py.
Код в скрипте должен быть разбит на функции. Какие именно функции и как разделить код, надо решить самостоятельно. Часть кода может быть глобальной.
Скрипту могут передаваться аргументы и, в зависимости от аргументов, надо выводить разную информацию. Если скрипт вызван:
без аргументов, вывести всё содержимое таблицы dhcp
с двумя аргументами, вывести информацию из таблицы dhcp, которая соответствует полю и значению
с любым другим количеством аргументов, вывести сообщение, что скрипт поддерживает только два или ноль аргументов
Файл БД можно скопировать из задания 25.1.
Примеры вывода для разного количества и значений аргументов:
$ python get_data.py
В таблице dhcp такие записи:
----------------- --------------- -- ---------------- ---
00:09:BB:3D:D6:58 10.1.10.2 10 FastEthernet0/1 sw1
00:04:A3:3E:5B:69 10.1.5.2 5 FastEthernet0/10 sw1
00:05:B3:7E:9B:60 10.1.5.4 5 FastEthernet0/9 sw1
00:07:BC:3F:A6:50 10.1.10.6 10 FastEthernet0/3 sw1
00:09:BC:3F:A6:50 192.168.100.100 1 FastEthernet0/7 sw1
00:E9:BC:3F:A6:50 100.1.1.6 3 FastEthernet0/20 sw3
00:E9:22:11:A6:50 100.1.1.7 3 FastEthernet0/21 sw3
00:A9:BB:3D:D6:58 10.1.10.20 10 FastEthernet0/7 sw2
00:B4:A3:3E:5B:69 10.1.5.20 5 FastEthernet0/5 sw2
00:C5:B3:7E:9B:60 10.1.5.40 5 FastEthernet0/9 sw2
00:A9:BC:3F:A6:50 10.1.10.60 20 FastEthernet0/2 sw2
----------------- --------------- -- ---------------- ---
$ python get_data.py vlan 10
Информация об устройствах с такими параметрами: vlan 10
----------------- ---------- -- --------------- ---
00:09:BB:3D:D6:58 10.1.10.2 10 FastEthernet0/1 sw1
00:07:BC:3F:A6:50 10.1.10.6 10 FastEthernet0/3 sw1
00:A9:BB:3D:D6:58 10.1.10.20 10 FastEthernet0/7 sw2
----------------- ---------- -- --------------- ---
$ python get_data.py ip 10.1.10.2
Информация об устройствах с такими параметрами: ip 10.1.10.2
----------------- --------- -- --------------- ---
00:09:BB:3D:D6:58 10.1.10.2 10 FastEthernet0/1 sw1
----------------- --------- -- --------------- ---
$ python get_data.py vln 10
Данный параметр не поддерживается.
Допустимые значения параметров: mac, ip, vlan, interface, switch
$ python get_data.py ip vlan 10
Пожалуйста, введите два или ноль аргументов
Задание 25.3
Для заданий 25 раздела нет тестов!
В прошлых заданиях информация добавлялась в пустую БД. В этом задании, разбирается ситуация, когда в БД уже есть информация.
Скопируйте скрипт add_data.py из задания 25.1 и попробуйте выполнить его повторно, на существующей БД. Должен быть такой вывод:
$ python add_data.py
Добавляю данные в таблицу switches...
При добавлении данных: ('sw1', 'London, 21 New Globe Walk') Возникла ошибка: UNIQUE constraint failed: switches.hostname
При добавлении данных: ('sw2', 'London, 21 New Globe Walk') Возникла ошибка: UNIQUE constraint failed: switches.hostname
При добавлении данных: ('sw3', 'London, 21 New Globe Walk') Возникла ошибка: UNIQUE constraint failed: switches.hostname
Добавляю данные в таблицу dhcp...
При добавлении данных: ('00:09:BB:3D:D6:58', '10.1.10.2', '10', 'FastEthernet0/1', 'sw1') Возникла ошибка: UNIQUE constraint failed: dhcp.mac
При добавлении данных: ('00:04:A3:3E:5B:69', '10.1.5.2', '5', 'FastEthernet0/10', 'sw1') Возникла ошибка: UNIQUE constraint failed: dhcp.mac
При добавлении данных: ('00:05:B3:7E:9B:60', '10.1.5.4', '5', 'FastEthernet0/9', 'sw1') Возникла ошибка: UNIQUE constraint failed: dhcp.mac
При добавлении данных: ('00:07:BC:3F:A6:50', '10.1.10.6', '10', 'FastEthernet0/3', 'sw1') Возникла ошибка: UNIQUE constraint failed: dhcp.mac
При добавлении данных: ('00:09:BC:3F:A6:50', '192.168.100.100', '1', 'FastEthernet0/7', 'sw1') Возникла ошибка: UNIQUE constraint failed: dhcp.mac
... (вывод сокращен)
При создании схемы БД, было явно указано, что поле MAC-адрес, должно быть уникальным. Поэтому, при добавлении записи с таким же MAC-адресом, возникает исключение (ошибка). В задании 25.1 исключение обрабатывается и выводится сообщение на стандартный поток вывода.
В этом задании считается, что информация периодически считывается с коммутаторов и записывается в файлы. После этого, информацию из файлов надо перенести в базу данных. При этом, в новых данных могут быть изменения: MAC пропал, MAC перешел на другой порт/vlan, появился новый MAC и тп.
В этом задании в таблице dhcp надо создать новое поле active, которое будет указывать является ли запись актуальной. Новая схема БД находится в файле dhcp_snooping_schema.sql
Поле active должно принимать такие значения:
0 - означает False. Используется для того, чтобы отметить запись как неактивную
1 - True. Используется чтобы указать, что запись активна
Каждый раз, когда информация из файлов с выводом DHCP snooping добавляется заново, надо пометить все существующие записи (для данного коммутатора), как неактивные (active = 0). Затем можно обновлять информацию и пометить новые записи, как активные (active = 1).
Таким образом, в БД останутся и старые записи, для MAC-адресов, которые сейчас не активны, и появится обновленная информация для активных адресов.
Например, в таблице dhcp такие записи:
mac ip vlan interface switch active
----------------- ---------- ---------- ---------------- ---------- ----------
00:09:BB:3D:D6:58 10.1.10.2 10 FastEthernet0/1 sw1 1
00:04:A3:3E:5B:69 10.1.5.2 5 FastEthernet0/10 sw1 1
00:05:B3:7E:9B:60 10.1.5.4 5 FastEthernet0/9 sw1 1
00:07:BC:3F:A6:50 10.1.10.6 10 FastEthernet0/3 sw1 1
00:09:BC:3F:A6:50 192.168.10 1 FastEthernet0/7 sw1 1
И надо добавить такую информацию из файла:
MacAddress IpAddress Lease(sec) Type VLAN Interface
------------------ --------------- ---------- ------------- ---- --------------------
00:09:BB:3D:D6:58 10.1.10.2 86250 dhcp-snooping 10 FastEthernet0/1
00:04:A3:3E:5B:69 10.1.15.2 63951 dhcp-snooping 15 FastEthernet0/15
00:05:B3:7E:9B:60 10.1.5.4 63253 dhcp-snooping 5 FastEthernet0/9
00:07:BC:3F:A6:50 10.1.10.6 76260 dhcp-snooping 10 FastEthernet0/5
После добавления данных таблица должна выглядеть так:
mac ip vlan interface switch active
----------------- --------------- ---------- --------------- ---------- ----------
00:09:BC:3F:A6:50 192.168.100.100 1 FastEthernet0/7 sw1 0
00:09:BB:3D:D6:58 10.1.10.2 10 FastEthernet0/1 sw1 1
00:04:A3:3E:5B:69 10.1.15.2 15 FastEthernet0/15 sw1 1
00:05:B3:7E:9B:60 10.1.5.4 5 FastEthernet0/9 sw1 1
00:07:BC:3F:A6:50 10.1.10.6 10 FastEthernet0/5 sw1 1
Новая информация должна перезаписывать предыдущую:
MAC 00:04:A3:3E:5B:69 перешел на другой порт и попал в другой интерфейс и получил другой адрес
MAC 00:07:BC:3F:A6:50 перешел на другой порт
Если какого-то MAC-адреса нет в новом файле, его надо оставить в бд со значением active = 0: MAC-адреса 00:09:BC:3F:A6:50 нет в новой информации (выключили комп).
Измените скрипт add_data.py таким образом, чтобы выполнялись новые условия и заполнялось поле active.
Код в скрипте должен быть разбит на функции. Какие именно функции и как разделить код, надо решить самостоятельно. Часть кода может быть глобальной.
> Для проверки корректности запроса SQL, можно выполнить его в командной строке, с помощью утилиты sqlite3.
Для проверки задания и работы нового поля, сначала добавьте в бд информацию из файлов sw*_dhcp_snooping.txt, а потом добавьте информацию из файлов new_data/sw*_dhcp_snooping.txt
Данные должны выглядеть так (порядок строк может быть любым)
----------------- --------------- -- ---------------- --- -
00:09:BC:3F:A6:50 192.168.100.100 1 FastEthernet0/7 sw1 0
00:C5:B3:7E:9B:60 10.1.5.40 5 FastEthernet0/9 sw2 0
00:09:BB:3D:D6:58 10.1.10.2 10 FastEthernet0/1 sw1 1
00:04:A3:3E:5B:69 10.1.15.2 15 FastEthernet0/15 sw1 1
00:05:B3:7E:9B:60 10.1.5.4 5 FastEthernet0/9 sw1 1
00:07:BC:3F:A6:50 10.1.10.6 10 FastEthernet0/5 sw1 1
00:E9:BC:3F:A6:50 100.1.1.6 3 FastEthernet0/20 sw3 1
00:E9:22:11:A6:50 100.1.1.7 3 FastEthernet0/21 sw3 1
00:A9:BB:3D:D6:58 10.1.10.20 10 FastEthernet0/7 sw2 1
00:B4:A3:3E:5B:69 10.1.5.20 5 FastEthernet0/5 sw2 1
00:A9:BC:3F:A6:50 10.1.10.65 20 FastEthernet0/2 sw2 1
00:A9:33:44:A6:50 10.1.10.77 10 FastEthernet0/4 sw2 1
----------------- --------------- -- ---------------- --- -
Задание 25.4
Для заданий 25 раздела нет тестов!
Скопировать файл get_data из задания 25.2. Добавить в скрипт поддержку столбца active, который мы добавили в задании 25.3.
Теперь, при запросе информации, сначала должны отображаться активные записи, а затем, неактивные. Если неактивных записей нет, не отображать заголовок «Неактивные записи».
Примеры выполнения итогового скрипта
$ python get_data.py
В таблице dhcp такие записи:
Активные записи:
----------------- ---------- -- ---------------- --- -
00:09:BB:3D:D6:58 10.1.10.2 10 FastEthernet0/1 sw1 1
00:04:A3:3E:5B:69 10.1.15.2 15 FastEthernet0/15 sw1 1
00:05:B3:7E:9B:60 10.1.5.4 5 FastEthernet0/9 sw1 1
00:07:BC:3F:A6:50 10.1.10.6 10 FastEthernet0/5 sw1 1
00:E9:BC:3F:A6:50 100.1.1.6 3 FastEthernet0/20 sw3 1
00:E9:22:11:A6:50 100.1.1.7 3 FastEthernet0/21 sw3 1
00:A9:BB:3D:D6:58 10.1.10.20 10 FastEthernet0/7 sw2 1
00:B4:A3:3E:5B:69 10.1.5.20 5 FastEthernet0/5 sw2 1
00:A9:BC:3F:A6:50 10.1.10.65 20 FastEthernet0/2 sw2 1
00:A9:33:44:A6:50 10.1.10.77 10 FastEthernet0/4 sw2 1
----------------- ---------- -- ---------------- --- -
Неактивные записи:
----------------- --------------- - --------------- --- -
00:09:BC:3F:A6:50 192.168.100.100 1 FastEthernet0/7 sw1 0
00:C5:B3:7E:9B:60 10.1.5.40 5 FastEthernet0/9 sw2 0
----------------- --------------- - --------------- --- -
$ python get_data.py vlan 5
Информация об устройствах с такими параметрами: vlan 5
Активные записи:
----------------- --------- - --------------- --- -
00:05:B3:7E:9B:60 10.1.5.4 5 FastEthernet0/9 sw1 1
00:B4:A3:3E:5B:69 10.1.5.20 5 FastEthernet0/5 sw2 1
----------------- --------- - --------------- --- -
Неактивные записи:
----------------- --------- - --------------- --- -
00:C5:B3:7E:9B:60 10.1.5.40 5 FastEthernet0/9 sw2 0
----------------- --------- - --------------- --- -
$ python get_data.py vlan 10
Информация об устройствах с такими параметрами: vlan 10
Активные записи:
----------------- ---------- -- --------------- --- -
00:09:BB:3D:D6:58 10.1.10.2 10 FastEthernet0/1 sw1 1
00:07:BC:3F:A6:50 10.1.10.6 10 FastEthernet0/5 sw1 1
00:A9:BB:3D:D6:58 10.1.10.20 10 FastEthernet0/7 sw2 1
00:A9:33:44:A6:50 10.1.10.77 10 FastEthernet0/4 sw2 1
----------------- ---------- -- --------------- --- -
Задание 25.5
Для заданий 25 раздела нет тестов!
После выполнения заданий 25.1 - 25.5 в БД остается информация о неактивных записях. И, если какой-то MAC-адрес не появлялся в новых записях, запись с ним, может остаться в БД навсегда.
И, хотя это может быть полезно, чтобы посмотреть, где MAC-адрес находился в последний раз, постоянно хранить эту информацию не очень полезно.
Например, если запись в БД уже больше месяца, то её можно удалить.
Для того, чтобы сделать такой критерий, нужно ввести новое поле, в которое будет записываться последнее время добавления записи.
Новое поле называется last_active и в нем должна находиться строка, в формате: YYYY-MM-DD HH:MM:SS.
В этом задании необходимо:
изменить, соответственно, таблицу dhcp и добавить новое поле.
таблицу можно поменять из cli sqlite, но файл dhcp_snooping_schema.sql тоже необходимо изменить
изменить скрипт add_data.py, чтобы он добавлял к каждой записи время
Получить строку со временем и датой, в указанном формате, можно с помощью функции datetime в запросе SQL. Синтаксис использования такой:
sqlite> insert into dhcp (mac, ip, vlan, interface, switch, active, last_active)
...> values ('00:09:BC:3F:A6:50', '192.168.100.100', '1', 'FastEthernet0/7', 'sw1', '0', datetime('now'));
То есть вместо значения, которое записывается в базу данных, надо указать datetime(„now“).
После этой команды в базе данных появится такая запись:
mac ip vlan interface switch active last_active
----------------- --------------- ----- --------------- ------- ------- -------------------
00:09:BC:3F:A6:50 192.168.100.100 1 FastEthernet0/7 sw1 0 2019-03-08 11:26:56
Задание 25.5a
Для заданий 25 раздела нет тестов!
После выполнения задания 25.5, в таблице dhcp есть новое поле last_active.
Обновите скрипт add_data.py, таким образом, чтобы он удалял все записи, которые были активными более 7 дней назад.
Для того, чтобы получить такие записи, можно просто вручную обновить поле last_active в некоторых записях и поставить время 7 или более дней.
В файле задания описан пример работы с объектами модуля datetime. Показано как получить дату 7 дней назад. С этой датой надо будет сравнивать время last_active.
Обратите внимание, что строки с датой, которые пишутся в БД, можно сравнивать между собой.
from datetime import timedelta, datetime
now = datetime.today().replace(microsecond=0)
week_ago = now - timedelta(days=7)
#print(now)
#print(week_ago)
#print(now > week_ago)
#print(str(now) > str(week_ago))
Задание 25.6
Для заданий 25 раздела нет тестов!
В этом задании выложен файл parse_dhcp_snooping.py. В файле parse_dhcp_snooping.py нельзя ничего менять.
В файле созданы несколько функций и описаны аргументы командной строки, которые принимает файл.
Есть поддержка аргументов для выполнения всех действий, которые, в предыдущих заданиях, выполнялись в файлах create_db.py, add_data.py и get_data.py.
В файле parse_dhcp_snooping.py есть такая строка: import parse_dhcp_snooping_functions as pds
И задача этого задания в том, чтобы создать все необходимые функции, в файле parse_dhcp_snooping_functions.py на основе информации в файле parse_dhcp_snooping.py.
Из файла parse_dhcp_snooping.py, необходимо определить:
какие функции должны быть в файле parse_dhcp_snooping_functions.py
какие параметры создать в этих функциях
Необходимо создать соответствующие функции и перенести в них функционал, который описан в предыдущих заданиях.
Вся необходимая информация, присутствует в функциях create, add, get, в файле parse_dhcp_snooping.py.
Для того, чтобы было проще начать, попробуйте создать необходимые функции в файле parse_dhcp_snooping_functions.py и просто выведите аргументы функций, используя print.
Потом, можно создать функции, которые запрашивают информацию из БД (базу данных можно скопировать из предыдущих заданий).
Можно создавать любые вспомогательные функции в файле parse_dhcp_snooping_functions.py, а не только те, которые вызываются из файла parse_dhcp_snooping.py.
Проверьте все операции:
создание БД
добавление информации о коммутаторах
добавление информации на основании вывода sh ip dhcp snooping binding из файлов
выборку информации из БД (по параметру и всю информацию)
Чтобы было проще понять, как будет выглядеть вызов скрипта, ниже несколько примеров. В примерах показывается вариант, когда в базе данных есть поля active и last_active, но можно также использовать вариант без этих полей.
$ python parse_dhcp_snooping.py get -h
usage: parse_dhcp_snooping.py get [-h] [--db DB_FILE]
[-k {mac,ip,vlan,interface,switch}]
[-v VALUE] [-a]
optional arguments:
-h, --help show this help message and exit
--db DB_FILE имя БД
-k {mac,ip,vlan,interface,switch}
параметр для поиска записей
-v VALUE значение параметра
-a показать все содержимое БД
$ python parse_dhcp_snooping.py add -h
usage: parse_dhcp_snooping.py add [-h] [--db DB_FILE] [-s]
filename [filename ...]
positional arguments:
filename файл(ы), которые надо добавить
optional arguments:
-h, --help show this help message and exit
--db DB_FILE имя БД
-s если флаг установлен, добавлять данные коммутаторов, иначе -
DHCP записи
$ python parse_dhcp_snooping.py add -h
usage: parse_dhcp_snooping.py add [-h] [--db DB_FILE] [-s]
filename [filename ...]
positional arguments:
filename файл(ы), которые надо добавить
optional arguments:
-h, --help show this help message and exit
--db DB_FILE имя БД
-s если флаг установлен, добавлять данные коммутаторов, иначе
добавлять DHCP записи
$ python parse_dhcp_snooping.py get -h
usage: parse_dhcp_snooping.py get [-h] [--db DB_FILE]
[-k {mac,ip,vlan,interface,switch}]
[-v VALUE] [-a]
optional arguments:
-h, --help show this help message and exit
--db DB_FILE имя БД
-k {mac,ip,vlan,interface,switch}
параметр для поиска записей
-v VALUE значение параметра
-a показать все содержимое БД
$ python parse_dhcp_snooping.py create_db
Создаю БД dhcp_snooping.db со схемой dhcp_snooping_schema.sql
Создаю базу данных...
$ python parse_dhcp_snooping.py add sw[1-3]_dhcp_snooping.txt
Читаю информацию из файлов
sw1_dhcp_snooping.txt, sw2_dhcp_snooping.txt, sw3_dhcp_snooping.txt
Добавляю данные по DHCP записях в dhcp_snooping.db
$ python parse_dhcp_snooping.py add -s switches.yml
Добавляю данные о коммутаторах
$ python parse_dhcp_snooping.py get
В таблице dhcp такие записи:
Активные записи:
----------------- --------------- -- ---------------- --- - -------------------
00:09:BB:3D:D6:58 10.1.10.2 10 FastEthernet0/1 sw1 1 2019-03-08 16:47:52
00:04:A3:3E:5B:69 10.1.5.2 5 FastEthernet0/10 sw1 1 2019-03-08 16:47:52
00:05:B3:7E:9B:60 10.1.5.4 5 FastEthernet0/9 sw1 1 2019-03-08 16:47:52
00:07:BC:3F:A6:50 10.1.10.6 10 FastEthernet0/3 sw1 1 2019-03-08 16:47:52
00:09:BC:3F:A6:50 192.168.100.100 1 FastEthernet0/7 sw1 1 2019-03-08 16:47:52
00:A9:BB:3D:D6:58 10.1.10.20 10 FastEthernet0/7 sw2 1 2019-03-08 16:47:52
00:B4:A3:3E:5B:69 10.1.5.20 5 FastEthernet0/5 sw2 1 2019-03-08 16:47:52
00:C5:B3:7E:9B:60 10.1.5.40 5 FastEthernet0/9 sw2 1 2019-03-08 16:47:52
00:A9:BC:3F:A6:50 10.1.10.60 20 FastEthernet0/2 sw2 1 2019-03-08 16:47:52
00:E9:BC:3F:A6:50 100.1.1.6 3 FastEthernet0/20 sw3 1 2019-03-08 16:47:52
----------------- --------------- -- ---------------- --- - -------------------
$ python parse_dhcp_snooping.py get -k vlan -v 10
Данные из БД: dhcp_snooping.db
Информация об устройствах с такими параметрами: vlan 10
Активные записи:
----------------- ---------- -- --------------- --- - -------------------
00:09:BB:3D:D6:58 10.1.10.2 10 FastEthernet0/1 sw1 1 2019-03-08 16:47:52
00:07:BC:3F:A6:50 10.1.10.6 10 FastEthernet0/3 sw1 1 2019-03-08 16:47:52
00:A9:BB:3D:D6:58 10.1.10.20 10 FastEthernet0/7 sw2 1 2019-03-08 16:47:52
----------------- ---------- -- --------------- --- - -------------------
$ python parse_dhcp_snooping.py get -k vln -v 10
usage: parse_dhcp_snooping.py get [-h] [--db DB_FILE]
[-k {mac,ip,vlan,interface,switch}]
[-v VALUE] [-a]
parse_dhcp_snooping.py get: error: argument -k: invalid choice: 'vln' (choose from 'mac', 'ip', 'vlan', 'interface', 'switch')