Sobes.tech
Intern

1. Rašykite Python objektą "switches" YAML formatu 2. Pakeiskite "switches" taip, kad liktų tik "cisco" jungikliai 3. Komandoje standardise_macaddr gauti paskutinį hosto adresą tinkle "172.16.0.0/28" 4. Išanalizuokite "dhcp_snooping_table" į sąrašą žodynų tokio formato: ```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. Parašykite "NetworkSubnet" klasę, turinčią 2 metodus: - get_subnet - grąžina pirmą prieinamą potinkį nurodyto ilgio kaip IPv4Network klasės objektą - show_network_pool - grąžina prieinamų potinkių sąrašą

sobes.tech AI

Atsakymas iš 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


---

# Filtruoti tik cisco jungiklius

```python
import yaml

atidaryti failą('switches.yaml') kaip:
    switches = yaml.safe_load(f)

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

Gauti paskutinį hosto adresą 172.16.0.0/28 tinkle

import ipaddress

tinklas = ipaddress.IPv4Network('172.16.0.0/28')
paskutinis_hostas = str(list(tinklas.hosts())[-1])
spausdinti(paskutinis_hostas)  # 172.16.0.14

Parsinti dhcp_snooping_table į žodžių sąrašą

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
'''

eilutės = dhcp_snooping_table.strip().split('\n')
dhcp_snooping_table_parsed = []
for eilutė in eilutės:
    mac, ip, sąsaja = eilutė.split()
    dhcp_snooping_table_parsed.append({
        'mac': mac,
        'ip': ip,
        'interface': sąsaja
    })

NetworkSubnet klasė

import ipaddress

class NetworkSubnet:
    def __init__(self, tinklas):
        self.tinklas = ipaddress.IPv4Network(tinklas)
        self.used_subnets = []

    def get_subnet(self, prefixlen):
        for subnet in self.tinklas.subnets(new_prefix=prefixlen):
            if subnet not in self.used_subnets:
                self.used_subnets.append(subnet)
                return subnet
        return None

    def show_network_pool(self):
        all_subnets = list(self.tinklas.subnets())
        available = [s for s in all_subnets if s not in self.used_subnets]
        return available

# Pavyzdys naudojimo
net = NetworkSubnet('192.168.0.0/24')
subnet = net.get_subnet(28)
print(subnet)  # 192.168.0.0/28
print(net.show_network_pool())