如何比较c中的两个ip地址?

时间:2014-03-04 21:36:02

标签: c networking casting ip

我正在尝试比较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)中,这不应该是真的。

2 个答案:

答案 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)

它完美无缺!!