簡體   English   中英

如何在C中比較兩個IP地址?

[英]How to compare two ip address in c?

我正在嘗試比較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;
 }

這段代碼可以正常工作,但是如果我的rt​​_walker-> dest具有“ 10.0.0.0”,則此行(rt_walker-> dest).s_addr給我10而不是32位二進制值。 因此,如果將“ 10.0.0.0”(起始地址)與“ 9.90.100.78”(要比較的IP地址)進行比較,則該值始終落在范圍(10-10.255.255.255)中,這不應該為真。

這是比較兩個IP地址的快速簡便的方法:

int ipa_match(uint32_t addr1, uint32_t addr2, uint32_t mask)
{
    return !((addr1 ^ addr2) & mask);
}

XOR告訴您兩個地址中的哪些位不同。 AND會告訴您它們在被掩蓋部分是否不同。 其余的應該是不言自明的。

正如@deviantfan在評論中提到的,我只需要

htonl((rt_walker->dest).s_addr)

而且效果很好!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM