局域网内,已知IP地址,获得MAC地址

来源:互联网 发布:extjs获取store数据 编辑:程序博客网 时间:2024/05/18 03:01

 

今天碰到了这样的一个问题。上网勾了老半天,看到的大部份是在window下实现的。但是我要在linux下编程获得,网上有些方法太复杂了,选了两种比较简单的,记一下以作参考。

方法一、使用系统的命令arping

命令格式:arping IP Address

该命令返回的内容就有包含访问IP对应的MAC地址,再通过脚本编程,就可以获得它的MAC地址了。

方法二、访问 /proc/net/arp 这个文件的内容。

这是一个临时文件,它记录着访问本机的IP地址、MAC地址等信息,我们就可以通过读取这个文件来获得MAC地址。(我就是要在CGI程序中获得访问客户端的IPMAC,下面是简单的实现程序。)

#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函数获得。

 

原创粉丝点击