⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 get_mac.c

📁 在Linux操作系统下实现的软件交换技术
💻 C
字号:
/* * get_mac.c * * Return the MAC (ie, ethernet hardware) address by using system specific calls. */#include <stdio.h>#include <fcntl.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/ioctl.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <linux/if.h>#include "getmac_struct.h"#define e0 "eth0"#define e1 "eth1"#define e2 "eth2"#define e3 "eth3"#define P printflong get_mac( u_char *addr, int e){    struct ifreq ifr;    struct ifreq *IFR;    struct ifconf ifc;    char buf[1024];    int s, i;    int ok = 0;    int eth;    s = socket(AF_INET, SOCK_DGRAM, 0);    if (s==-1) {        return -1;    }    ifc.ifc_len = sizeof(buf);    ifc.ifc_buf = buf;    ioctl(s, SIOCGIFCONF, &ifc);    IFR = ifc.ifc_req;    for (i = ifc.ifc_len / sizeof(struct ifreq); --i >= 0; IFR++)    {        strcpy(ifr.ifr_name, IFR->ifr_name);	switch (e)	{	case 0 :		if(strcmp(ifr.ifr_name,e0)==0)		{		        if (ioctl(s, SIOCGIFFLAGS, &ifr) == 0)			{	        	    if (! (ifr.ifr_flags & IFF_LOOPBACK))		    		{        	        		if (ioctl(s, SIOCGIFHWADDR, &ifr) == 0)					{			    		ok = 1;	                    		break;	                		}        	    		}			}		}		break;	case 1 :		if(strcmp(ifr.ifr_name,e1)==0)			{		        	if (ioctl(s, SIOCGIFFLAGS, &ifr) == 0)				{	        	    		if (! (ifr.ifr_flags & IFF_LOOPBACK))		    			{        	        			if (ioctl(s, SIOCGIFHWADDR, &ifr) == 0)						{			    			ok = 1;	                    			break;	                			}        	    			}				}			}		break;	case 2 :		if(strcmp(ifr.ifr_name,e2)==0)			{		        	if (ioctl(s, SIOCGIFFLAGS, &ifr) == 0)				{	        	    		if (! (ifr.ifr_flags & IFF_LOOPBACK))		    			{        	        			if (ioctl(s, SIOCGIFHWADDR, &ifr) == 0)						{			    			ok = 1;	                    			break;	                			}        	    			}				}			}		break;	case 3 :		if(strcmp(ifr.ifr_name,e3)==0)			{		        	if (ioctl(s, SIOCGIFFLAGS, &ifr) == 0)				{	        	    		if (! (ifr.ifr_flags & IFF_LOOPBACK))		    			{        	        			if (ioctl(s, SIOCGIFHWADDR, &ifr) == 0)						{			    			ok = 1;	                    			break;	                			}        	    			}				}			}		break;	}//end of switch    }//end of for    close(s);    if (ok) {        bcopy( ifr.ifr_hwaddr.sa_data, addr, 12);    }    else {        return -1;    }    return 0;}//-----------------------------------------------------------int  print_mac(u_char *addr, int e){	int i;   	printf( "MAC address of eth%d: = ",e);       	for (i=0; i<6; ++i)	{            printf("%2.2x", addr[i]);        }        printf( "\n");	return 0;}//----------------------------------------------------------//Xay  dung module luu lai cac dia chi MAC vua lay duocvoid saveMac(u_char *addr,struct SwitchMac *a, int i){bcopy(addr,a->s_mac[i].mac,6);a->num_mac++;}//---------------------------------------------------------print_saveMac(struct SwitchMac *a){  int i,j,n;n=a->num_mac;printf("Save Mac:\n");for(i=0;i<n;i++){	 for (j=0; j<6; ++j)	{            printf("%2.2x", a->s_mac[i].mac[j]);        }        printf( "\n");}}//=========================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -