c/c++ 網絡編程 UDP 用if_nameindex和ioctl取得主機網絡信息
阿新 • • 發佈:2018-10-15
soc n-2 技術分享 ram ddr con ioc alt lis
網絡編程 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\t%d\n", 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\n", 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\n",ifr[i].ifr_name); } close(fd); return 0; }
github源代碼
c/c++ 學習互助QQ群:877684253
本人微信:xiaoshitou5854
c/c++ 網絡編程 UDP 用if_nameindex和ioctl取得主機網絡信息