2013-10-28 145 views
0

我使用this程序查找我的Debian機器的所有IP地址。雖然我可以用「ifaddrs」結構的ifa_name領域,像如何查找IP地址是否是鏈接本地地址

struct ifaddrs * ifAddrsStruct=NULL; 
    getifaddrs(&ifAddrsStruct); 
    if (!strcmp(ifAddrIterator->ifa_name,"lo")) 
    // Filter these addresses 

我想知道刪除我的回送地址有沒有什麼方法可以讓我找到了,從IP地址列表,無論是IP地址是一個本地鏈路(僅用於網段內通信的網絡地址)或不是。提前致謝。

回答

0

開始:

sockaddr* addr = ifAddrsStruct->ifa_addr; 

現在,對於IPv4的鏈路本地地址在地址塊169.254.0.0/16定義的,因此:

  • 如果addr->sa_family == AF_INET
  • 比較static_cast<sockaddr_in*>(addr)->sin_addr針對範圍。

在IPv6中,他們被分配與fe80::/64前綴,所以:

  • 如果addr->sa_family == AF_INET6
  • 比較static_cast<sockaddr_in6*>(addr)->sin6_addr針對前綴。
+0

感謝您的回覆。那麼,我是否必須將我的IP地址與IP地址的整個範圍進行比較?像memcmp()或者是否有更簡單的API可用。請承擔我..我是初學者.. – 302Found

+0

@ 302發現:老實說,我不確定。 –

+1

您只需比較前16位(IPv4)或64位(IPv6)。 – EJP