pcap結構--pcap_t數據類型

struct pcap [pcap-int.h]
{
    int fd; /* 文件描述字,實際就是 socket */ 
    /* 在 socket 上,可以使用 select() 和 poll() 等 I/O 複用類型函數 */
    int selectable_fd;
    int snapshot; /* 用戶期望的捕獲數據包最大長度 */
    int linktype; /* 設備類型 */
    int tzoff;        /* 時區位置,實際上沒有被使用 */
    int offset;    /* 邊界對齊偏移量 */
    int break_loop; /* 強制從讀數據包循環中跳出的標誌 */
    struct pcap_sf sf; /* 數據包保存到文件的相關配置數據結構 */
    struct pcap_md md; /* 具體描述如下 */ 
    int bufsize; /* 讀緩衝區的長度 */
    u_char buffer; /* 讀緩衝區指針 */
    u_char *bp;
    int cc;
    u_char *pkt;
    /* 相關抽象操作的函數指針,最終指向特定操作系統的處理函數 */
    int    (*read_op)(pcap_t *, int cnt, pcap_handler, u_char *);
    int    (*setfilter_op)(pcap_t *, struct bpf_program *);
    int    (*set_datalink_op)(pcap_t *, int);
    int    (*getnonblock_op)(pcap_t *, char *);
    int    (*setnonblock_op)(pcap_t *, int, char *);
    int    (*stats_op)(pcap_t *, struct pcap_stat *);
    void (*close_op)(pcap_t *);
    /*如果 BPF 過濾代碼不能在內核中執行,則將其保存並在用戶空間執行 */
    struct bpf_program fcode;
    /* 函數調用出錯信息緩衝區 */
    char errbuf[PCAP_ERRBUF_SIZE + 1];  
    /* 當前設備支持的、可更改的數據鏈路類型的個數 */
    int dlt_count;
    /* 可更改的數據鏈路類型號鏈表,在 linux 下沒有使用 */
    int *dlt_list;
    /* 數據包自定義頭部,對數據包捕獲時間、捕獲長度、真實長度進行描述 [pcap.h] */
    struct pcap_pkthdr pcap_header;    
};

/* 包含了捕獲句柄的接口、狀態、過濾信息  [pcap-int.h] */
struct pcap_md {
    /* 捕獲狀態結構  [pcap.h] */
    struct pcap_stat stat;  
    int use_bpf; /* 如果爲1,則代表使用內核過濾*/
    u_long    TotPkts;
    u_long    TotAccepted; /* 被接收數據包數目 */
    u_long    TotDrops;    /* 被丟棄數據包數目 */
    long    TotMissed;    /* 在過濾進行時被接口丟棄的數據包數目 */
    long    OrigMissed; /*在過濾進行前被接口丟棄的數據包數目*/
#ifdef linux
    int    sock_packet; /* 如果爲 1,則代表使用 2.0 內核的 SOCK_PACKET 模式 */
    int    timeout;    /* pcap_open_live() 函數超時返回時間*/
    int    clear_promisc; /* 關閉時設置接口爲非混雜模式 */
    int    cooked;        /* 使用 SOCK_DGRAM 類型 */
    int    lo_ifindex;    /* 迴路設備索引號 */
    char *device;    /* 接口設備名稱 */  
    /* 以混雜模式打開 SOCK_PACKET 類型 socket 的 pcap_t 鏈表*/
    struct pcap *next;    
    #endif
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章