Maneira rápida de calcular IP de sub-rede e IP de transmissão

0

Estou com problemas para encontrar um método rápido / eficaz para determinar o intervalo de IP válido com base no IP do roteador e na máscara de rede fornecidos

Eu sei calcular o IP de sub-rede e o IP de broadcast convertendo todo o IP e a máscara de rede em binário e fazendo bitwise AND / OR, mas essa abordagem leva muito tempo e levará facilmente a erros ...

    
por f855a864 24.10.2014 / 08:51

2 respostas

1

Existem vários sites e aplicativos que farão o cálculo para você, como o link .

Caso contrário, use a máscara de rede para calcular o tamanho da sub-rede (2 para a potência do número de bits zero na máscara de rede). Encontre o endereço IP mais alto que seja um múltiplo exato do tamanho da sub-rede, mas que seja menor que o endereço IP do roteador. Esse endereço IP é o endereço da rede, e o endereço IP mais o tamanho da sub-rede menos 1 é o endereço de transmissão.

    
por 24.10.2014 / 09:05
1

Se algo demorar, faça o roteiro.

O Python tem o módulo ipaddress :

$ 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()
    
por 24.10.2014 / 10:56

Tags