zoukankan      html  css  js  c++  java
  • Linux C代码 获取IP地址

    Ubuntu 16.04下,可编译通过:

     1 #include <stdio.h>
     2 #include <ifaddrs.h>
     3 #include <arpa/inet.h>
     4 #include <cstring>
     5 
     6 #define MAX_LENGTH 254
     7 
     8 int main(void)
     9 {
    10     char ipAddr[MAX_LENGTH];
    11 
    12     ipAddr[0] = '';
    13 
    14     struct ifaddrs * ifAddrStruct = NULL;
    15     void * tmpAddrPtr = NULL;
    16 
    17     if (getifaddrs(&ifAddrStruct) != 0)
    18     {
    19         //if wrong, go out!
    20         printf("Somting is Wrong!
    ");
    21         return -1;
    22     }
    23 
    24     struct ifaddrs * iter = ifAddrStruct;
    25 
    26     while (iter != NULL) {
    27         if (iter->ifa_addr->sa_family == AF_INET) { //if ip4
    28             // is a valid IP4 Address
    29             tmpAddrPtr = &((struct sockaddr_in *)iter->ifa_addr)->sin_addr;
    30             char addressBuffer[INET_ADDRSTRLEN];
    31             inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
    32             if (strlen(ipAddr) + strlen(addressBuffer) < MAX_LENGTH - 1)
    33             {
    34                 if (strlen(ipAddr) > 0)
    35                 {
    36                      strcat(ipAddr, ";");
    37                 }
    38                 strcat(ipAddr, addressBuffer);
    39             }
    40             else
    41             {
    42                 printf("Too many ips!
    ");
    43                 break;
    44             }
    45         }
    46         //else if (ifaddrstruct->ifa_addr->sa_family == af_inet6) { // check it is ip6
    47 
    48         /* deal ip6 addr */
    49         //    tmpaddrptr = &((struct sockaddr_in *)ifaddrstruct->ifa_addr)->sin_addr;
    50         //    char addressbuffer[inet6_addrstrlen];
    51         //    inet_ntop(af_inet6, tmpaddrptr, addressbuffer, inet6_addrstrlen);
    52 
    53         //}
    54         iter = iter->ifa_next;
    55     }
    56     //releas the struct
    57     freeifaddrs(ifAddrStruct);
    58 
    59     printf("The ips: %s
    ", ipAddr);
    60 
    61     return 0;
    62 }

    效果:

     

  • 相关阅读:
    oralce索引的使用
    oracle中connect by prior的使用
    oracle函数listagg使用
    oracle函数的使用
    redis高可用集群搭建
    Node.js安装及环境配置之Windows篇
    Repeater 合并单元格
    c#16进制转浮点数单精度类型
    EF Core 实体映射表或视图
    docker 构建filebeat镜像
  • 原文地址:https://www.cnblogs.com/huoqs/p/8551461.html
Copyright © 2011-2022 走看看