zoukankan      html  css  js  c++  java
  • c/c++ 网络编程 UDP 用if_nameindex和ioctl取得主机网络信息

    网络编程 UDP 用if_nameindex和ioctl取得主机网络信息

    getifaddrs函数取得的东西太多了,如果只想取得网卡名字和网卡编号可以用下面的2个函数。

    1,if_nameindex 取得网卡名字和网卡编号

    #include <stdio.h>
    #include <net/if.h>
    
    int main(){
      struct if_nameindex *idxlist, *idx;
    
      idxlist = if_nameindex();
      if(idxlist == NULL){
        perror("if_nameindex");
        return 1;
      }
    
      for(idx = idxlist; idx->if_name != NULL && idx->if_index != 0;++idx){
        printf("%s	%d
    ", idx->if_name, idx->if_index);
      }
    
      if_freenameindex(idxlist);
    
      return 0;
    }
    

    github源代码

    2,ioctl 取得网卡的名字。

    注意点:ioctl调用了2次,第一次是为了得到ifc.ifc_len,第二次用得到了ifc.ifc_len的精确大小,来开辟内存空间。

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <net/if.h>
    #include <sys/ioctl.h>
    
    int main(){
      ifconf ifc;
      ifreq* ifr;
      int fd;
      int nifs, i;
    
      fd = socket(AF_INET, SOCK_DGRAM, 0);
    
      ifc.ifc_len = 0;
      ifc.ifc_ifcu.ifcu_buf = NULL;
    
      ioctl(fd, SIOCGIFCONF, &ifc);
      printf("%d
    ", ifc.ifc_len);
    
      if(ifc.ifc_len == 0){return 1;}
    
      ifc.ifc_ifcu.ifcu_buf = (char*)malloc(ifc.ifc_len);
      ioctl(fd, SIOCGIFCONF, &ifc);
    
      nifs = ifc.ifc_len / sizeof(ifreq);
    
      ifr = (ifreq*)ifc.ifc_ifcu.ifcu_buf;
      for(i = 0; i < nifs; ++i){
        printf("%s
    ",ifr[i].ifr_name);
      }
    
      close(fd);
    
      return 0;
    }
    
    

    github源代码

    c/c++ 学习互助QQ群:877684253

    本人微信:xiaoshitou5854

  • 相关阅读:
    ant desigon Upload控件能否提供隐藏删除图标的属性以及鼠标停留在删除图标上的提示文字怎么设置为中文
    2月5日进度
    2月4日学习进度
    2月3日学习进度
    2月2日学习进度
    大数据之linux环境下jdk hadoop以及hbase,hive等配置
    MVC实例
    MVC简介
    23种设计模式
    xxx系统可用性和易用性分析
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/9789111.html
Copyright © 2011-2022 走看看