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字符开始,二进制值是十六进制的1111。如果有余数,则根据余数添加下一个字符。如果余数是1则下一个字符是8,如果余数是2则下一个字符是c,如果余数是3则下一个字符是e。然后0根据需要添加尽可能多的 ' 以获得总共 32 个字符。:然后在每四个字符后添加一个分隔符。

如果您愿意,可以应用地址符号压缩:-)

例子:

/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::'

/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::'

/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::'

/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::'

/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 回答