我试图在我的局域网上检索设备的mac地址,我使用SendARP函数来执行此操作,但由于一些奇怪的原因,它给了我错误的mac地址,我告诉它得到我的笔记本电脑的mac是也在局域网上,但它不起作用:/
链接到SendARP功能(MSDN):http://msdn.microsoft.com/en-us/library/windows/desktop/aa366358%28v=vs.85%29.aspx
笔记本电脑的mac确实如此:e0:94:67:18:a7:dc SendARP的Mac输出:e9:ad:2d:01:c8:11
这是我创建的函数,只是从ip地址获取mac:P
BYTE* GetMacAddress(IPAddr destination, IPAddr source) {
Sleep(500);
ULONG DestMacAddr[2];
ULONG PhysicalLength = 6;
memset(&DestMacAddr, 0xff, sizeof(DestMacAddr));
DWORD returnValue = SendARP(destination, source, &DestMacAddr, &PhysicalLength);
if(returnValue == NO_ERROR) {
cout << "Fetched destination mac" << endl;
}else {
printf("Error: %d\n", returnValue);
if(returnValue == ERROR_BAD_NET_NAME) {
printf("ERROR_BAD_NET_NAME\n trying to fetch mac address...");
return GetMacAddress(destination, source);
}
if(returnValue == ERROR_BUFFER_OVERFLOW) {
printf("ERROR_BUFFER_OVERFLOW\n");
}
if(returnValue == ERROR_GEN_FAILURE) {
printf("ERROR_GEN_FAILURE\n");
}
if(returnValue == ERROR_INVALID_PARAMETER) {
printf("ERROR_INVALID_PARAMETER\n");
}
if(returnValue == ERROR_INVALID_USER_BUFFER) {
printf("ERROR_INVALID_USER_BUFFER\n");
}
if(returnValue == ERROR_NOT_FOUND) {
printf("ERROR_NOT_FOUND\n");
}
if(returnValue == ERROR_NOT_SUPPORTED) {
printf("ERROR_NOT_SUPPORTED\n");
}
}
BYTE *bMacAddr = (BYTE *) &DestMacAddr;
return bMacAddr;
}
我在想它可能是因为它是网络字节顺序或者其他东西但是nothl()也没有工作:/请在这里帮助我:/
答案 0 :(得分:1)
你不能这样做:
BYTE *bMacAddr = (BYTE *) &DestMacAddr;
return bMacAddr;
你正在返回指向GetMacAddress()函数堆栈中某些东西的指针,该函数在函数结束时将会消失。
答案 1 :(得分:0)
在命令提示符下键入“arp -a”,以查看本地arp表上笔记本电脑的MAC地址。如果它与原版不同,则键入'arp -d'(使用Vista和Win7 / 8上的管理员权限)清除arp表并尝试使用yo SendARP App再次检查mac。