用函数SendARP()获取局域网计算机的MAC地址

sendARP

31 说明对方没有开机,我们的函数检测不到它,

1784 说明的给函数的最后一个参数的值是0,或你的给的值与你给的缓存区大小不符合。

如果返回31不在线,则最后一个参数指针指向的值赋值为0

该函数有一个缺点:

该函数本质上就是向目标主机发送一个ARP请求包,然后得到应答包来更新MAC,但是ARP请求包里的发送端IP和MAC是本机的实际IP和MAC,这样对方arp -a查看缓存表时记录里就有我的IP-MAC映射记录,容易知道有人在扫描其机器,或者是ARP病毒也可能。

解决该函数问题就是自己伪造发包,但是MAC地址必须对,否则应答包不会发送到本机~

UpdateData(TRUE);

if(m_strAddr.IsEmpty())

{

AfxMessageBox("请填入要查找MAC地址的主机IP地址");

return;

}

unsigned long ulAddr = inet_addr(m_strAddr);

unsigned long ulMAC[2];

unsigned long ulLen = 6;

DWORD dwRetVal = SendARP(ulAddr, 0, ulMAC, &ulLen);

if(dwRetVal == NO_ERROR)

{

size_t i, j;

char * szMac = new char[ulLen*3];

PBYTE pbHexMac = (PBYTE)ulMAC;

for (i = 0, j = 0; i < ulLen - 1; ++i)

{

j += sprintf (szMac + j, "%02X:", pbHexMac[i]);

}

sprintf (szMac + j, "%02X", pbHexMac[i]);

m_strMAC = szMac;

delete [] szMac;

}

UpdateData(FALSE);

时间: 2024-11-07 09:55:54

用函数SendARP()获取局域网计算机的MAC地址的相关文章

C#获取局域网IP、MAC地址和端口的初学

首先非常感谢Melou的http://www.cnblogs.com/luoht/archive/2009/12/18/1627431.html的随笔,对于初学C#的我,参考你的随笔对我的学习真是有莫大帮助. C#遍历局域网的几种方法: 1.微软社区上介绍了使用Active Directory 来遍历局域网 首先我们来了解DirectoryEntry类是一个什么类. 命名空间:  System.DirectoryServices程序集:  System.DirectoryServices(在 S

获取局域网里一个MAC地址对于的IP地址

通过局域网MAC地址得到IP地址 [[email protected] cli]# cat tmp.sh function get_all_arp_info(){ip -s -s neigh flush all > /dev/nul &for ip in `seq 2 254`doping 192.168.50.$ip -c1 > /dev/null & done}function from_mac_get_ip(){get_all_arp_infoMAC_ADDR=$1if 

java获取当前计算机网卡MAC地址

package com.yjm.testmac; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util.Enumeration; public class MacTest { public static void main(String[] args)

如何使用Java代码获取Android移动终端Mac地址

快下班了,现在总结一下如何使用Java代码获取Android移动终端Mac地址: 通过设备开通WiFi连接获取Mac地址是最可取的,代码如下: /** * 设备开通WiFi连接,通过wifiManager获取Mac地址 * * @author 高焕杰 */ public static String getMacFromWifi(Context context){ ConnectivityManager connectivityManager = (ConnectivityManager) con

Java如何获取本地计算机的IP地址和主机名?

在Java编程中,如何获取本地计算机的IP地址和主机名? 以下示例显示如何使用InetAddress类的getLocalAddress()方法获取系统的本地IP地址和主机名. package com.yiibai; import java.net.InetAddress; public class GetLocalIPAddress { public static void main(String[] args) throws Exception { InetAddress addr = Ine

获取局域网计算机名以及IP以及mac地址

void GetAll() { IDictionary<string, string> hostList = new Dictionary<string, string>(); DirectoryEntry MainGroup = new DirectoryEntry("WinNT:"); foreach (DirectoryEntry domain in MainGroup.Children) { foreach (DirectoryEntry pc in d

Unity网络通讯(一)获取计算机的MAC地址

1 string GetMac() 2 { 3 string mac = ""; 4 mac = GetMacAddressBySendARP(); 5 return mac; 6 } 7 [DllImport("Iphlpapi.dll")] 8 static extern int SendARP(Int32 DestIP, Int32 SrcIP, ref Int64 MacAddr, ref Int32 PhyAddrLen); 9 /// <summa

linux 下C实现获取网卡IP和MAC地址

本文使用getifaddrs 函数获取网卡的IP和MAC地址.getifaddrs函数有个特点,就是获取地址时以链表方式返回,且每个链表节点要么是IP,要么是MAC,所以如果要将网卡的IP和MAC地址同时返回的话,需要对对返回链表进行查找和重新组合.本文实现目的,在于以网卡名方式返回IP和MAC地址.代码如下: #ifndef _MYLIB_H #define _MYLIB_H #include <stdlib.h> #include <errno.h>   #define err

通过安卓应用获取任意蓝牙设备的MAC地址

最近做一个安卓应用,用蓝牙信号控制一台仪器,通过一个蓝牙转串口的装置,发送蓝牙信号,然后转换为串口命令发送给仪器.蓝牙装置如下: 在写安卓应用中的java代码时,如何获取这个蓝牙设备呢?BluetoothAdapter 的 getRemoteDevice(address) 方法可以通过MAC地址来获取蓝牙设备: BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address); 但问题来了,这个蓝牙设备的MAC地址是多少呢?