- en
- Language: ru
- Documentation version: latest
Задания
Предупреждение
Начиная с раздела «9. Функции» для проверки заданий есть автоматические тесты. Они помогают проверить все ли соответствует поставленной задаче, а также дают обратный отклик по тому, что не соответствует задаче. Как правило, после первого периода адаптации к тестам, становится проще делать задания с тестами.
Задание 15.1
Создать функцию get_ip_from_cfg, которая ожидает как аргумент имя файла, в котором находится конфигурация устройства.
Функция должна обрабатывать конфигурацию и возвращать IP-адреса и маски, которые настроены на интерфейсах, в виде списка кортежей:
первый элемент кортежа - IP-адрес
второй элемент кортежа - маска
Например (взяты произвольные адреса):
[("10.0.1.1", "255.255.255.0"), ("10.0.2.1", "255.255.255.0")]
Для получения такого результата, используйте регулярные выражения.
Проверить работу функции на примере файла config_r1.txt.
Обратите внимание, что в данном случае, можно не проверять корректность IP-адреса, диапазоны адресов и так далее, так как обрабатывается вывод команды, а не ввод пользователя.
Задание 15.1a
Скопировать функцию get_ip_from_cfg из задания 15.1 и переделать ее таким образом, чтобы она возвращала словарь:
ключ: имя интерфейса
значение: кортеж с двумя строками:
IP-адрес
маска
В словарь добавлять только те интерфейсы, на которых настроены IP-адреса.
Например (взяты произвольные адреса):
{"FastEthernet0/1": ("10.0.1.1", "255.255.255.0"),
"FastEthernet0/2": ("10.0.2.1", "255.255.255.0")}
Для получения такого результата, используйте регулярные выражения.
Проверить работу функции на примере файла config_r1.txt.
Обратите внимание, что в данном случае, можно не проверять корректность IP-адреса, диапазоны адресов и так далее, так как обрабатывается вывод команды, а не ввод пользователя.
Задание 15.1b
Проверить работу функции get_ip_from_cfg из задания 15.1a на конфигурации 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
А в словаре, который возвращает функция get_ip_from_cfg, интерфейсу Ethernet0/1 соответствует только один из них (второй).
Скопировать функцию get_ip_from_cfg из задания 15.1a и переделать ее таким образом, чтобы она возвращала список кортежей для каждого интерфейса. Если на интерфейсе назначен только один адрес, в списке будет один кортеж. Если же на интерфейсе настроены несколько IP-адресов, то в списке будет несколько кортежей.
Проверьте функцию на конфигурации config_r2.txt и убедитесь, что интерфейсу Ethernet0/1 соответствует список из двух кортежей.
Обратите внимание, что в данном случае, можно не проверять корректность IP-адреса, диапазоны адресов и так далее, так как обрабатывается вывод команды, а не ввод пользователя.
Задание 15.2
Создать функцию parse_sh_ip_int_br, которая ожидает как аргумент имя файла, в котором находится вывод команды show ip int br
Функция должна обрабатывать вывод команды show ip int br и возвращать такие поля:
Interface
IP-Address
Status
Protocol
Информация должна возвращаться в виде списка кортежей:
[("FastEthernet0/0", "10.0.1.1", "up", "up"),
("FastEthernet0/1", "10.0.2.1", "up", "up"),
("FastEthernet0/2", "unassigned", "down", "down")]
Для получения такого результата, используйте регулярные выражения.
Проверить работу функции на примере файла sh_ip_int_br.txt.
Задание 15.2a
Создать функцию convert_to_dict, которая ожидает два аргумента:
список с названиями полей
список кортежей со значениями
Функция возвращает результат в виде списка словарей, где ключи - взяты из первого списка, а значения подставлены из второго.
Например, если функции передать как аргументы список headers и список
[("R1", "12.4(24)T1", "Cisco 3825"),
("R2", "15.2(2)T1", "Cisco 2911")]
Функция должна вернуть такой список со словарями:
[{"hostname": "R1", "ios": "12.4(24)T1", "platform": "Cisco 3825"},
{"hostname": "R2", "ios": "15.2(2)T1", "platform": "Cisco 2911"}]
Функция не должна быть привязана к конкретным данным или количеству заголовков/данных в кортежах.
Проверить работу функции:
первый аргумент - список headers
второй аргумент - список data
Ограничение: Все задания надо выполнять используя только пройденные темы.
headers = ["hostname", "ios", "platform"]
data = [
("R1", "12.4(24)T1", "Cisco 3825"),
("R2", "15.2(2)T1", "Cisco 2911"),
("SW1", "12.2(55)SE9", "Cisco WS-C2960-8TC-L"),
]
Задание 15.3
Создать функцию convert_ios_nat_to_asa, которая конвертирует правила NAT из синтаксиса cisco IOS в cisco ASA.
Функция ожидает такие аргументы:
имя файла, в котором находится правила NAT Cisco IOS
имя файла, в который надо записать полученные правила NAT для ASA
Функция ничего не возвращает.
Проверить функцию на файле cisco_nat_config.txt.
Пример правил NAT cisco IOS
ip nat inside source static tcp 10.1.2.84 22 interface GigabitEthernet0/1 20022
ip nat inside source static tcp 10.1.9.5 22 interface GigabitEthernet0/1 20023
И соответствующие правила NAT для ASA:
object network LOCAL_10.1.2.84
host 10.1.2.84
nat (inside,outside) static interface service tcp 22 20022
object network LOCAL_10.1.9.5
host 10.1.9.5
nat (inside,outside) static interface service tcp 22 20023
В файле с правилами для ASA:
не должно быть пустых строк между правилами
перед строками «object network» не должны быть пробелы
перед остальными строками должен быть один пробел
Во всех правилах для ASA интерфейсы будут одинаковыми (inside,outside).
Задание 15.4
Создать функцию get_ints_without_description, которая ожидает как аргумент имя файла, в котором находится конфигурация устройства.
Функция должна обрабатывать конфигурацию и возвращать список имен интерфейсов, на которых нет описания (команды description).
Пример интерфейса с описанием:
interface Ethernet0/2
description To P_r9 Ethernet0/2
ip address 10.0.19.1 255.255.255.0
mpls traffic-eng tunnels
ip rsvp bandwidth
Интерфейс без описания:
interface Loopback0
ip address 10.1.1.1 255.255.255.255
Проверить работу функции на примере файла config_r1.txt.
Задание 15.5
Создать функцию generate_description_from_cdp, которая ожидает как аргумент имя файла, в котором находится вывод команды show cdp neighbors.
Функция должна обрабатывать вывод команды show cdp neighbors и генерировать на основании вывода команды описание для интерфейсов.
Например, если у R1 такой вывод команды:
R1>show cdp neighbors
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
S - Switch, H - Host, I - IGMP, r - Repeater
Device ID Local Intrfce Holdtme Capability Platform Port ID
SW1 Eth 0/0 140 S I WS-C3750- Eth 0/1
Для интерфейса Eth 0/0 надо сгенерировать такое описание description Connected to SW1 port Eth 0/1
.
Функция должна возвращать словарь, в котором ключи - имена интерфейсов, а значения - команда задающая описание интерфейса:
"Eth 0/0": "description Connected to SW1 port Eth 0/1"
Проверить работу функции на файле sh_cdp_n_sw1.txt.