2

2 セットの IP のネットマスクを抽出し、それを CIDR 形式で画面に出力する必要があります。これを行うためにシェルまたは tcl のいずれかを使用することを考えています。ここでの主な注意点は、16 進数のネットマスクを CIDR 形式に変換することだと思います。

いくつかの異なることを試しましたが、期待どおりに機能していないようです。

4

2 に答える 2

2

これを可能にするtclパッケージユーティリティがあることがわかりました。

package require ip
::ip::maskToLength <hex_netmask> 

これにより、ネットマスクのCIDR形式が出力されます。

于 2012-12-17T11:36:48.567 に答える
2

マスクの桁を反復処理し、各桁に設定されたビット数を合計する関数を書くことができます。CIDR 準拠のネットマスクで有効な数字は 5 桁だけです。

Bash には、変数の部分文字列を取得するための${variable:offset}および${variable:offset:length}置換があるため、一度に 1 つずつ数字を取り出すのは非常に簡単です。

function bitCountForMask {
    local -i count=0
    local mask="${1##0x}"
    local digit

    while [ "$mask" != "" ]; do
        digit="${mask:0:1}"
        mask="${mask:1}"
        case "$digit" in
            [fF]) count=count+4 ;;
            [eE]) count=count+3 ;;
            [cC]) count=count+2 ;;
            8) count=count+1 ;;
            0) ;;
            *)
                echo 1>&2 "error: illegal digit $digit in netmask"
                return 1
                ;;
        esac
    done

    echo $count
}
于 2012-12-17T05:02:12.920 に答える