開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
net/if.h , netinet/in.h , arpa/inet.h
問題(Question):
因為eth1當成bridge使用,致使eth1中的IPv4沒有值,
但因為我還是需要get eth1的其他資訊(ipv6, mac...)
所以我想問各位,有辦法在get網卡的ipv4時,
若發現該網卡沒有值,我可以當成NULL來讀嗎?
是要在程式的哪邊做判斷,並且做寫入呢?
程式碼(Code):(請善用置底文網頁, 記得排版)
void CHostinfo::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;
}
}
}
}
}
補充說明(Supplement):
最後希望可以得到
eth1的ipv4 address: NULL
而不會因為沒有值就直接跳過,讀其他網卡的資訊。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.250.129.63