サブネット IP とブロードキャスト IP をすばやく計算する方法

サブネット IP とブロードキャスト IP をすばやく計算する方法

与えられたルーターのIPとネットマスクに基づいて有効なIP範囲を決定するための迅速で効果的な方法を見つけるのに苦労しています

すべての IP とネットマスクをバイナリに変換し、ビット単位の AND/OR を実行してサブネット IP とブロードキャスト IP を計算する方法はわかっていますが、そのアプローチには時間がかかり、簡単に失敗につながります...

答え1

計算をしてくれるウェブサイトやアプリケーションはいろいろあります。例えば、http://www.subnet-calculator.com/cidr.php

それ以外の場合は、ネットマスクを使用してサブネットのサイズを計算します (ネットマスク内のゼロ ビットの数の 2 乗)。サブネット サイズの正確な倍数で、ルーターの IP アドレスよりも小さい最大の IP アドレスを見つけます。その IP アドレスがネットワーク アドレスであり、IP アドレスにサブネット サイズを足して 1 を引いたものがブロードキャスト アドレスです。

答え2

時間がかかる場合はスクリプト化します。

Python には次の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')

その結果は次のようになります:

#!/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()

関連情報