1. Írja be a Python "switches" objektumot YAML formátumban 2. Alakítsa át a "switches"-t úgy, hogy csak "cisco" kapcsolók maradjanak 3. A standard ipaddress modult használva szerezze meg a "172.16.0.0/28" hálózat utolsó hoszt címét 4. Elemzi a "dhcp_snooping_table"-t egy szótárak listájává a következő módon: 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. Írjon egy "NetworkSubnet" osztályt, amelynek 2 módszere van: - get_subnet - visszaadja az első elérhető alhálózatot a megadott hosszúsággal, IPv4Network objektumként - show_network_pool - visszaadja az elérhető alhálózatok listáját ```python 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.64/30'), IPv4Network('172.16.0.72/29'), IPv4Network('172.16.0.80/28'), IPv4Network('172.16.0.96/27')] ```
sobes.tech MI
Válasz az MI-től
python import yaml from ipaddress import ip_network, IPv4Network
1. Írja be a Python "switches" objektumot YAML formátumba
switches = [ {"vendor": "cisco", "model": "2960"}, {"vendor": "juniper", "model": "ex2200"}, {"vendor": "cisco", "model": "3750"}, ]
with open("switches.yaml", "w") as f: yaml.dump(switches, f)
2. Csak cisco kapcsolókat tartson meg
cisco_switches = [sw for sw in switches if sw["vendor"] == "cisco"]
3. A legutolsó hoszt címének megszerzése a 172.16.0.0/28 hálózatban
network = ip_network("172.16.0.0/28") last_host = list(network.hosts())[-1]
4. dhcp_snooping_table elemzése
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_parsed = [] for line in dhcp_snooping_table.strip().splitlines(): mac, ip, interface = line.split() dhcp_snooping_table_parsed.append({"mac": mac, "ip": ip, "interface": interface})
5. NetworkSubnet osztály
class NetworkSubnet: def init(self, aggregate_network: str): self.aggregate = ip_network(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:
# Alcsoportokra bontás
subnets = list(subnet.subnets(new_prefix=length))
# Első alcsoport kiválasztása
chosen = subnets[0]
# A rendelkezésre álló alcsoportok halmazának frissítése
self.available_subnets.pop(i)
self.available_subnets.extend(subnets[1:])
self.available_subnets.sort(key=lambda x: int(x.network_address))
return chosen
raise ValueError("Nincs elérhető alcsoport a kívánt hosszúsággal")
def show_network_pool(self) -> list[IPv4Network]:
return self.available_subnets
Használati példa
net = NetworkSubnet(aggregate_network="172.16.0.0/24") net_1 = net.get_subnet(length=26) print(f"{net_1=}") # 172.16.0.0/26 print(net.get_subnet(length=25)) # 172.16.0.64/25 print(net.get_subnet(length=30)) # 172.16.0.192/30 print(net.show_network_pool()) # Maradék alcsoportok