即時通訊嘗試檢索設備的MAC地址在我的局域網和即時通訊使用SendARP功能做到這一點,但由於一些奇怪的原因,它給了我錯誤的MAC地址,即時消息告訴它得到我的筆記本電腦的MAC也是局域網上,但它不工作:/C++ SendARP返回錯誤的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 Mac由SendARP輸出: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()沒有工作,要麼:/請幫我在這裏:/
那我該怎麼辦?我需要返回一個數組:/ – Paze 2013-03-07 18:34:16
@Paze讓調用者傳入數組(然後你需要修復所有你需要的.array地址的代碼,例如'memset(&DestMacAddr,0xff,sizeof(DestMacAddr ));'嚴格錯誤,它應該是'memset(DestMacAddr,0xff,sizeof(DestMacAddr));')。或者用malloc動態分配數組並返回。 .e.g'BYTE * p = malloc(sizeof DestMacAddr); memcpy(p,DestMacAddr,sizeof DestMacAddr);返回p;' – nos 2013-03-07 18:41:15