詳談調用winpcap驅動寫arp多功能工具
Author: TOo2y[原創]
E-mail:
[email protected]Homepage: www.safechina.Net
Date: 11-9-2002
一 winpcap驅動簡介
二 Packet.dll相關數據結構及函數
三 T-ARP功能及原理介紹
四 T-ARP主要代碼分析
五 T-ARP源代碼
一)winpcap驅動簡介
winpcap(windows packet capture)是Windows平台下一個免費,公共的網絡訪問系統。開發winpcap這個項目的目的在於為win32應用程序提供訪問網絡底層的能力。它提供了以下的各項功能:
1> 捕獲原始數據報,包括在共享網絡上各主機發送/接收的以及相互之間交換的數據報;
2> 在數據報發往應用程序之前,按照自定義的規則將某些特殊的數據報過濾掉;
3> 在網絡上發送原始的數據報;
4> 收集網絡通信過程中的統計信息。
winpcap的主要功能在於獨立於主機協議(如TCP-IP)而發送和接收原始數據報。也就是說,winpcap不能阻塞,過濾或控制其他應用程序數據報的發收,它僅僅只是監聽共享網絡上傳送的數據報。因此,它不能用於QoS調度程序或個人防火牆。
目前,winpcap開發的主要對象是windows NT/2000/XP,這主要是因為在使用winpcap的用戶中只有一小部分是僅使用Windows 95/98/Me,並且M$也已經放棄了對win9x的開發。因此本文相關的程序T-ARP也是面向NT/2000/XP用戶的。其實winpcap中的面向9x系統的概念和NT系統的非常相似,只是在某些實現上有點差異,比如說9x只支持ANSI編碼,而NT系統則提倡使用Unicode編碼。
本文討論的是packet.dll所提供的各種函數,因為它們完全可以實現本文所希望的各項要求。但是如果你有其他特別的或更高級的要求,winpcap也提供了另一個動態連接庫wpcap.dll。雖然wpcap.dll依靠於packet.dll,但是它卻提供了一種更簡單,直接,有力的方法來更好的利用編程環境。比如捕獲一個數據報,創建一個數據報過濾裝置或將監聽到的數據報轉存到某個文件等,wpcap.dll都會為你提供更加安全的實現方法。
二)Packet.dll相關數據結構及函數
本文的目的之一在於介紹如何利用winpcap驅動寫ARP工具,因此有必要介紹一些相關的數據結構和函數,要不然看著一行行代碼和函數,也許會有些不知所雲。
首先介紹一些相關的數據結構:
1. typedef struct _ADAPTER ADAPTER //描述一個網絡適配器;
2. typedef struct _PACKET PACKET //描述一組網絡數據報的結構;
3. typedef struct NetType NetType //描述網絡類型的數據結構;
4. typedef struct npf_if_addr npf_if_addr //描述一個網絡適配器的ip地址;
5. struct bpf_hdr //數據報頭部;
6. struct bpf_stat //當前捕獲數據報的統計信息。