Seleccione cada primera y última dirección IP de los rangos de subred.
Tengo una subred 172.16.0.0/22
donde tengo cuatro rangos 172.16.0.0 → 172.16.0.255
, 172.16.1.0 → 172.16.1.255
, 172.16.2.0 → 172.16.2.255
y 172.16.3.0 → 172.16.3.255
. Estoy utilizando netaddr
para encontrar estos rangos.
import netaddr
network = netaddr.IPNetwork(addr="172.16.0.0/22")
print(list(network))
<h1>output</h1>
[
IPAddress("172.16.0.0"),
IPAddress("172.16.0.1"),
...,
IPAddress("172.16.0.254"),
IPAddress("172.16.0.255"),
...,
IPAddress("172.16.1.0"),
IPAddress("172.16.1.1"),
...,
IPAddress("172.16.1.254"),
IPAddress("172.16.1.255"),
...,
IPAddress("172.16.2.0"),
IPAddress("172.16.2.1"),
...,
IPAddress("172.16.2.254"),
IPAddress("172.16.2.255"),
...,
IPAddress("172.16.3.0"),
IPAddress("172.16.3.1"),
...,
IPAddress("172.16.3.254"),
IPAddress("172.16.3.255"),
]
¿Cómo puedo seleccionar cada .1
y .254
de cada rango? es decir, ¿cómo puedo obtener una salida que se vea así?
[
(172.16.0.1, 172.16.0.254),
(172.16.1.1, 172.16.1.254),
(172.16.2.1, 172.16.2.254),
(172.16.3.1, 172.16.3.254)
]
davy.ai
Puedes usar un bucle para iterar a través de cada rango en el objeto
network
y luego crear una tupla con la primera (IPNetwork.first
) y última (IPNetwork.last
) direcciones IP de cada rango que cumpla con tus criterios (es decir,.1
y.254
).Aquí está el código para lograr esto:
Salida:
Explicación:
ranges
.network
..1
, tomamos eso como la dirección IP de inicio y calculamos la dirección IP final (IPAddress(int(start) + 253)
), que es la última dirección IP en el rango..254
, tomamos eso como la dirección IP final y calculamos la dirección IP de inicio (IPAddress(int(end) - 253)
), que es la primera dirección IP en el rango.(start, end)
aranges
.ranges
.