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

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

 

[cpp] view plaincopy

 

  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获取:

 

[cpp] view plaincopy

 

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

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

socket 如何读取对方的mac地址

问题描述 socket如何读取对方的mac地址 解决方案 解决方案二:利用socket本质是无法获取到mac地址的.因为mac是在以太网协议内才有.而socket能处理是在其上层的一些协义如ip,tcp等等.要取mac只能监听网卡.http://www.codeproject.com/KB/IP/sharppcap.aspx各个协义的信息可以查看http://www.codeproject.com/KB/IP/HTTPFilter.aspx.解决方案三:socket是得不到的.他只处理ip层的东

python获取本机mac地址和ip地址的方法

  这篇文章主要介绍了python获取本机mac地址和ip地址的方法,涉及Python获取系统相关信息的技巧,需要的朋友可以参考下 本文实例讲述了python获取本机mac地址和ip地址的方法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 import sys, socket def getipaddrs(hostname): result = socket.getaddrinfo(hostname,None,0,socket.SOCK_STREAM) retu

利用Java获取本机mac地址

public static void getAllMacAdress() { Enumeration<NetworkInterface> netInterfaces = null; try { // 获得所有网络接口 netInterfaces = NetworkInterface.getNetworkInterfaces(); while (netInterfaces.hasMoreElements()) { System.out .println("===============

javascript-js如何获取本机mac地址?求各位高手指点 最好是纯js的 求各位高手给出关键代码

问题描述 js如何获取本机mac地址?求各位高手指点 最好是纯js的 求各位高手给出关键代码 如何利用js获取本机mac地址 求各位高手能给出关键代码 最好是不需要用c直接纯js实现 解决方案 不知道你为什么要获得mac地址,http协议基于tcp/ip,你服务器得到mac也没用. 为了软件加密授权?客户端js获得mac,再提交服务器,这个又很容易伪造. 而且mac地址的获取在不同平台上又不同,不是web标准.你希望你的网站只能在pc+ie上运行?不支持所有别的浏览器?那你还要web做什么. 解

骗子-QQ如何获取对方详细真实地址

问题描述 QQ如何获取对方详细真实地址 对方是骗子 骗了我好多钱知道对方QQ如何可以查询对方详细地址 希望可以揭发他 让他赔钱 不让人再受骗了我们都是血汗钱啊 解决方案 找腾讯找腾讯找腾讯找腾讯 解决方案二: 腾讯服务器上有QQ登陆的IP地址信息等,普通人没法直接查询到 解决方案三: 好多钱是多少钱?1.2万的就算了,当花钱买个教训吧,几十万几百万的报警好了. 解决方案四: 1-2W就算了?看来真是有钱人,我等屁民只可仰望啊.

[急]用VB.NET 在win7系统下如何获取本机mac地址

问题描述 用VB.NET在win7系统下如何获取本机mac地址XP系统如下代码是OK的,在Win7系统中获取不了.DimWmiAsNewSystem.Management.ManagementObjectSearcher("SELECT*FROMWin32_NetworkAdapterConfiguration")ForEachWmiObjAsManagement.ManagementObjectInWmi.GetIfCBool(WmiObj("IPEnabled"

VC实现获取本机MAC地址的方法_C 语言

本文实例采用vc6.0运行环境,通过实例实现获得MAC地址的功能. 完整的实例代码如下: #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <httpext.h> #include <windef.h> #include <Nb30.h> int getMAC(char * mac) { NCB ncb; typedef struct _AS

php获取网卡的MAC地址支持WIN/LINUX系统_php技巧

复制代码 代码如下: <?php /** 获取网卡的MAC地址原码:目前支持WIN/LINUX系统 获取机器网卡的物理(MAC)地址 **/ class GetMacAddr{ var $return_array = array(); // 返回带有MAC地址的字串数组 var $mac_addr; function GetMacAddr($os_type){ switch ( strtolower($os_type) ){ case "linux": $this->for

获取客户端网卡MAC地址和IP地址实现JS代码_javascript技巧

在做B/S结构的系统时,我们常常需要获取客户端的一些信息,如IP和MAC,以结合身份验证.要获取服务器端的MAC很容易,但是要获取客户端的MAC的地址确要花费一翻心思,通常的做法是调用Win32API或直接调用nbtstat命令,这样做有很多问题,而另一种方法就是直接用客户端脚本,我们这里用Javascript,这样做的好处是不需要服务器端进行处理,有客户端自行获取,传递到服务器端,且速度和可靠性都比在服务器端获取好. 具体实现的html和javascript如下: 复制代码 代码如下: <HT