通过IP或socket获取对方的MAC地址
1。通过已经连接的socket文件获取:
- int getpeermac( int sockfd, char *buf )
- {
- int ret =0;
- struct arpreq arpreq;
- struct sockaddr_in dstadd_in;
- socklen_t len = sizeof( struct sockaddr_in );
- memset( &arpreq, 0, sizeof( struct arpreq ));
- memset( &dstadd_in, 0, sizeof( struct sockaddr_in ));
- if( getpeername( sockfd, (struct sockaddr*)&dstadd_in, &len ) < 0 )
- err_err("getpeername()");
- else
- {
- memcpy( &arpreq.arp_pa, &dstadd_in, sizeof( struct sockaddr_in ));
- strcpy(arpreq.arp_dev, "eth1");
- arpreq.arp_pa.sa_family = AF_INET;
- arpreq.arp_ha.sa_family = AF_UNSPEC;
- if( ioctl( sockfd, SIOCGARP, &arpreq ) < 0 )
- err_err("ioctl SIOCGARP");
- else
- {
- unsigned char* ptr = (unsigned char *)arpreq.arp_ha.sa_data;
- ret = sprintf(buf, "%02x%02x%02x%02x%02x%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5));
- }
- }
- return ret;
- }
2。 通过IP获取:
- int getpeermac_by_ip(char *ipaddr, char* buf)
- {
- int sockfd;
- unsigned char *ptr;
- struct arpreq arpreq;
- struct sockaddr_in *sin;
- struct sockaddr_storage ss;
- char addr[INET_ADDRSTRLEN+1];
- memset(addr, 0, INET_ADDRSTRLEN+1);
- memset(&ss, 0, sizeof(ss));
- if (argc != 2) {
- printf("USAGE arpg ip_addr/n");
- return -1;
- }
- sockfd = socket(AF_INET, SOCK_DGRAM, 0);
- if (sockfd == -1) {
- perror("socket error");
- return -1;
- }
- sin = (struct sockaddr_in *) &ss;
- sin->sin_family = AF_INET;
- if (inet_pton(AF_INET, argv[1], &(sin->sin_addr)) <= 0) {
- perror("inet_pton error");
- return -1;
- }
- sin = (struct sockaddr_in *) &arpreq.arp_pa;
- memcpy(sin, &ss, sizeof(struct sockaddr_in));
- strcpy(arpreq.arp_dev, "eth1");
- arpreq.arp_ha.sa_family = AF_UNSPEC;
- if (ioctl(sockfd, SIOCGARP, &arpreq) < 0) {
- perror("ioctl SIOCGARP: ");
- return -1;
- }
- ptr = (unsigned char *)arpreq.arp_ha.sa_data;
- sprintf(buf,"%x:%x:%x:%x:%x:%x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5));
- return 0;
- }
通过IP或socket获取对方的MAC地址的更多相关文章
- 网络排错与网络命令的理解ping-traceroute-host(nslookup)-tcpdump获取对方的mac
1. 虚拟机中NAT架构的网络结构中, 虚拟网卡VMnet8(192.168.134.1)是连接宿主主机. 用虚拟网段中主机(192.168.134.133),ping VMnet8 为什么没有响 ...
- 获取客户端网卡MAC地址和IP地址实现JS代码
获取客户端网卡MAC地址和IP地址实现JS代码 作者: 字体:[增加 减小] 类型:转载 获取客户端的一些信息,如IP和MAC,以结合身份验证,相信很多人都会这样做吧,我们这里用Javascrip ...
- c#中如何获取本机MAC地址、IP地址、硬盘ID、CPU序列号等系统信息
我们在利用C#开发桌面程序(Winform)程序的时候,经常需要获取一些跟系统相关的信息,例如用户名.MAC地址.IP地址.硬盘ID.CPU序列号.系统名称.物理内存等. 首先需要引入命名空间: us ...
- js获取本机mac地址,IP地址,计算机名
<!DOCTYPE HTML> <html> <head> <title>js获取本机mac地址,IP地址,计算机名</title> < ...
- 获取客户机MAC地址 根据IP地址 获取机器的MAC地址 / 获取真实Ip地址
[DllImport("Iphlpapi.dll")] private static extern int SendARP(Int32 dest, Int32 host, ref ...
- Java获取本机MAC地址[转]
原文地址:https://www.cnblogs.com/hxsyl/p/3422191.html Java获取本机MAC地址 为什么写这个呢?因为前几天看见网上有采用windows命令获取局域网 ...
- 工作日记:C#获取操作系统、MAC地址、登录用户、网卡、物理内存信息
/// <summary> /// 操作系统的登录用户名 /// </summary> /// <returns>系统的登录用户名</returns> ...
- 脚本_获取本机 MAC 地址
#!bin/bash#作者:liusingbon#功能:获取本机 MAC 地址ip a s |awk 'BEGIN{print "本机 MAC 地址信息如下:"}/^[0-9]/{ ...
- 获取设备的mac地址可靠的方法
参考自:http://www.open-open.com/lib/view/open1433406847322.html /** * 获取设备的mac地址 * * @param ac * @param ...
随机推荐
- hadoop源代码解读namenode高可靠:HA;web方式查看namenode下信息;dfs/data决定datanode存储位置
点击browserFilesystem,和命令查看结果一样 当我们查看hadoop源代码时,我们看到hdfs下的hdfs-default.xml文件信息 我们查找${hadoop.tmp.dir}这是 ...
- iOS 请求数据 error
解决办法如下: 0x1 ->请求数据时加上缺少的类型 AFHTTPSessionManager *manager = [selfAFHTTPSessionManager];// manag ...
- oracle_SQL中ROWID与ROWNUM的使用(转)
转自:http://www.360doc.com/content/12/0802/11/219024_227802569.shtml rownum: ROWNUM是对结果集加的一个伪列, 即先查到结果 ...
- Python-zip压缩-解压
#打包成zip文件 import zipfile f = zipfile.ZipFile('archive.zip','w',zipfile.ZIP_DEFLATED) f.write('file_t ...
- POJ 1379 Run Away 【基础模拟退火】
题意:找出一点,距离所有所有点的最短距离最大 二维平面内模拟退火即可,同样这题用最小圆覆盖也是可以的. Source Code: //#pragma comment(linker, "/ST ...
- 说服式设计(persuasive design)的行为模型
转自:http://www.sharetk.com/html/ued/User-Research/1404.html 一 模型简介 BJ Fogg提出了一个新的理解人类行为的模型,他称之为Fogg b ...
- Chapter 17 Replication 复制
Chapter 17 Replication 复制 Table of Contents 17.1 Replication Configuration 17.2 Replication Implemen ...
- 自定义Log4cpp的日志输出格式
// 1. 实例化一个PatternLayout对象 log4cpp::PatternLayout* pLayout = new log4cpp::PatternLayout(); // 2. 实例化 ...
- VS2013 Qt5 Mysql中文编码问题
Qt开始默认是utf-8,而VS2013默认程序编码为gb2312: 这样就会发现使用中文的时候乱码. 一般有二种解决方案: 1.在使用中文的时候,使用QTextCodec QTextCodec *g ...
- iTextSharp - 建立PDF文件
原文 iTextSharp - 建立PDF文件 01 using iTextSharp.text; 02 using iTextSharp.text.pdf; 03 ... 04 private vo ...