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

 

今天碰到了这样的一个问题。上网勾了老半天,看到的大部份是在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函数获得。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值