Sobes.tech
Intern

1. YAML ფორმატში Python ობიექტი "switches" დაწერეთ 2. გარდაქმნათ "switches", რათა დარჩეს მხოლოდ "cisco" გამართვები 3. standardise_macaddr ბრძანებაში მიიღეთ "172.16.0.0/28" ქსელის ბოლო ჰოსტის მისამართი 4. გაანალიზეთ "dhcp_snooping_table" როგორც სიტყვების სია შემდეგი ფორმატით: ```python dhcp_snooping_table_parsed = [ { "mac": "00:E9:BC:3F:A6:50", "ip": "100.1.1.6", "interface": "FastEthernet0/20", }, { "mac": "00:E9:22:11:A6:50", "ip": "100.1.1.7", "interface": "FastEthernet0/21", } ] ``` 5. დაწერეთ "NetworkSubnet" კლასი, რომელსაც ორი მეთოდი აქვს: - get_subnet - აბრუნებს პირველ ხელმისაწვდომ ქვესათისს მითითებული სიგრძის, როგორც IPv4Network კლასი ობიექტი - show_network_pool - აბრუნებს ხელმისაწვდომ ქვესათისების სიის

sobes.tech AI

პასუხი AI-სგან

yaml switches: cisco1: vendor: cisco model: 2960 ip: 10.0.0.1 cisco2: vendor: cisco model: 3750 ip: 10.0.0.2 hp1: vendor: hp model: 1920 ip: 10.0.0.3


---

# Фильтрация только cisco коммутаторов

```python
импорт yaml

файлды ачуу('switches.yaml') катары:
    switches = yaml.safe_load(файл)

cisco_switches = {k: v for k, v in switches['switches'].items() if v['vendor'] == 'cisco'}

172.16.0.0/28 тармактагы акыркы хосттун дарегин алуу

импорт ipaddress

тармак = ipaddress.IPv4Network('172.16.0.0/28')
акыркы_хост = str(list(тармак.hosts())[-1])
басып чыгуу(акыркы_хост)  # 172.16.0.14

dhcp_snooping_table тизмесин сөздүк тизмесине парсингдөө

dhcp_snooping_table = '''
00:E9:BC:3F:A6:50 100.1.1.6 FastEthernet0/20
00:E9:22:11:A6:50 100.1.1.7 FastEthernet0/21
'''

жолдор = dhcp_snooping_table.strip().split('\n')
dhcp_snooping_table_parsed = []
for жол in жолдор:
    mac, ip, интерфейс = жол.split()
    dhcp_snooping_table_parsed.append({
        'mac': mac,
        'ip': ip,
        'interface': интерфейс
    })

NetworkSubnet классы

импорт ipaddress

класс NetworkSubnet:
    def __init__(өзү, тармак):
        өзү.тармак = ipaddress.IPv4Network(тармак)
        өзү.колдонуучу_подсети = []

    def get_subnet(өзү, префикс_узундугу):
        for подсеть in өзү.тармак.subnets(new_prefix=префикс_узундугу):
            if подсеть эмес болсо өзү.колдонуучу_подсети:
                өзү.колдонуучу_подсети.append(подсеть)
                кайтаруу подсеть
        кайтаруу None

    def show_network_pool(өзү):
        бардык_подсети = listөзү.тармак.subnets())
        жеткиликтүү = [s for s in бардык_подсети if s эмес болсо өзү.колдонуучу_подсети]
        кайтаруу жеткиликтүү

# Колдонуунун мисалы
net = NetworkSubnet('192.168.0.0/24')
подсеть = өзү.get_subnet(28)
басып чыгуу(подсеть)  # 192.168.0.0/28
басып чыгуу(өзү.show_network_pool())