查看單個文章
舊 2003-12-24, 02:55 AM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 ARP傳輸協定學習小結——傳輸協定簡介和圖形化工具SendARP

  在進入正文之前,首先要感謝一些前輩,他們的文章和話語,都給了我很大的說明 ,所以我將感謝放在了文章最前面。

1、Douglas E. Comer ——《用TCP/IP進行網際互連》
  這是我的唯一一本參考書,一本通俗易懂的好書。

2、SendARP.c
  這是一個linux下傳送ARP包的程序源碼,在網上廣為流傳,很抱歉,無法查到其作者。

3、HiHint —— IPMan
  一位老前輩在98年寫的執行於Win95環境下對乙太網卡直接進行讀寫的DOS指令行程序,雖然實現方法已經不太一樣,但是我在開發程序中依然從他那裡獲得了許多指點。

4、Refdom —— 交換網路中的嗅探和ARP欺騙 (http://www.xfocus.net/articles/200204/377.html)
  安全焦點的一位前輩,他的這篇文章指引我實現具體的ARP包傳送。

  最近倍感墮落,於是找了點時間學習ARP傳輸協定,並寫了一個相關的工具——SendARP,還寫了這樣一篇我的文件,我的文件分為兩部分,前一部分是ARP傳輸協定的簡介,後一部分是工具SendARP的使用我的文件。

  如果你已經瞭解ARP傳輸協定,可以跳過這篇我的文件的前半部分,直接去看後面的程序我的文件,不過如果你有空的話,還是幫我看看,看看我是否描述清楚了,有沒有什麼錯誤,以便我儘快修正,在此提前表示感謝。

  先來介紹一下ARP傳輸協定吧,不過……由於個人水準問題,下面的文章可能枯燥乏味、難以理解,而且你可能看著看著就會罵我,為什麼不舉一個例子呢?放心,堅持看下去,例子在後面。實在挺不住的時候一定告訴我,讓我們一起來讓這篇我的文件變得通俗易懂。

  首先引出兩位主角,它們是電腦A和電腦B,它們連線到同一個Hub或者switch,屬於同一個區域網路,他們各自的網路硬體設備(一般為網路卡)的物理位址(也稱為硬體位址、MAC位址)分別為Pa和Pb,並且給他們各自的網路連接分配了IP位址(也可以稱為網路位址、傳輸協定位址),分別為Ia和Ib。或者我給幾個具體值吧,這樣方便理解。

機器名 物理位址(硬體位址、MAC位址) IP位址(網路位址、傳輸協定位址)
A 11-22-33-44-55-66 192.168.0.10
B aa-bb-cc-dd-ee-ff 192.168.0.20

  當一台電腦要和另外一台電腦進行網路通訊時,我們一般認為,僅僅只需要知道對方電腦的IP位址和相對應的連接埠號就可以了。但是,這些都是在網路層才提供的概念,再往下走呢?最終,在底層通信時還是要知道對方電腦的物理位址,因為網路硬體設備只能識別物理位址。你或許要問那為什麼不都用物理位址呢,那是因為物理位址很複雜,而且對於每個硬體設備來說是類BIOS的,不像IP位址那樣簡潔、易組織。

  假設此時機器A要像機器B傳送資料包,但是機器A只知道機器B的IP位址Ib,不知道機器B的物理位址,那麼如何由這個IP位址,得到機器B的物理位址Pb呢?

  於是就有了ARP傳輸協定…?

  ARP,全名為 An Ethernet Address Resolution Protocol,乙太網上的位址轉換傳輸協定,通過遵循該傳輸協定,只要我們知道了某台機器的IP位址,即可以知道其物理位址。

  下面我將根據ARP傳輸協定描述一下機器A和機器B的交流程序:
1、機器A說:「有程序叫我給機器B傳送資料,但是他們只告訴了我機器B的IP位址,可以我和機器B聯繫是通過物理位址的呀。嗯……如果廣播資料包的話,那麼機器B就可以收到了,不過如果我每個資料包都廣播的話,那不是很豬頭!還是得想辦法知道機器B的物理位址,這樣我直接聯繫她。對了!據說有一個ARP傳輸協定可以說明 我,嗯,讓我來試一下。」

2、按照ARP傳輸協定規定的格式,機器A構造一個資料包,其中包含機器B的IP位址Ib,我們稱之為請求包,然後將其廣播出去。附帶說一下,這裡面還包含著機器A自己的IP位址和物理位址,先埋下一個伏筆。

3、機器A說:「這個包已經廣播出去了,現在就等著機器B回應我了……」

4、這個區域網路內所有機器都收到了這個廣播的請求包,並且都對這個包進行了檢查,不過絕大部分機器發現包中所提到的IP位址Ib和自己的IP位址不一樣,於是就將這個包丟棄了。

5、只有一台機器發現包中的IP位址和自己的IP位址一樣,這台機器就是傳說中的機器B……

6、機器B說:「有個豬頭廣播了一個ARP請求包,裡面提到了我的IP位址,他大概是想和我單獨聯繫,但是不知道我的物理位址吧,所以才廣播的……那好!我就給他一次和我說話的機會吧,我先把物理位址告訴他吧」

7、於是機器B也根據ARP傳輸協定構造了另外一個資料包,其中包含自己的物理位址Pb,我們稱之為回應包,並打算將該回應包傳送給機器A。

8、機器B說:「怎麼把這個回應包傳送給A呢?學它的,繼續廣播?不行,我怎麼能夠和他一樣豬頭呢!再檢查一下他給我的請求包,也許可以找出什麼信息來……Search……Search……Search……找到了,這裡放著他的IP位址和物理位址呢!好,就用這個物理位址和他聯繫吧。」

9、於是機器B將剛剛構造的回應包傳送出去了……過一下就到了機器A那裡。

10、機器A說:「謝天謝地!經過漫長的等待,終於接到了回應了,嗯,這個包果然是機器B發給我的,對,也從裡面讀到了機器B的物理位址,好,以後我就用這個物理位址和機器B單獨聯繫了……」

  插幾句話,機器A和機器B雖然很想單獨聯繫,但是不是他們想就可以辦到的,還要看底層的物理設備,如果他們都連線到同一個Hub上,那麼他們注定是沒有秘密可言的了,因為Hub對於所有的資料包都會往所有連接埠傳送。有沒有一種設備不這麼豬頭呢?有,那就是傳說中的switch,switch會在每台機器的物理位址和他們連線到自己的連接埠號之間建立一個對應關係,給任何一台機器的資料包僅僅只會往相應的連接埠傳送,這樣就可以滿足機器A和機器B單獨聯繫的願望了。

  不過,這一切對於上層應用軟體都是透明的,他們都不必在意底層的轉換程序和結果,通訊時僅僅只需要知道對方IP位址和對應連接埠即可。

  那麼ARP資料包的具體格式是怎麼樣的呢?從網路底層看來,這樣一個資料包主要分為兩個部分,前面一個是物理畫格頭,後面一個才是ARP畫格。

  物理畫格頭,它將存在於任何一個傳輸協定資料包的前面,參照Sniffer Pro的命名規則,稱為 DLC Header,因為這個畫格頭是在資料鏈路層構造的,並且其主要內容為收發雙方的物理位址,以便硬體設備識別。

DLC Header
字段名 長度
(字元) 含義 預設值 備註
Destination 6 接收方的物理位址 乙太網硬體位址長度為6個字元
當廣播時,物理位址為 0xFFFFFFFFFFFF(FF-FF-FF-FF-FF-FF)
Source 6 傳送方的物理位址 乙太網硬體位址長度為6個字元
Ethertype 2 畫格類型 0x0806 ARP畫格的類型值為 0x0806

  然後才是ARP畫格,這裡稱為 ARP Frame

ARP Frame
字段名 長度
(字元) 含義 預設值 備註
Hardware type 2 硬體類型 0x1 區域網路的類型為 0x1
Protocol type 2 上層傳輸協定類型 0x0800 由於這裡是為關於IP傳輸協定的資料通訊做準備,所以上層傳輸協定為IP傳輸協定,其類型值為 0x0800
Length of hardware address 1 硬體位址長度 0x6 乙太網的硬體位址長度為 0x6
Length of protocol address 1 傳輸協定位址長度 0x4 IP傳輸協定的位址長度為 0x4
Opcode 2 操作碼 0x1 表示ARP請求包
0x2 表示ARP回應包
Sender's hardware address 6 傳送方的硬體位址 乙太網的硬體位址長度為 0x6
Sender's protocol address 4 傳送方的傳輸協定位址 IP傳輸協定的位址長度為 0x4
由於上層傳輸協定為IP傳輸協定,因此這裡為IP位址
Target hardware address 6 接收方的硬體位址 乙太網的硬體位址長度為 0x6
Target protocol address 4 接收方的傳輸協定位址 IP傳輸協定的位址長度為 0x4
由於上層傳輸協定為IP傳輸協定,因此這裡為IP位址
frame padding 18 物理畫格填充資料 以上所有字段加起來總長度為42個字元,另外物理畫格最後還有4個字元的CRC,為了達到物理畫格的最小長度64個字元,所以要填充的字元數為64-42-4=18

  下面,我們再參照傳輸協定規定的資料包格式來詮釋一下上述步驟。
  我們再把兩台機器的物理位址和IP位址囉嗦一遍:

機器名 硬體位址 IP位址
A 11-22-33-44-55-66 192.168.0.10
B aa-bb-cc-dd-ee-ff 192.168.0.20

  現在機器A僅僅知道機器B的IP位址為 192.168.0.20,它將廣播這樣一個ARP請求包,然後等待命器B的ARP回應包。

  當機器A廣播ARP請求包時,其中 Destination 為 0xFFFFFFFFFFFF(FF-FF-FF-FF-FF-FF),Source為自己的硬體位址,Opcode為1,在 Target protocol address 填入機器B的IP位址,在 Sender's hardware address 和 Sender's protocol address 分別填入自己的硬體位址和IP位址。
  該ARP請求包的內容如下:

字段名 長度
(字元) 值 備註 結構描述
Destination 6 ff ff ff ff ff ff 廣播位址為 FF-FF-FF-FF-FF-FF DLC Header
Source 6 11 22 33 44 55 66 機器A的硬體位址 11-22-33-44-55-66
Ethertype 2 08 06 ARP畫格的類型值為 0x0806

Hardware type 2 00 01 區域網路的類型為 0x1 ARP Frame
Protocol type 2 08 00 上層傳輸協定為IP傳輸協定,類型值為 0x0800
Length of hardware address 1 06 乙太網的硬體位址長度為 0x6
Length of protocol address 1 04 IP傳輸協定的位址長度為 0x4
Opcode 2 00 01 0x1 表示ARP請求包
Sender's hardware address 6 11 22 33 44 55 66 機器A的硬體位址 11-22-33-44-55-66
Sender's protocol address 4 c0 a8 00 0a 機器A的IP位址 192.168.0.10
Target hardware address 6 00 00 00 00 00 00 這裡的6個字元可以是隨機的
Target protocol address 4 c0 a8 00 14 機器B的IP位址 192.168.0.20
frame padding 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18個字元用於填充

  機器B接到該ARP請求包以後,從中提取機器A的硬體位址和IP位址,然後向機器A傳送ARP回應包,其中 Destination 為機器A的硬體位址,Source為自己的硬體位址,Opcode為2,在 Sender's hardware address 和 Sender's protocol address 分別填入自己的硬體位址和IP位址,在 Target hardware address 和 Target protocol address 分別填入機器A的硬體位址和IP位址。
  該ARP回應包的內容如下:

字段名 長度
(字元) 值 備註 結構描述
Destination 6 11 22 33 44 55 66 機器A的硬體位址 11-22-33-44-55-66 DLC Header
Source 6 aa bb cc dd ee ff 機器B的硬體位址 aa-bb-cc-dd-ee-ff
Ethertype 2 08 06 ARP畫格的類型值為 0x0806

Hardware type 2 00 01 區域網路的類型為 0x1 ARP Frame
Protocol type 2 08 00 上層傳輸協定為IP傳輸協定,類型值為 0x0800
Length of hardware address 1 06 乙太網的硬體位址長度為 0x6
Length of protocol address 1 04 IP傳輸協定的位址長度為 0x4
Opcode 2 00 02 0x2 表示ARP回應包
Sender's hardware address 6 aa bb cc dd ee ff 機器B的硬體位址 aa-bb-cc-dd-ee-ff
Sender's protocol address 4 c0 a8 00 14 機器B的IP位址 192.168.0.20
Target hardware address 6 11 22 33 44 55 66 機器A的硬體位址 11-22-33-44-55-66
Target protocol address 4 c0 a8 00 0a 機器A的IP位址 192.168.0.10
frame padding 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18個字元用於填充

  機器A收到該ARP回應包後,即可得到機器B的物理位址,至此,機器A已經完成機器B的IP位址到物理位址的轉換程序,同時機器B也已經順帶完成機器A的IP位址到物理位址的轉換程序。

  至此,相信你已經瞭解了ARP傳輸協定,如果依然有些糊塗,來找我吧,我會給你講清楚,並修改我的文件,使之更加易於理解。

  另外,我們再描述一些和ARP傳輸協定相關的知識。
1、為了描述方便,我們稱一個IP位址和一個物理位址的對應關係為一個對應條目,對於一台機器而言,這種條目可能會很多,所以有必要用一張表來管理,這裡我們稱作ARP條目表。在系統中可以通過指令「arp -a」來顯示系統當前的ARP條目表。

2、由於各種可能的原因,一台機器的IP位址和物理位址的對應關係不會永遠類BIOS,比如機器B突然下線了,或者換了網路卡,變了一個物理位址,她不會通知機器A的,所以在系統中會設定一個超時時間,當某個對應條目的生命期達到超時時間後,即將其刪除,這樣由機器A主動保持該條目的有效性。

3、對於一台機器而言,如果他收到了一個ARP回應包,他是不會去判斷自己是否傳送過請求包的,他依然會從中提取相關資訊。你也許會問,他為什麼不判斷呢?拜託!你想累死他呀……不過其實我覺得也不太累,但是他就是沒有這麼實現。這樣,就出現了一個可能的漏洞,也就是我下面即將提到的ARP欺騙。

  下面談一下利用ARP傳輸協定所實現的一些另類功能。如果在狗狗(Google,我的一個同事習慣這麼稱呼)上搜尋一下和ARP相關的東西,可以找到許多「ARP欺騙」(ARP spoof)的字樣,這個也就是我們即將講述的另類功能。
  現在我們構造一個ARP請求包,然後來設想一下會產生什麼情況。

字段名 長度
(字元) 值 備註 結構描述
Destination 6 11 22 33 44 55 66 機器A的硬體位址 11-22-33-44-55-66 DLC Header
Source 6 88 88 88 88 88 88 機器B的硬體位址 88-88-88-88-88-88
Ethertype 2 08 06 ARP畫格的類型值為 0x0806

Hardware type 2 00 01 區域網路的類型為 0x1 ARP Frame
Protocol type 2 08 00 上層傳輸協定為IP傳輸協定,類型值為 0x0800
Length of hardware address 1 06 乙太網的硬體位址長度為 0x6
Length of protocol address 1 04 IP傳輸協定的位址長度為 0x4
Opcode 2 00 02 0x2 表示ARP回應包
Sender's hardware address 6 88 88 88 88 88 88 機器B的硬體位址 88-88-88-88-88-88
Sender's protocol address 4 c0 a8 00 14 機器B的IP位址 192.168.0.20
Target hardware address 6 11 22 33 44 55 66 機器A的硬體位址 11-22-33-44-55-66
Target protocol address 4 c0 a8 00 0a 機器A的IP位址 192.168.0.10
frame padding 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18個字元用於填充

  現在看這樣一個資料包,是不是很熟悉呢?你會認為這是一個機器B傳送給機器A的回應包,其中包括了機器B的硬體位址。不過和我們上面給出的那個包的內容有所區別……

  區別就在於機器B自己的硬體位址上,機器B的硬體位址應該是 aa-bb-cc-dd-ee-ff,但是這個回應包中相對應的硬體位址卻是 88-88-88-88-88-88,設想一下,機器A接收到這個包以後會造成什麼效果。他不會去在意自己是否傳送過針對機器B的物理位址的請求包,他依然會直接提取其中的IP位址和物理位址,這樣機器A就會錯誤的認為機器B的硬體位址是 88-88-88-88-88-88,那麼機器A就無法和機器B通訊了,因為他搞錯了機器B的硬體位址。

  那麼現在你還會相信這個回應包是機器B自己傳送的嗎?顯然是另外一台機器對於他們的一種惡意企圖。不過如果真的是機器B故意這麼做,那我不好再說什麼了,不過機器B的系統自己是不會這樣的,這些只能是人為產生的。
  這個就是前面所提到的ARP欺騙……

  假如機器A是這個區域網路的網關呢?那麼以後機器B就別想上網了,因為她無法收到機器A本該發給她的信息。

  假如這裡給出的機器B的物理位址 88-88-88-88-88-88 是另外一台機器C的物理位址呢?那麼以後機器A發給機器B的信息都會發給機器C。這樣機器C就可以攔截到機器A發給機器B的部分信息,但是機器A和機器B的通訊會中斷,因為對於機器B而言,中間有資料包掉了。但是如果機器C將攔截到的資料包繼續轉發給機器B呢,當然轉發程序中機器C會偽裝成機器A,那麼機器C就完全成為機器A到機器B的資料中轉站了。同理,機器C也可以成為機器B到機器A的資料中轉站。

  這個就是通過ARP欺騙所實現的資料監聽,關於監聽,這裡就不多囉嗦了,呵呵,其實是因為我還不會,以後學會了再寫相關我的文件吧……

  呵呵,這片文章扯多了點,真的很感謝你可以堅持看到這裡,下面我將介紹一下程序本身的一些情況。

  在我學習完傳輸協定之後,緊接著就是實現ARP包的傳送程序,從網上找到了SendARP.c,這是一個linux下傳送ARP包的程序,直接用socket,但是我後來始終沒有找到方法在windows下直接使用socket傳送ARP包,後來看到了Refdom在安全焦點的文章《交換網路中的嗅探和ARP欺騙》,於是決定採用WinPcap,功能強大、使用方便,還是免費的,呵呵,好呀好呀就是好呀!

  我這個程序其實也沒有什麼大作用,只是用來傳送ARP包。目前可以直接傳送ARP包的程序很多,不過都是指令行的,在許多人看來指令行可能更方便一些,不過如果在圖形界面上另外做一些擴展功能,那麼圖形界面的優勢將會是很明顯的。另外,我暫時沒有打算把他做成黑客工具,僅僅只是供學習研究使用。

  由於種種原因,程序本身存在一些局限,先說明一下。
  首先,這個程序有執行平台的限制,僅僅適用於 Windows 2000 和 Windows XP,主要是因為兩個原因造成了平台限制。其一是我的開發平台為 Win2000,Win2000 和 Win9x 系列在網路硬體上的記錄形式可能不一樣,為了避免可能存在的問題,所以要求程序不能在 Win9x 上使用;其二,由於程序中使用了 WinPcap 傳送資料包,而這個東西它自己說不支持 Windows 2003,但是我在 Win2003 上測試時,一點問題也沒有。
  其次,執行該程序對於系統還有一個要求,即必須安裝 WinPcap,由於WinPcap 的東西太多了,我也不好帶上一堆dll和sys文件發佈,所以還是先把 WinPcap 的執行庫裝上比較省事。這個東西的下載位址在文章最後。

  限制了一堆,這裡還要說明一點不限制的,即對於區域網路內其他機器的系統平台不限制,不論是 Windows 還是 Linux,不過有個前提(鬱悶!好像又是一個限制),要用 TCP/IP 呀!
  另外,這個程序僅僅提供了傳送ARP包的功能,如果你想檢視對方機器發給你的ARP回應包,還是需要借助別的 sniffer 工具。我還不會 sniffer 呢,等哪天學會了,再把這兩個功能整合起來。




  如圖所顯示,這就是程序的主界面了,主要功能就是傳送ARP包。

  如果前面的文章你看明白了,那麼這個界面左側的各項就不需要多解釋了吧……
  右側的東西也就是本程序的擴展功能了,也是和其他同類工具的區別所在。
  其實,在我剛開始學習ARP傳輸協定時,就找到了許多指令行的ARP工具,我當時做了這樣兩個試驗,一個是模擬系統查詢另外一台機器物理位址的程序,另外一個是通過ARP欺騙導致另外一台機器無法上網,我稱這台機器為小白鼠。
  在這兩個試驗中,我都需要知道小白鼠機器的IP位址和物理位址。如果打算自己手動獲取這兩項信息,那麼首先要得到該機器的IP位址,這個方法太多了,不囉嗦了,然後ping該IP位址,此時系統已經通過ARP傳輸協定進行了相關轉換,所以我們就可以通過「arp -a」指令獲取該機器的物理位址。
  我一直都是一個懶人,所以我就想如果把這個程序整合到自己的程序中,豈不是更好,於是就打算做一個圖形界面的,並且有這些輔助功能,所以 SendARP 就成為了現在這個樣子。
  你也許會問我,如果你只知道對方機器名,不知道對方機器IP位址,能否把ping的這一步也整合到程序中去,這個……這個……我很懶的……

  界面右側有兩個 ListView,上面一個 ListView 是系統當前的可用網路卡的列表,包括每個網路卡在網路連接中的名稱、IP位址和物理位址,下面一個 ListView 是上面一個 ListView 中選的網路卡所在網路中的所有ARP對應條目列表,包括每項對應條目的IP位址和物理位址。

  你可以選項在哪一個網路卡上試驗,主要是為了方便多網路卡的朋友。

  如果你想知道某個IP位址對應的物理位址,可以點擊「增加」按鈕,輸入IP位址,如果該IP位址是存在該區域網路內的話,那麼系統自己會完成ARP轉換程序,程序會讀取轉換結果,重新列舉所有ARP對應條目。

  如果你想刪除系統中某個ARP對應條目,可以選它,然後點擊「刪除」按鈕。

  舉兩個例子:
1、假想一台機器通過廣播ARP請求包來獲取自己機器的物理位址,然後填充一個資料包用來描述這個ARP請求包,將這個包傳送出去。該包將對自己電腦上的ARP條目產生影響,那麼你可以點擊「重新整理」按鈕檢視現在系統上所有ARP對應條目,將會發現假想的那台機器在自己電腦上的ARP對應條目。
2、就是上面提到的導致某台機器無法與網關通訊的例子,這裡就不多囉嗦了。

  還有一個小功能,因為程序中經常會將界面右側的位址信息複製到界面左側,那麼你可以在 ListView 中相對應的位置點擊滑鼠右鍵,此時對應位置中的內容已經被複製到記事本中,你就可以到界面左側去貼上了。

  還有一個輸入格式需要說明,輸入的IP位址一律只接收那種點式輸入,比如 192.168.0.1,輸入的物理位址建議類似於這樣 11-22-33-44-55-66 或者 112233445566,我沒有做過多的判斷、轉換和容錯處理,大家自己小心……

  好像都寫明白了吧,最後補充一點,那個截取影圖中的ARP條目全部都是我自己做假的,界面左側的各個字段的資料一旦發出去,就可以產生一個人為製作的ARP對應條目,這是模仿我上面提到的第一個例子,不過其中 DLC Header 的傳送方物理位址和ARP畫格中的傳送方物理位址不一樣,通過試驗結果,我們就可以知道在windows系統下到底會取哪一個,其實從理論上來看,也是應該取後面一個。

  最後,提一下程序程式碼的問題,這個程序的程式碼是完全開放的,不過文件數目比較多一點,所以不方便直接貼上來,大家可以到下面的位址下載程序源碼,編譯環境為 Microsoft Visual Studio .NET 2003,開發語言為 VC,我的程式碼不是很規範,大家在邊看邊批評的同時,別忘了將意見告訴我,說明 我改正。在此特別感謝老羅為我提供空間。
  另外,由於用到了 WinPcap,所以在編譯時需要 WinPcap 的開發包,下載位址在下面。

由於無法正常顯示html表格,所以提供一下htm版和mht版的我的文件,位址如下:
http://www.luocong.com/sparrow/arp/SendARP_doc.htm
http://www.luocong.com/sparrow/arp/SendARP_doc.mht
源碼位址就在上帖的最後。

SendARP 來源碼: http://www.luocong.com/sparrow/arp/SendARP_src.rar
WinPcap 執行庫: http://winpcap.polito.it/install/bin/WinPcap_3_0.exe
WinPcap 開發包: http://winpcap.polito.it/install/bin/wpdpack_3_0.zip



sparrow
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次