是否有任何代码用于bitwise和ipv6地址和网络掩码(前缀)?

iya*_*sar 9 c c++ networking ipv6

我想问一下ipv6网络和主机端的计算.

例如,我有IPv6地址2001:470:1f15:1bcd:34::41和前缀96.

你知道and在IPv6地址和前缀之间做一个简单的方法吗?

根据IPv4:

192.168.1.2  255.255.255.0  network : 192.168.1.0
Run Code Online (Sandbox Code Playgroud)

很简单.

我想对IPv6地址做同样的事情.但IPv6地址是16个字节,所以你不能使用unsigned int它.

有没有API可以做到这一点?或者我应该使用数组?

Dam*_*igh 0

请参阅函数in6_addr_maskin6_addr_start来自in6calc.c

用法示例:

struct in6_addr addr, mask, start;
char addr_buffer[INET6_ADDRSTRLEN] = "2001:470:1f15:1bcd:34::41";
uint8_t bits = 96; 

inet_pton(AF_INET6, addr_buffer, &addr);

in6_addr_mask(&mask, bits); // Mask
in6_addr_start(&start, &addr, &mask); // Bitwise &

inet_ntop(AF_INET6, &start, addr_buffer, INET6_ADDRSTRLEN);
printf("Network:    %s\n", addr_buffer);
Run Code Online (Sandbox Code Playgroud)

产量:

Network:    2001:470:1f15:1bcd:34::
Run Code Online (Sandbox Code Playgroud)