1. 程式人生 > >獲取網絡卡名稱 linux c

獲取網絡卡名稱 linux c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <net/if.h>
#include <sys/ioctl.h>

int main()
{
int i=0;
int sockfd;
struct ifconf ifc;
unsigned char buf[512];
struct ifreq *ifr;

//初始化ifconf

ifc.ifc_len = 512;
ifc.ifc_buf = buf;

if((sockfd = socket(AF_INET, SOCK_DGRAM, 0))<0)
{
perror("socket");
exit(1);
}  
ioctl(sockfd, SIOCGIFCONF, &ifconf);    //獲取所有介面資訊

//接下來獲取逐個網絡卡的名稱和IP地址
ifr = (struct ifreq*)buf;  
for(i=(ifc.ifc_len/sizeof(struct ifreq)); i>0; i--)
{
printf("name = [%s]\n", ifreq->ifr_name);

printf("local addr = [%s]\n",  inet_ntoa(((struct sockaddr_in*)&(ifreq->ifr_addr))->sin_addr));

ifr++;

}

return 0;
}