当前位置:  技术问答>linux和unix

如何获得远端机器的mac地址

    来源: 互联网  发布时间:2015-04-14

    本文导语:  我做一个服务器,想获得每个连接的客户端的mac地址,进行身份验证,怎么办 | 向远端机器发一个arp请求,然后接收回应包,从其中解析mac地址. | 建议你仔细看看http://www.dhcp-han...

我做一个服务器,想获得每个连接的客户端的mac地址,进行身份验证,怎么办

|
向远端机器发一个arp请求,然后接收回应包,从其中解析mac地址.

|
建议你仔细看看http://www.dhcp-handbook.com/dhcp_faq.html,这里有dhcpFAQ,介绍挺不错的。

|
struct  ether_arp {
        struct  arphdr ea_hdr;          /* fixed-size header */
        u_int8_t arp_sha[ETH_ALEN];     /* sender hardware address */
        u_int8_t arp_spa[4];            /* sender protocol address */
        u_int8_t arp_tha[ETH_ALEN];     /* target hardware address */
        u_int8_t arp_tpa[4];            /* target protocol address */
};
struct ether_arp *ap;
ap = (struct ether_arp *)bp;//bp为截获数据包的指针
然后将ap->arp_sha作为下面函数的参数,就可以打印出MAC地址了。
更详细的代码请参考tcpdump的源码

/*----------------------------------------------------------------------------
**
** etheraddr_string()
**
** Translate an ethernet address to a colon-delimited string
**
**----------------------------------------------------------------------------
*/

char *etheraddr_string(u_char *ep)
{
  u_int i, j;
  char *cp;
  struct enamemem *tp;
  char buf[sizeof("00:00:00:00:00:00")];
  tp = lookup_emem(ep);//源程序中有定义
  if (tp->e_name) return (tp->e_name);

  cp = buf;
  if ((j = *ep >> 4) != 0) *cp++ = hex[j];
  *cp++ = hex[*ep++ & 0xf];//static char hex[] = "0123456789abcdef";
  for (i = 5; (int)--i >= 0;) 
    {
      *cp++ = ':';
      if ((j = *ep >> 4) != 0) *cp++ = hex[j];
      *cp++ = hex[*ep++ & 0xf];
    }
  *cp = '';
  tp->e_name = strdup(buf);
  return (tp->e_name);
}

|
先要说明远端有多远,才能讨论这个问题。跨网段的是得不到的,只能得到路由器接口的MAC。

    
 
 

您可能感兴趣的文章:

  • Linux下局域网内如何根据对方机器的IP地址获得对方机器网卡的MAC地址?
  • Linux怎么获得局域网终其他windows机器的时间?
  • Java中如何获得本地的机器名?(新手上路)
  • redhat9.0怎样查看机器从DHCP获得的IP地址啊?
  • 如何获得机器上已经注册的所有ODBC数据源?
  • 一个问题:我如何获得自己机器的IP地址???
  • 如何获得本地机器IP问题?
  • get_free_pages后获得的虚拟内存地址如何才能转换成物理地址?
  • 请问怎样编程获得本机的MAC地址?还有能不能设置本机MAC地址?
  • linux 中怎么根据MAC地址获得IP地址?(用C语言实现)
  • 如何获得虚拟地址对应的物理地址?
  • 如何不写驱动通过应用程序获得一块内存并取得它的物理地址?
  • 如何获得虚拟机的ip地址
  • 如何在UNIX下获得MAC地址?
  • 我的redhat 可以自动获得Ip地址 却无法浏览网页 !
  • 如何获得系统硬盘使用情况,急!!! iis7站长之家
  • 如何知道当前的IP地址是如何获得的?是静态设定的,还是dhcp?
  • Linux 如何获得分配内存的起始地址
  • 如何在freebsd下获得本机的ip地址?
  • 如何获得对方ip地址
  • 怎样获得mac地址?
  • 客户端IP地址的获得?
  • 在JavaBean或Servlet如何获得URL地址?
  • 有什么函数调用可以获得网关的MAC地址?
  • 请问如何通过命令来获得本机linux的ip地址?
  • jsp怎么获得网页地址?
  • C#获得MAC地址(网卡序列号)的实现代码
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 用sysconf(_SC_CLK_TCK)可以获得时钟的hz,还有什么方法可以获得内核时钟的hz
  • gtk的获得属性的问题!急!
  • 调用DOM对象的focus使文本框获得焦点
  • 获得客户端的显示分辨率
  • 怎样一个一个的获得指定目录下的文件名.
  • linux下什么语言获得参数是~1
  • 求救:关于在BSD下如何通过文件路径使用核内函数获得文件句柄?
  • jQuery获得内容和属性示例代码
  • jQuery获得内容与属性方法
  • mysql获得60天前unix时间思路及代码
  • 用javamail怎么获得邮件内容?
  • 如何获得上一组件的的位置信息?
  • 请问怎样获得当前所在目录和清屏?
  • 如何获得系统支持字体?
  • 按钮如何获得焦点并按回车触发?
  • 如何获得刚插入数据的id递增值
  • 如何获得iptables的输出信息??????有挑战性阿!!!
  • 获得usb设备的Serial Number
  • 获得磁盘剩余空间
  • 如何获得系统硬盘使用情况,急!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3