Все задания и вспомогательные файлы можно скачать в . Если в заданиях раздела есть задания с буквами (например, 5.2a), то лучше выполнить сначала задания без букв, а затем с буквами. Задания с буквами, как правило, немного сложнее заданий без букв и развивают или усложняют идею в соответствующем задании без буквы.
Например, в разделе есть задания 5.1, 5.2, 5.2a, 5.2b, 5.3, 5.3a. Сначала лучше выполнить задания 5.1, 5.2, 5.3, а затем 5.2a, 5.2b, 5.3a
Если задания с буквами получается сделать сразу, лучше делать их по порядку.
Создать скрипт, который будет ожидать два аргумента:
В результате выполнения скрипта, на стандартный поток вывода должны быть выведены те строки из файла с выводом команды show, в которых было найдено совпадение с регулярным выражением.
Проверить работу скрипта на примере вывода команды sh ip int br (файл sh_ip_int_br.txt). Например, попробуйте вывести информацию только по интерфейсу FastEthernet0/1.
Пример работы скрипта:
$ python task_9_1.py sh_ip_int_br.txt "Fas" FastEthernet0/0 15.0.15.1 YES manual up up FastEthernet0/1 10.0.12.1 YES manual up up FastEthernet0/2 10.0.13.1 YES manual up up FastEthernet0/3 unassigned YES unset up down $ python task_9_1.py sh_ip_int_br.txt "manual" FastEthernet0/0 15.0.15.1 YES manual up up FastEthernet0/1 10.0.12.1 YES manual up up FastEthernet0/2 10.0.13.1 YES manual up up Loopback0 10.1.1.1 YES manual up up Loopback100 100.0.0.1 YES manual up up $ python task_9_1.py sh_ip_int_br.txt "up +up" FastEthernet0/0 15.0.15.1 YES manual up up FastEthernet0/1 10.0.12.1 YES manual up up FastEthernet0/2 10.0.13.1 YES manual up up Loopback0 10.1.1.1 YES manual up up Loopback100 100.0.0.1 YES manual up up
В данном случае, скрипт будет работать как фильтр include в CLI Cisco. Вы можете попробовать использовать регулярные выражения для .
Напишите регулярное выражение, которое отобразит строки с интерфейсами 0/1 и 0/3 из вывода sh ip int br.
Проверьте регулярное выражение, используя скрипт, который был создан в задании 15.1, и файл sh_ip_int_br.txt.
В файле задания нужно написать только регулярное выражение.
Переделайте регулярное выражение из задания 15.1a таким образом, чтобы оно, по-прежнему, отображало строки с интерфейсами 0/1 и 0/3, но, при этом, в регулярном выражении было не более 7 символов (не считая кавычки вокруг регулярного выражения).
Проверьте регулярное выражение, используя скрипт, который был создан в задании 15.1, и файл sh_ip_int_br.txt.
В файле задания нужно написать только регулярное выражение.
Проверить работу скрипта из задания 15.1 и регулярного выражения из задания 15.1a или 15.1b на выводе sh ip int br из файла sh_ip_int_br_switch.txt.
Если, в результате выполнения скрипта, были выведены не только строки с интерфейсами 0/1 и 0/3, исправить регулярное выражение. В результате, должны выводиться только строки с интерфейсами 0/1 и 0/3.
В файле задания нужно написать только регулярное выражение.
Создать функцию return_match, которая ожидает два аргумента:
Функция должна обрабатывать вывод команды show построчно и возвращать список подстрок, которые совпали с регулярным выражением (не всю строку, где было найдено совпадение, а только ту подстроку, которая совпала с выражением).
Проверить работу функции на примере вывода команды sh ip int br (файл sh_ip_int_br.txt). Вывести список всех IP-адресов из вывода команды.
Соответственно, регулярное выражение должно описывать подстроку с IP-адресом (то есть, совпадением должен быть IP-адрес).
Обратите внимание, что в данном случае, мы можем не проверять корректность IP-адреса, диапазоны адресов и так далее, так как мы обрабатываем вывод команды, а не ввод пользователя.
Создать функцию parse_cfg, которая ожидает как аргумент имя файла, в котором находится конфигурация устройства.
Функция должна обрабатывать конфигурацию и возвращать IP-адреса и маски, которые настроены на интерфейсах, в виде списка кортежей:
Например (взяты произвольные адреса):
[('10.0.1.1', '255.255.255.0'), ('10.0.2.1', '255.255.255.0')]
Для получения такого результата, используйте регулярные выражения.
Проверить работу функции на примере файла config_r1.txt.
Обратите внимание, что в данном случае, мы можем не проверять корректность IP-адреса, диапазоны адресов и так далее, так как мы обрабатываем конфигурацию, а не ввод пользователя.
Переделать функцию parse_cfg из задания 15.3 таким образом, чтобы она возвращала словарь:
Например (взяты произвольные адреса):
{'FastEthernet0/1': ('10.0.1.1', '255.255.255.0'), 'FastEthernet0/2': ('10.0.2.1', '255.255.255.0')}
Для получения такого результата, используйте регулярные выражения.
Проверить работу функции на примере файла config_r1.txt.
Проверить работу функции parse_cfg из задания 15.3a на конфигурации config_r2.txt.
Обратите внимание, что на интерфейсе e0/1 назначены два IP-адреса:
interface Ethernet0/1 ip address 10.255.2.2 255.255.255.0 ip address 10.254.2.2 255.255.255.0 secondary
А в словаре, который возвращает функция parse_cfg, интерфейсу Ethernet0/1 соответствует только один из них (второй).
Переделайте функцию parse_cfg из задания 15.3a таким образом, чтобы она возвращала список кортежей для каждого интерфейса. Если на интерфейсе назначен только один адрес, в списке будет один кортеж. Если же на интерфейсе настроены несколько IP-адресов, то в списке будет несколько кортежей.
Проверьте функцию на конфигурации config_r2.txt и убедитесь, что интерфейсу Ethernet0/1 соответствует список из двух кортежей.
Обратите внимание, что в данном случае, можно не проверять корректность IP-адреса, диапазоны адресов и так далее, так как обрабатывается вывод команды, а не ввод пользователя.
Создать функцию parse_sh_ip_int_br, которая ожидает как аргумент имя файла, в котором находится вывод команды show
Функция должна обрабатывать вывод команды show ip int br и возвращать такие поля:
Информация должна возвращаться в виде списка кортежей:
[('FastEthernet0/0', '10.0.1.1', 'up', 'up'), ('FastEthernet0/1', '10.0.2.1', 'up', 'up'), ('FastEthernet0/2', 'unassigned', 'up', 'up')]
Для получения такого результата, используйте регулярные выражения.
Проверить работу функции на примере файла sh_ip_int_br_2.txt.
Создать функцию convert_to_dict, которая ожидает два аргумента:
Функция возвращает результат в виде списка словарей (порядок полей может быть другой):
[{'interface': 'FastEthernet0/0', 'status': 'up', 'protocol': 'up', 'address': '10.0.1.1'}, {'interface': 'FastEthernet0/1', 'status': 'up', 'protocol': 'up', 'address': '10.0.2.1'}]
Проверить работу функции на примере файла sh_ip_int_br_2.txt:
Функцию parse_sh_ip_int_br не нужно копировать. Надо импортировать или саму функцию, и использовать то же регулярное выражение, что и в задании 9.4, или импортировать результат выполнения функции parse_show.
headers = ['interface', 'address', 'status', 'protocol']