我正在尝试比较IP地址并查看它是否适合某个范围(即网络ID和广播ID)
starting =(rt_walker->dest).s_addr;
subnet = (rt_walker->mask).s_addr;
broadcast = starting | (~subnet);
if(ip_address>=starting && ip_address<=broadcast){
found_route =1;
}
此代码工作正常,但如果我的“10.0.0.0”为rt_walker-&gt; dest那么 这一行(rt_walker-&gt; dest).s_addr给了我10而不是32位二进制值。因此,如果将“10.0.0.0”(起始地址)与“9.90.100.78”(正在比较的IP_address)进行比较,它总是落在范围(10 - 10.255.255.255)中,这不应该是真的。
答案 0 :(得分:3)
以下是比较两个IP地址的快捷方法:
int ipa_match(uint32_t addr1, uint32_t addr2, uint32_t mask)
{
return !((addr1 ^ addr2) & mask);
}
XOR告诉您两个地址中的哪些位不同。 AND告诉您它们在屏蔽部分中是否不同。其余的应该是不言自明的。
答案 1 :(得分:2)
正如评论中提到的@deviantfan,我只需要
htonl((rt_walker->dest).s_addr)
它完美无缺!!