監聽乙太網(三) Packet32資料結構說明 (轉)
乙太網(三) Packet32資料結構說明:namespace prefix = o ns = "urn:schemas--com::office" />
Article last modified on 2002-9-17
The information in this article applies to:
--Microsoft WindwNTx
--- Microsoft Windwos 9x
--WinPcap: the Free Packet Capture Architecture for
Packet32包中的資料結構:
第一個重要的資料結構:_ADAPTER(關work Adapter的)
typedef struct _ADAPTER
{
// 一個開啟的NPF 例項的控制程式碼:
HANDLE hFile;
// 當前開啟的的名字:
CHAR SymbolicLink[MAX_LINK_NAME_LENGTH];
// 在這塊Adapter上,一個資料包被寫的次數:
int NumWrites;
// 這塊Adapter上的read操作的通知事件。它可以被傳遞給標準(如WaitForSingle或者WaitForMultipleObjects),這樣可以等待到driver的緩衝區內有資料到來。在同時等待幾個事件的GUI中,它特別有用。在/XP中,函式PacketSetMinToCopy()可以用來設定核心緩衝區中激發本事件的最小資料大小:
HANDLE ReadEvent;
// 設定一個時間,到時候,即使沒有捕獲任何包,read操作也會被釋放,ReadEvent也會被觸發:
UINT ReadTimeOut;
} ADAPTER, *LPADAPTER;
第二個重要的資料結構:_PACKET(關於Packet的)
typedef struct _PACKET
{
// 向後相容用的:
HANDLE hEvent;
// 向後相容用的:
OVERLAPPED OverLapped;
// 存放Packets的緩衝區:
PVOID Buffer;
// 緩衝區的大小:
UINT Length;
// 當前緩衝區中有效的位元組數,如,上一次PacketReceivePacket()函式接收到的位元組數:
D ulBytesReceived;
// 向後相容用的:
BOOLEAN bIoComplete
} PACKET, *LPPACKET;
第三個重要的資料結構:_PACKET_OID_DATA (關於OID請求的)
typedef struct _PACKET_OID_DATA
{
// OID的code,有效的OID code的定義參見ntddndis.h;比如:
// OID_GEN_SUPPORTED_LIST,OID_GEN_VENDOR_DESCRIPTION等:
ULONG Oid;
// 成員Data的長度:
ULONG Length;
// 存放傳送給網路卡或者從網路卡接收的資料的緩衝區:
UCHAR Data[1];
}
typedef struct _PACKET_OID_DATA PACKET_OID_DATA, *PPACKET_OID_DATA;
其他資料結構:
npf_if_addr(網路卡的地址):
typedef struct npf_if_addr {
struct sockaddr IPAddress; // address.
struct sockaddr SubnetMask; // Netmask for that address.
struct sockaddr Broadcast; // Broadcast address.
}npf_if_addr;
bpf_hdr(Packet Header):
struct bpf_hdr {
// 捕獲到的packet的timestamp:
struct timeval bh_tstamp;
// 捕獲到的packet的長度:
UINT bh_caplen;
// 原始packet的長度:
UINT bh_datalen;
// bpf header的長度(this struct plus alignment padding):
USHORT bh_hdrlen;
};
bpf_insn(一個簡單的BPF偽指令):
bpf_insn中包含了一個BPF序號產生器的簡單指令,它被用來傳送一個filter程式給driver。
struct bpf_insn {
// 指令的型別和定址:
USHORT code;
// Jump if true:
UCHAR jt;
// Jump if false:
UCHAR jf;
// 通用的一個欄位,有多種目的:
int k;
};
bpf_program(一個BPF偽匯序):
這段程式將被PacketSetBPF()注射入核心,並被應用到每一個進來的Packet。
struct bpf_program {
// 程式指令數目,如,後面的bpf_insn結構的數目:
UINT bf_len;
// 指向第一個bpf_insn結構的指標:
struct bpf_insn *bf_insns;
};
bpf_stat (本次捕獲的統計資料):
這個結構將被Packet.dll用來返回捕獲過程中的統計資料。
struct bpf_stat {
// 從開始捕獲起,這個driver從網路卡上接收的Packet的數量(包括driver丟失的Packet):
UINT bs_recv;
//從開始捕獲起,這個driver丟失的Packet的數量,一般地,包丟失,是因為driver的緩衝區滿了,這時driver將扔掉這個包:
UINT bs_drop;
UINT ps_ifdrop;
// 透過filter的包的數量:
UINT bs_capt;
};
dump_bpf_hdr(Dump Packet Header):
struct dump_bpf_hdr{
// Packet的timestamp:
struct timeval ts;
// 捕獲到的packet的長度:
UINT caplen;
// 原始Packet的長度:
UINT len;
};
NetType (型別):
NetType用於PacketGetNetType(),返回當前網路卡的型別和速度。
struct NetType{
//當前網路卡的MAC:
UINT LinkType;
// 網路的速度(bits/s):
UINT LinkSpeed;
};
(To be continued)
Writen by to:zhengyun@tomosoft.com">zhengyun@tomosoft.com
本文件所包含的資訊代表了在釋出之日,ZhengYun 對所討論問題的當前看法,Zhengyun 不保證所給資訊在釋出之日以後的準確性。
本文件僅供參考。對本文件中的資訊,Zhengyun 不做任何明示或默示的保證。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991783/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 監聽乙太網(四) Packet32函式SDK (轉)函式
- TCP/IP網路協議棧:乙太網資料包結構、802.3、MTUTCP協議
- 網路基礎 : 乙太網資料封裝封裝
- 【PG結構】Postgresql資料庫資料目錄說明SQL資料庫
- 乙太網分析儀
- 乙太網基礎
- ECshop 每個資料庫表結構說明資料庫
- 例說資料結構&STL(三)——deque資料結構
- 乙太網網路分析儀
- MySQL資料庫監控項說明MySql資料庫
- 乙太網分析儀品牌
- AG5300[乙太網供電 Plus 模組]、AG5800[乙太網供電PoE PD 模組] 中文資料
- flowable 表結構說明
- 微機結構說明
- oracle資料塊轉儲說明Oracle
- 資料結構 關於B樹說明及插入和分裂資料結構
- DKhadoop框架結構說明Hadoop框架
- 加強堆結構說明
- Oracle 官方文件 結構說明Oracle
- Oracle官方文件結構說明Oracle
- 實驗十三——————乙太網埠聚合
- VEPA虛擬乙太網埠聚合
- oracle 各資料型別dump說明(三)Oracle資料型別
- 基於UDP協議的乙太網資料收發控制器UDP協議
- 說說Oracle監聽器(一)Oracle
- 說說Oracle監聽器(二)Oracle
- 繫結 WiFi 和乙太網,以使網路間移動更輕鬆WiFi
- 共享式乙太網採用匯流排型拓撲結構通訊方式簡介
- 顯示乙太網Mac地址的方法Mac
- 客製化NVRAM的乙太網地址VR
- 什麼是乙太網?—Vecloud微雲Cloud
- FPGA乙太網學習-RGMII與GMIIFPGA
- oracle資料檔案頭轉儲說明Oracle
- Linux 下各資料夾的結構說明及用途介紹Linux
- 高速乙太網有助於滿足資料中心的需求
- 【乙太網】BCM84885B0KFEBG、BCM84885B0IFEBG雙埠乙太網收發器
- Oracle資料庫監聽Oracle資料庫
- 繫結 WiFi 和乙太網,增加網路間移動的便利性WiFi