Sobes.tech
Intern

1. Write the Python object "switches" to YAML format 2. Transform "switches" so that it only contains "cisco" switches 3. Use the standard module ipaddress to get the last host address in the network "172.16.0.0/28" 4. Parse "dhcp_snooping_table" into a list of dictionaries: dhcp_snooping_table_parsed = [ { "mac": "00:E9:8C: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. Write a class "NetworkSubnet" with 2 methods: get_subnet - returns the first available subnet of the specified length as an IPv4Network object show_network_pool - returns a list of available subnets from ipaddress import IPv4Network class NetworkSubnet: def __init__(self, aggregate_network: str): def get_subnet(self, length: int) -> IPv4Network: def show_network_pool(self) -> list[IPv4Network]: net = NetworkSubnet(aggregate_network="172.16.0.0/24") net_1 = net.get_subnet(length=26) print(f"{net_1=}") net_1=IPv4Network('172.16.0.0/26') print(net.get_subnet(length=25)) 172.16.0.128/25 print(net.get_subnet(length=30)) 172.16.0.64/30 print(net.show_network_pool()) [IPv4Network('172.16.0.0/30'), IPv4Network('172.16.0.72/29'), IPv4Network('172.16.0.80/28'), IPv4Network('172.16.0.96/27')]

sobes.tech AI

Answer from AI

python import yaml from ipaddress import ip_network, IPv4Network

1. Write the Python object "switches" to YAML format

switches = [ {"vendor": "cisco", "model": "2960", "ip": "10.0.0.1"}, {"vendor": "juniper", "model": "ex2200", "ip": "10.0.0.2"}, {"vendor": "cisco", "model": "3750", "ip": "10.0.0.3"} ]

yaml_data = yaml.dump(switches, allow_unicode=True) print(yaml_data)

2. Transform "switches" to keep only "cisco" switches

cisco_switches = [sw for sw in switches if sw.get('vendor') == 'cisco'] print(cisco_switches)

3. Use ipaddress to get the last host address in the "172.16.0.0/28" network

network = ip_network('172.16.0.0/28') last_host = list(network.hosts())[-1] print(last_host) # 172.16.0.14

4. Parse dhcp_snooping_table into a list of dictionaries

dhcp_snooping_table = [ "00:E9:8C:3F:A6:50 100.1.1.6 FastEthernet0/20", "00:E9:22:11:A6:50 100.1.1.7 FastEthernet0/21" ]

dhcp_snooping_table_parsed = [] for line in dhcp_snooping_table: mac, ip, interface = line.split() dhcp_snooping_table_parsed.append({"mac": mac, "ip": ip, "interface": interface})

print(dhcp_snooping_table_parsed)

5. Class NetworkSubnet

from ipaddress import IPv4Network

class NetworkSubnet: def init(self, aggregate_network: str): self.aggregate = IPv4Network(aggregate_network) self.available_subnets = [self.aggregate]

def get_subnet(self, length: int) -> IPv4Network:
    for i, subnet in enumerate(self.available_subnets):
        if subnet.prefixlen <= length and subnet.prefixlen <= length <= subnet.max_prefixlen:
            # Split the subnet into smaller ones
            subnets = list(subnet.subnets(new_prefix=length))
            if subnets:
                allocated = subnets[0]
                # Update the pool of available subnets
                # Remove the allocated subnet
                del self.available_subnets[i]
                # Add the remaining subnets
                self.available_subnets.extend(subnets[1:])
                return allocated
    raise ValueError(f"No available subnet with prefix length {length}")

def show_network_pool(self) -> list[IPv4Network]:
    return self.available_subnets

net = NetworkSubnet(aggregate_network="172.16.0.0/24") net_1 = net.get_subnet(length=26) print(f"{net_1=}") # IPv4Network('172.16.0.0/26') print(net.get_subnet(length=25)) # 172.16.0.64/25 or 172.16.0.128/25 depending on implementation print(net.get_subnet(length=30)) # 172.16.0.128/30 or another available subnet print(net.show_network_pool()) # List of remaining subnets """