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可以做到这一点?或者我应该使用数组?
请参阅函数in6_addr_mask和in6_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)