2012-05-03 30 views
0

对不起,标题可能被迷惑的细节。例如,eth1代替br100。 因此eth1的ipv4地址为NULL。如何获得IP地址(IPv4为NULL,但IPv6是存在的),内容

的/ etc /网络/接口

br100 Link encap:Ethernet HWaddr 00:0c:29:75:e2:0a 
inet addr:192.168.11.249 Bcast:192.168.11.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe75:e20a/64 Scope:Link 

eth1 Link encap:Ethernet HWaddr 00:0c:29:75:e2:0a 
inet6 addr: fe80::20c:29ff:fe75:e20a/64 Scope:Link 

我该怎么做才能阅读时,我得到的eth1的IPv4的NULL价值?

这里是我的getipv4功能:

sIPv4 = new string[giIfaceCount]; 
struct ifaddrs *ifAddrStruct; 
struct ifaddrs *ifa; 
void *tmpAddrPtr; 
if (getifaddrs(&ifAddrStruct) == -1) 
{ 
    perror("getifaddrs"); 
    exit(1); 
} 
int iFlag4 = 0; 
for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) 
{ 
    if (ifa->ifa_addr->sa_family == AF_INET) 
    { 
     tmpAddrPtr=&((struct sockaddr_in *)ifa->ifa_addr)->sin_addr; 
     char addressBuffer[1024]; 
     if (strcmp(inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, 1024),"NULL") == 0) 
     { 
      cout << "addressBuffer = NULL" << endl; 
     } 
     else 
     { 
      inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, 1024); 
      if (strcmp(ifa->ifa_name,"lo") == 0) 
      { 
       continue; 
      } 
      else 
      { 
       *(sIPv4+iFlag4) = addressBuffer; 
       testIPv4.append(addressBuffer); 
       testIPv4.append(" "); 
       iFlag4 = iFlag4+1; 
      } 
     } 
    } 
} 
+0

标题的确令人困惑。我建议你再试一次。你更可能用一个描述性标题得到答案。 – EJP

+0

检查eth1是否加入网桥组,然后检查以查看网桥组是否有配置的地址有什么问题? –

回答

1

感谢球员,我已经解决了我的问题。

简单地说,我已经合并的所有功能(约getIPv4getMACgetIPv6 ...)为getHostinfo功能。 然后,它通过一个for loop(接口计数)获得主机信息。

最后,我非常感谢所有的人。^__^