通过IP或socket获取对方的MAC地址

时间:2023-01-23 00:57:02

1。通过已经连接的socket文件获取:

  1. int getpeermac( int sockfd, char *buf )
  2. {
  3. int ret =0;
  4. struct arpreq arpreq;
  5. struct sockaddr_in dstadd_in;
  6. socklen_t  len = sizeof( struct sockaddr_in );
  7. memset( &arpreq, 0, sizeof( struct arpreq ));
  8. memset( &dstadd_in, 0, sizeof( struct sockaddr_in ));
  9. if( getpeername( sockfd, (struct sockaddr*)&dstadd_in, &len ) < 0 )
  10. err_err("getpeername()");
  11. else
  12. {
  13. memcpy( &arpreq.arp_pa, &dstadd_in, sizeof( struct sockaddr_in ));
  14. strcpy(arpreq.arp_dev, "eth1");
  15. arpreq.arp_pa.sa_family = AF_INET;
  16. arpreq.arp_ha.sa_family = AF_UNSPEC;
  17. if( ioctl( sockfd, SIOCGARP, &arpreq ) < 0 )
  18. err_err("ioctl SIOCGARP");
  19. else
  20. {
  21. unsigned char* ptr = (unsigned char *)arpreq.arp_ha.sa_data;
  22. ret = sprintf(buf, "%02x%02x%02x%02x%02x%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5));
  23. }
  24. }
  25. return ret;
  26. }

2。 通过IP获取:

  1. int getpeermac_by_ip(char *ipaddr, char* buf)
  2. {
  3. int     sockfd;
  4. unsigned char *ptr;
  5. struct arpreq arpreq;
  6. struct sockaddr_in *sin;
  7. struct sockaddr_storage ss;
  8. char addr[INET_ADDRSTRLEN+1];
  9. memset(addr, 0, INET_ADDRSTRLEN+1);
  10. memset(&ss, 0, sizeof(ss));
  11. if (argc != 2) {
  12. printf("USAGE arpg  ip_addr/n");
  13. return -1;
  14. }
  15. sockfd = socket(AF_INET, SOCK_DGRAM, 0);
  16. if (sockfd == -1) {
  17. perror("socket error");
  18. return -1;
  19. }
  20. sin = (struct sockaddr_in *) &ss;
  21. sin->sin_family = AF_INET;
  22. if (inet_pton(AF_INET, argv[1], &(sin->sin_addr)) <= 0) {
  23. perror("inet_pton error");
  24. return -1;
  25. }
  26. sin = (struct sockaddr_in *) &arpreq.arp_pa;
  27. memcpy(sin, &ss, sizeof(struct sockaddr_in));
  28. strcpy(arpreq.arp_dev, "eth1");
  29. arpreq.arp_ha.sa_family = AF_UNSPEC;
  30. if (ioctl(sockfd, SIOCGARP, &arpreq) < 0) {
  31. perror("ioctl SIOCGARP: ");
  32. return -1;
  33. }
  34. ptr = (unsigned char *)arpreq.arp_ha.sa_data;
  35. sprintf(buf,"%x:%x:%x:%x:%x:%x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5));
  36. return 0;
  37. }

通过IP或socket获取对方的MAC地址的更多相关文章

  1. 网络排错与网络命令的理解ping-traceroute-host(nslookup)-tcpdump获取对方的mac

    1.  虚拟机中NAT架构的网络结构中, 虚拟网卡VMnet8(192.168.134.1)是连接宿主主机. 用虚拟网段中主机(192.168.134.133),ping  VMnet8 为什么没有响 ...

  2. 获取客户端网卡MAC地址和IP地址实现JS代码

    获取客户端网卡MAC地址和IP地址实现JS代码 作者: 字体:[增加 减小] 类型:转载   获取客户端的一些信息,如IP和MAC,以结合身份验证,相信很多人都会这样做吧,我们这里用Javascrip ...

  3. c&num;中如何获取本机MAC地址、IP地址、硬盘ID、CPU序列号等系统信息

    我们在利用C#开发桌面程序(Winform)程序的时候,经常需要获取一些跟系统相关的信息,例如用户名.MAC地址.IP地址.硬盘ID.CPU序列号.系统名称.物理内存等. 首先需要引入命名空间: us ...

  4. js获取本机mac地址,IP地址,计算机名

    <!DOCTYPE HTML> <html> <head> <title>js获取本机mac地址,IP地址,计算机名</title> &lt ...

  5. 获取客户机MAC地址 根据IP地址 获取机器的MAC地址 &sol; 获取真实Ip地址

    [DllImport("Iphlpapi.dll")] private static extern int SendARP(Int32 dest, Int32 host, ref ...

  6. Java获取本机MAC地址&lbrack;转&rsqb;

    原文地址:https://www.cnblogs.com/hxsyl/p/3422191.html Java获取本机MAC地址   为什么写这个呢?因为前几天看见网上有采用windows命令获取局域网 ...

  7. 工作日记:C&num;获取操作系统、MAC地址、登录用户、网卡、物理内存信息

    /// <summary> /// 操作系统的登录用户名 /// </summary> /// <returns>系统的登录用户名</returns> ...

  8. 脚本&lowbar;获取本机 MAC 地址

    #!bin/bash#作者:liusingbon#功能:获取本机 MAC 地址ip a s |awk 'BEGIN{print "本机 MAC 地址信息如下:"}/^[0-9]/{ ...

  9. 获取设备的mac地址可靠的方法

    参考自:http://www.open-open.com/lib/view/open1433406847322.html /** * 获取设备的mac地址 * * @param ac * @param ...

随机推荐

  1. Node&period;js中的Session,不要觉得简单哦。

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博客地址为http://www.cnblogs.com/jasonnode/ .学习网站上有对应 ...

  2. AMap行政区查询服务

    AMap.DistrictSearch行政区查询服务插件,提供全国各省.市.县.区的中心点经纬度.行政区边界坐标组.下级行政区等信息.根据行政区边界坐标组可在地图上绘制行政区边界.(本文为原创,并在项 ...

  3. JMS消息中间件系列&lbrack;ActiveMQ&rsqb;&lpar;一&rpar;

    版本5.13.3的特性: 1.Supports a variety of Cross Language Clients and Protocols from Java, C, C++, C#, Rub ...

  4. 深入浅出Redis01安装

    一 什么是Redis? Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. Redis是一个高性能的Key-Va ...

  5. AS-demo09

    ,mainifast: <uses-permission android:name="android.permission.SET_WALLPAPER"/> , &lt ...

  6. excel用vlookup&comma;lookup时查询数据需要排序

    如题,排出来的数据不对,之前没有是看清楚..所以记下来,日是后要小心点....

  7. 301页面转向 php

    新建301.php页面,在程序入口文件index.php引用301.php页面 301.php内容如下,仅用于参考: <?php$the_host = $_SERVER['HTTP_HOST'] ...

  8. Codeforces Round &num;277&period;5 &lpar;Div&period; 2&rpar; A&comma;B&comma;C&comma;D&comma;E&comma;F题解

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud A. SwapSort time limit per test    1 seco ...

  9. 文件首行为空白行,为什么该行字符串长度为1&lpar;line&period;length&lpar;&rpar;&equals;1&rpar;

    问题描述:最近编写程序遇到一个问题,文件首行的内容为空,但调用line0.length()返回的确为1 .如下图: 最初认为可能存在制表符,或者换行符的原因,于是调用了line0.trim();方法, ...

  10. Linux常用命令-文本查看篇

    前言 Linux常用命令中,除了cat还有很多其他用于文本查看的命令.本文将简单介绍一下这些文本查看的命令. 全文本显示--cat cat可能是常用的一个文本查看命令了,使用方法也很简单: cat f ...