Estou tendo problemas para encontrar um método rápido/eficaz para determinar o intervalo de IP válido com base no IP e na máscara de rede do roteador
Eu sei como calcular o IP da sub-rede e o IP de transmissão convertendo todo o IP e máscara de rede em binário e fazendo AND / OR bit a bit, mas essa abordagem leva muito tempo e facilmente levará a erros ...
Responder1
Existem vários sites e aplicativos que farão o cálculo para você, comohttp://www.subnet-calculator.com/cidr.php.
Caso contrário, use a máscara de rede para calcular o tamanho da sub-rede (2 elevado à potência do número de zero bits na máscara de rede). Encontre o endereço IP mais alto que seja um múltiplo exato do tamanho da sub-rede, mas seja menor que o endereço IP do roteador. Esse endereço IP é o endereço de rede, e o endereço IP mais o tamanho da sub-rede menos 1 é o endereço de broadcast.
Responder2
Se algo levar tempo, faça um script.
Python possui o ipaddress
módulo:
$ python
Python 3.4.2 (default, Oct 8 2014, 13:44:52)
>>> import ipaddress
>>> x = ipaddress.IPv6Interface("2001:470:709a:107::1a2b:3c/64")
>>> x.network
IPv6Network('2001:470:709a:107::/64')
>>> y = ipaddress.IPv4Interface("194.219.181.195/26")
>>> y.network
IPv4Network('194.219.181.192/26')
>>> y.network.network_address
IPv4Address('194.219.181.192')
>>> y.network.broadcast_address
IPv4Address('194.219.181.255')
O que resultaria em:
#!/usr/bin/env python
import ipaddress
import sys
for arg in sys.argv[1:]:
addr = ipaddress.ip_interface(arg)
print("address =", addr)
print("network =", addr.network)
if addr.version == 4:
print("netmask =", addr.netmask)
print("broadcast =", addr.network.broadcast_address)
print()