如何获取 IP 地址(IPv4 为空,但存在 IPv6),内容的详细信息
How to get IP address (IPv4 is NULL, but IPv6 is exist), detail for content
抱歉,标题可能令人困惑。例如,eth1 代替 br100。所以eth1的ipv4地址是空的。
/etc/networks/interfaces
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;
}
}
}
}
多亏了伙计们,我已经解决了我的问题。
简而言之,我将所有函数(大约getIPv4
、getMAC
、getIPv6
......)组合到getHostinfo
函数中。然后,它通过for loop
(接口计数)逐个获取主机信息。
最后,我非常感谢所有人^__^
相关文章:
- C++模板来检查友元函数的存在
- 既然存在危险,为什么项目要使用-I include开关
- 我们可以访问一个不存在的联盟的成员吗
- C++:对不存在的命名空间使用命名空间指令
- C++quit()函数中可能存在作用域问题
- C++擦除(如果存在)
- g++ 说函数不存在,即使包含正确的标头
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 有了gcc,是否可以链接库,但前提是它存在
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- C++Builder中的OnClick事件签名存在问题
- 如何正确地将分支添加到已存在的树中
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 如何检查QList中是否存在值
- 根据某个函数是否存在启用模板
- 如何将分支添加到已存在的TTree:ROOT
- 地图计数确实很重要,或者只是检查是否存在
- 通用C++/Python 多语言的存在
- 如何获取 IP 地址(IPv4 为空,但存在 IPv6),内容的详细信息