2012-05-29 36 views
2

我使用的一個小片段就像尋找一個特定的網絡地址:getifaddrs是否給我重複的網絡接口地址?

char name[INET_ADDRSTRLEN]; 
    struct ifaddrs *iflist; 
    if (getifaddrs(&iflist) < 0) 
    perror("getifaddrs"); 

    struct in_addr addr; 
    for (struct ifaddrs *p = iflist; p; p = p->ifa_next) 
    { 
     if (strcmp(p->ifa_name, "lo") == 0) 
     { 
      addr = reinterpret_cast<struct sockaddr_in*>(p->ifa_addr)->sin_addr; 
      if (inet_ntop(AF_INET, &addr, name, sizeof(name)) == NULL) 
      { 
       perror("inet_ntop"); 
       continue; 
      } 

      cout << name << " ---> " << if_nametoindex("lo") << " : " << addr.s_addr << endl; 
     } 
    } 

和輸出我得到的是:

1.0.0.0 ---> 1 : 1 
127.0.0.1 ---> 1 : 16777343 

我不明白第一result..this犯規發生像eth#這樣的東西,但它與另一個名爲bond0的接口有關。這是什麼?

+0

這看起來不像C :) –

+0

ok減去reinterpret_cast部分... –

+0

'cout'和'<<'? –

回答

5

getifaddr是非標準的。我想你在linux系統上使用它。該名男子頁有有注:

返回的地址在Linux上通常是分配給該接口的IPv4和IPv6 地址,但也包含了關於界面較低級別的細節一個AF_PACKET地址 每 接口和它的物理層。在這種情況下,ifa_data字段 可能包含一個 指向結構net_device_stats的指針,該結構定義於其中,其中包含各種接口屬性和統計信息。

您可能應該檢查ifa_addr->sa_family如果這有你期望的家庭。

+0

這完全正確!謝謝 –

相關問題