0

私のIPv6の知識は非常に限られていますが、この質問を解決するのに役立ちますか?既知のように、IPv4の場合、ネットマスクが25の場合、マッピングアドレスは255.255.255.128である必要があります。算術のコードは次のようなものです。

public static String getNetmaskFromBits( int bits )
    {
        StringBuilder b = new StringBuilder( 15 );
        int tempBits = 0xFFFFFFFF;
        tempBits = tempBits << 32 - bits;
        b.append( ( tempBits & 0xFF000000 ) >>> 24 ).append( '.' );
        b.append( ( tempBits & 0x00FF0000 ) >>> 16 ).append( '.' );
        b.append( ( tempBits & 0x0000FF00 ) >>> 8 ).append( '.' );
        b.append( tempBits & 0x000000FF );
        return b.toString();
    }

IPv6はどうですか?128ビットにすることができます。IPv6アドレスにマッピングするにはどうすればよいですか?コードは次のようになります。

public static String getIpv6NetmaskFromBits( int bits )
    {
        StringBuilder b = new StringBuilder( 15 );
        ...
        return b.toString();
    }
4

1 に答える 1

1

IPv6では、そのようなマスキングはもう行いません。プレフィックスは、のように常にCIDR表記を使用して表示されます2001:db8::/32

本当にこれを実行したい場合、最も簡単な方法は、プレフィックスの長さを4で割ることです。その数のf文字から始めます。これは、2進値の16進数です1111。余りがある場合は、余りに基づいて次の文字を追加します。剰余の場合は1次の文字は8、剰余の場合は2次の文字c、剰余の場合3は次の文字はeです。次に、必要な数のを追加して0、合計32文字を取得します。:次に、 4文字ごとに区切り文字を追加します。

必要に応じて、アドレス表記の圧縮を適用します:-)

例:

A /32

Divide: 32 / 4 = 8
8 * f = 'ffffffff'
Add 0's: 'ffffffff000000000000000000000000'
Add separators: 'ffff:ffff:0000:0000:0000:0000:0000:0000'
Compress notation: 'ffff:ffff::'

A /33

Divide: 33 / 4 = 8, remainder: 1
8 * f = 'ffffffff'
Add for remainder: 'ffffffff8'
Add 0's: 'ffffffff800000000000000000000000'
Add separators: 'ffff:ffff:8000:0000:0000:0000:0000:0000'
Compress notation: 'ffff:ffff:8000::'

A /34

Divide: 34 / 4 = 8, remainder: 2
8 * f = 'ffffffff'
Add for remainder: 'ffffffffc'
Add 0's: 'ffffffffc00000000000000000000000'
Add separators: 'ffff:ffff:c000:0000:0000:0000:0000:0000'
Compress notation: 'ffff:ffff:c000::'

A /35

Divide: 35 / 4 = 8, remainder: 3
8 * f = 'ffffffff'
Add for remainder: 'ffffffffe'
Add 0's: 'ffffffffe00000000000000000000000'
Add separators: 'ffff:ffff:e000:0000:0000:0000:0000:0000'
Compress notation: 'ffff:ffff:e000::'

A /36

Divide: 36 / 4 = 9
9 * f = 'fffffffff'
Add 0's: 'fffffffff00000000000000000000000'
Add separators: 'ffff:ffff:f000:0000:0000:0000:0000:0000'
Compress notation: 'ffff:ffff:f000::'

等。

于 2013-02-01T09:45:46.323 に答える