【发布时间】:2014-07-13 14:00:40
【问题描述】:
用inet_pton 转换一个IPv4 来比较它是否在IPv4 的范围内是相当简单的。但是,我不确定如何使用 inet_pton 和 in6_addr 并查看它是否小于/大于另一个 IP。这就是我的想法:
#include <arpa/inet.h>
...
const char *ip6str = "0:0:0:0:0:ffff:c0a8:3";
const char *first = "0:0:0:0:0:ffff:c0a8:1";
const char *last = "0:0:0:0:0:ffff:c0a8:5";
struct in6_addr result, resfirst, restlast;
uint8_t ipv6[16]; // perhaps to hold the result?
inet_pton(AF_INET6, first, &resfirst);
inet_pton(AF_INET6, last, &reslast);
inet_pton(AF_INET6, ip6str, &result);
//assuming inet_pton succeed
if(result.s6_addr >= resfirst.s6_addr && result.s6_addr <= reslast.s6_addr)
//within range
【问题讨论】:
-
大概你的意思是前两个
inet_pton分别使用first和last,而不是ip6str。 -
@JoachimPileborg,测试地址是否在 OP 中的代码所做的预定义范围内是一种情况。另一个可能是在地图中存储 IP 地址。
-
@ooga 已更新。谢谢
标签: c comparison ipv6