Sobes.tech
Intern

1. Escribir un objeto Python "switches" en formato YAML 2. Transformar "switches" para que solo queden los conmutadores "cisco" 3. En el comando standardise_macaddr obtener la última dirección del host en la red "172.16.0.0/28" 4. Analizar "dhcp_snooping_table" en una lista de diccionarios con el siguiente 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. Escribir una clase "NetworkSubnet" que tenga 2 métodos: - get_subnet - devuelve la primera subred disponible de la longitud especificada como un objeto de la clase IPv4Network - show_network_pool - devuelve una lista de las subredes disponibles

sobes.tech AI

Respuesta de la IA

yaml interruptores: cisco1: proveedor: cisco modelo: 2960 ip: 10.0.0.1 cisco2: proveedor: cisco modelo: 3750 ip: 10.0.0.2 hp1: proveedor: hp modelo: 1920 ip: 10.0.0.3


---

# Filtrado solo de conmutadores cisco

```python
import yaml

with open('switches.yaml') as f:
    switches = yaml.safe_load(f)

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

Obtener la última dirección del host en la red 172.16.0.0/28

import ipaddress

network = ipaddress.IPv4Network('172.16.0.0/28')
ultima_host = str(list(network.hosts())[-1])
print(ultima_host)  # 172.16.0.14

Análisis de dhcp_snooping_table en una lista de diccionarios

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

líneas = dhcp_snooping_table.strip().split('\n')
dhcp_snooping_table_parsed = []
for línea in líneas:
    mac, ip, interfaz = línea.split()
    dhcp_snooping_table_parsed.append({
        'mac': mac,
        'ip': ip,
        'interfaz': interfaz
    })

Clase NetworkSubnet

import ipaddress

class NetworkSubnet:
    def __init__(self, red):
        self.red = ipaddress.IPv4Network(red)
        self.subredes_usadas = []

    def get_subnet(self, prefijo):
        for subred in self.red.subnets(new_prefix=prefijo):
            if subred not in self.subredes_usadas:
                self.subredes_usadas.append(subred)
                return subred
        return None

    def show_network_pool(self):
        todas_las_subredes = list(self.red.subnets())
        disponibles = [s for s in todas_las_subredes if s not in self.subredes_usadas]
        return disponibles

# Ejemplo de uso
net = NetworkSubnet('192.168.0.0/24')
subred = net.get_subnet(28)
print(subred)  # 192.168.0.0/28
print(net.show_network_pool())