LINUX c++ 遍历网卡列表

来源:互联网 发布:android 开机启动优化 编辑:程序博客网 时间:2024/05/16 16:11

直接扔代码:

#include <iostream>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <net/if.h>#include <netdb.h>#include <arpa/inet.h>#include <sys/ioctl.h>using namespace std;void show_all_if(){int fdSock = 0;struct ifconf ifMyConf;struct ifreq ifMyReq;char szBuf[20480] = {0};char * ip;ifMyConf.ifc_len = 2048;ifMyConf.ifc_buf = szBuf;if((fdSock = socket (AF_INET, SOCK_DGRAM, 0)) < 0  ){cout << "socket error" <<endl;return;}if(ioctl (fdSock, SIOCGIFCONF, &ifMyConf)){close(fdSock);cout << "ioctl error \n"<<endl;return;}ifreq *it = ifMyConf.ifc_req;const struct ifreq * const end = it + (ifMyConf.ifc_len / sizeof(struct ifreq));for(;it != end; ++it){strcpy(ifMyReq.ifr_name, it->ifr_name);cout<< ifMyReq.ifr_name <<endl;if(ioctl(fdSock, SIOCGIFADDR, &ifMyReq) == 0){string strAddr;struct sockaddr_in *sin;sin = (struct sockaddr_in*) &ifMyReq.ifr_addr;strAddr = (const char *) inet_ntoa(sin->sin_addr);cout << "ip addr : "<<strAddr.c_str()<<endl;}else{cout << "get mac info error \n"<<endl;}if(ioctl(fdSock, SIOCGIFNETMASK, &ifMyReq) == 0){string strMask;struct sockaddr_in *sin;sin = (struct sockaddr_in*) &ifMyReq.ifr_netmask;strMask = (const char *) inet_ntoa(sin->sin_addr);cout << "net mask : "<<strMask.c_str()<<endl;}else{cout << "get mask info error \n"<<endl;}if(strstr(ifMyReq.ifr_name, "ppp")){if((ioctl(fdSock, SIOCGIFDSTADDR, &ifMyReq)) == 0){string strAddr;struct sockaddr_in *sin;sin = (struct sockaddr_in*) &ifMyReq.ifr_dstaddr;strAddr = (const char *) inet_ntoa(sin->sin_addr);cout << "P-T-P : "<<strAddr.c_str()<<endl;}else{cout << "get P-T-P info error \n"<<endl;}}}close(fdSock);}int main (){show_all_if();system("read");}


0 0
原创粉丝点击