標籤:
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);
用函數SendARP()擷取區域網路電腦的MAC地址