Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何获取IP地址(IPv4为空,但IPv6存在),内容的详细信息_C++_C_Linux_Networking - Fatal编程技术网

C++ 如何获取IP地址(IPv4为空,但IPv6存在),内容的详细信息

C++ 如何获取IP地址(IPv4为空,但IPv6存在),内容的详细信息,c++,c,linux,networking,C++,C,Linux,Networking,对不起,标题可能会混淆。 例如,eth1替代br100。 所以eth1的ipv4地址为空 /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 H

对不起,标题可能会混淆。 例如,eth1替代br100。 所以eth1的ipv4地址为空

/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;
            }
        }
    }
}
sIPv4=新字符串[giifaccount];
结构ifaddrs*ifAddrStruct;
结构ifaddrs*ifa;
void*tmpAddrPtr;
if(getifaddrs(&ifaddstruct)==-1)
{
perror(“getifaddrs”);
出口(1);
}
int iFlag4=0;
对于(ifa=ifAddrStruct;ifa!=NULL;ifa=ifa->ifa\U next)
{
如果(ifa->ifa\U地址->sa\U系列==AF\U INET)
{
tmpAddrPtr=&((结构sockaddr_in*)ifa->ifa_addr)->sin_addr;
字符地址缓冲区[1024];
if(strcmp(inet_ntop(AF_inet,tmpAddrPtr,addressBuffer,1024),“NULL”)==0)
{

多亏了伙计们,我已经解决了我的问题

简而言之,我已经将所有函数(关于
getIPv4
getMAC
getIPv6
…)组合到
getHostinfo
函数中。 然后,它通过循环
(接口计数)一个接一个地获取主机信息


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

标题确实令人困惑。我建议您再试一次。您很可能会得到一个描述性标题的答案。检查eth1是否参与网桥组,然后检查所述网桥组上是否配置了地址有什么错?