linux和Qt下获取本机每个接口的ip地址

来源:互联网 发布:安迪大师飞越黄河知乎 编辑:程序博客网 时间:2024/06/06 13:14
#include <stdio.h>  #include <sys/ioctl.h>  #include <sys/socket.h>  #include <sys/types.h>  #include <netdb.h>  #include <net/if.h>  #include <arpa/inet.h>  #define ERRORIP "cannot find host ip"  char *ip_search(void)  {      int sfd, intr;      struct ifreq buf[6];//最多6个网络接口      struct ifconf ifc;      sfd = socket (AF_INET, SOCK_DGRAM, 0);       if (sfd < 0)          return ERRORIP;      ifc.ifc_len = sizeof(buf);//先给一个大小,最后获得真实大小      ifc.ifc_buf = (caddr_t)buf;      if (ioctl(sfd, SIOCGIFCONF, (char *)&ifc))          return ERRORIP;      intr = ifc.ifc_len / sizeof(struct ifreq); //网络接口数量     while (intr-- > 0 && ioctl(sfd, SIOCGIFADDR, (char *)&buf[intr])); //获取每个接口的ip地址,结构为ifreq    close(sfd);      return inet_ntoa(((struct sockaddr_in*)(&buf[intr].ifr_addr))-> sin_addr); //网络格式ip地址转成字符串格式 }  int main(void)  {      printf("%s\n", ip_search());      return 0;  } 
在Qt下,
foreach(QNetworkInterface interface, QNetworkInterface::allInterfaces()){        qDebug()<<interface.name<<interface.hardwareAddress;        foreach(QNetworkAddressEntry entry,interface.addressEntries()){            qDebug()<<entry.ip()<<entry.netmask();        }}
或者直接调用QNetworkInterface::allAddress()返回本机所有ip地址。


原创粉丝点击