今天碰到了这样的一个问题。上网勾了老半天,看到的大部份是在window下实现的。但是我要在linux下编程获得,网上有些方法太复杂了,选了两种比较简单的,记一下以作参考。
方法一、使用系统的命令arping
命令格式:arping IP Address
该命令返回的内容就有包含访问IP对应的MAC地址,再通过脚本编程,就可以获得它的MAC地址了。
方法二、访问 /proc/net/arp 这个文件的内容。
这是一个临时文件,它记录着访问本机的IP地址、MAC地址等信息,我们就可以通过读取这个文件来获得MAC地址。(我就是要在CGI程序中获得访问客户端的IP和MAC,下面是简单的实现程序。)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char *hostip;
unsigned long int destip,dwRet;
unsigned long ullen;
char bymac[6];
FILE *fp;
char ip_addr[25],hw_type[25],flags[25],hw_addr[25],mask[25],device[25],tmp[25];
printf("Content-type:text/html;/n/n");
hostip=getenv("REMOTE_ADDR");//获得IP地址
printf("IP ADDRESS:%s/n",hostip);
fp=fopen("/proc/net/arp","r");//打开/proc/net/arp文件
if(fp==NULL)return 0;
fscanf(fp,"%s %s %s %s %s %s %s %s %s",tmp,tmp,tmp,tmp,tmp,tmp,tmp,tmp,tmp);
while(!feof(fp))
{
fscanf(fp,"%s %s %s %s %s %s",ip_addr,hw_type,flags,hw_addr,mask,device);
if(strcmp(ip_addr,hostip)==0)//比较IP地址,相同就输出MAC
{
printf("MAC ADDRESS:%s/n",hw_addr);
break;
}
}
return 0;
}
Window实现方法比较简单,就是用了SendARP函数获得。