ARP--C語言Windows實現

首先說明,此文中很大部分都是轉摘的。
我首先介紹源程序來源: http://industry.ccidnet.com/art/1101/20050727/625891_1.html
這裏的程序是根據MSDN  http://msdn.microsoft.com/zh-cn/library/aa366358(en-us,VS.85).aspx 上的程序改編,但是某些地方有少許問題,導致結果錯誤。我查看源程序(MSDN),修正了一下,實際就兩個地方。這兩個地方之前我是用j作爲下標,錯誤,後來使用i作爲下標,正確。(但是這種方法只能在本網段有效,據說還是使用WinPcap好些,定義自己的ARP包。)
能夠成功運行的程序如下:
  1. #include <stdio.h>
  2. #include <winsock2.h>
  3. #include <windows.h>    //要麼沒有,要麼儘量放在其他windows相關的後邊
  4. #include <iphlpapi.h>
  5. //
  6. // Link with ws2_32.lib and iphlpapi.lib
  7. //
  8. #include <tchar.h>
  9. #pragma comment(lib, "Ws2_32.lib" )
  10. #pragma comment(lib, "iphlpapi.lib") //Platform SDK
  11. /*
  12. DWORD   SendARP(  
  13. IPAddr   DestIP,           //   destination   IP   address  
  14. IPAddr   SrcIP,             //   IP   address   of   sender  
  15. PULONG   pMacAddr,       //   returned   physical   address  //PULONG 長整數無符號指針
  16. PULONG   PhyAddrLen     //   length   of   returned   physical   addr.  
  17. );   
  18. */
  19. int __cdecl main()
  20. {
  21.     HRESULT hr;
  22.     IPAddr remoteAddr;
  23.     ULONG pulMac[2];
  24.     ULONG ulLen;
  25.     remoteAddr = inet_addr ("10.86.3.6");
  26.     memset (pulMac, 0xFF, sizeof (pulMac));
  27.     ulLen = 6;
  28.     hr = SendARP (remoteAddr, 0, pulMac, &ulLen);
  29.     printf ("Return %08x, length %8d, Mac  %08x  %08x/n", hr, ulLen, pulMac[0], pulMac[1]);
  30.     size_t i, j;
  31.     char * szMac = new char[ulLen * 3];
  32.     memset(szMac, 0, ulLen*3);
  33.     PBYTE pbHexMac = (PBYTE) pulMac;//MSDN使用&pilMac,效果一樣
  34.     //
  35.     // Convert the binary MAC address into human-readable
  36.     //
  37.     for (i = 0, j = 0; i < ulLen - 1; i++) {
  38.         j += sprintf (szMac + j, "%02X:"pbHexMac[i]);//原程序該行和下一行都是直接使用pbHexMac
  39.     }
  40.     sprintf (szMac + j, "%02X"pbHexMac[i]);//這裏
  41.     printf ("MAC address %s/n", szMac);
  42.     delete [] szMac;
  43.     return 0;
  44. }

發佈了97 篇原創文章 · 獲贊 4 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章