WEB开发网
开发学院操作系统windows 2008 深度剖析WinPcap之(八)——打开与关闭适配器 阅读

深度剖析WinPcap之(八)——打开与关闭适配器

 2009-09-21 00:00:00 来源:WEB开发网   
核心提示: 参数promisc是描述该接口是否被设置为混杂模式,现在,深度剖析WinPcap之(八)——打开与关闭适配器(4),这不能工作在”any”设备上;如果使用一个”any”或NULL参数,将忽略 promisc标识符,typedef struct pc

参数promisc是描述该接口是否被设置为混杂模式。现在,这不能工作在”any”设备上;如果使用一个”any”或NULL参数,将忽略 promisc标识符。将 to_ms 设置为0,在支持超时操作的平台上,意味着没有超时。也就是如果没有数据包到达,读操作将永远不会返回。如果设置成-1,则情况恰好相反,无论有没有数据包到达,读操作都会立即返回。

参数errbuf指向用户所分配的一个缓冲区,将用来存储该函数的警告与错误信息。

函数返回一个指向” pcap_t”的指针,将作为后续调用的参数。

1.1.4        pcap_open_offline函数

函数打开一个采用tcpdump/libpcap格式存储的文件读取数据包。函数原型如下:

pcap_t* pcap_open_offline(const char *fname, char *errbuf);

参数fname指定了要打开的文件。该文件与tcpdump(1)与 tcpslice(1) 所使用的格式相同。"-"是stdin的同义词。参数errbuf用来返回函数失败的错误信息。

函数返回一个指向” pcap_t”的指针,将作为后续调用的参数。

1.1.5        pcap_close函数

函数pcap_close()用来关闭与p关联的文件并释放相关的资源,函数原型如下:

void pcap_close(pcap_t *p);

参数p为pcap_open()或pcap_open_XXX()函数所获取的”pcap_t”指针。

1.2      关键数据结构pcap结构体

结构体pcap是一个已打开捕捉实例的描述符。该结构体对用户来说是不透明的,它通过wpcap.dll提供的函数,维护它的内容。此处只说明WIN32平台下使用的成员。

typedef struct pcap pcap_t;
 
struct pcap {
    ADAPTER *adapter;
    LPPACKET Packet;
    int nonblock;
 
    int snapshot;
    int linktype;         /*网络链路的类型 */
    int linktype_ext;     /*linktype成员的扩展信息*/
    int tzoff;            /*时区偏移*/
    int offset;           /*正确对齐的偏移*/
    int activated;       /* 如果捕获已经准备好开始,为true*/
    int oldstyle;          /* 如果使用pcap_open_live()*/
 
    int break_loop;   /*用来强制从数据包循环读取中退出的标志*/
 
 
    struct pcap_sf sf;
    struct pcap_md md;
    struct pcap_opt opt;
 
    /* 读缓冲区*/
    int bufsize;
    u_char *buffer;
    u_char *bp;
    int cc;
 
    /*pcap_next()的位置持有者*/
    u_char *pkt;
 
    /* 只接收这方向/这些方向的数据包*/
    pcap_direction_t direction;
 
    /*
     * 各种方法,具体定义参见后续内容
     */
    activate_op_t      activate_op;
    can_set_rfmon_op_t can_set_rfmon_op;
    read_op_t          read_op;
    inject_op_t        inject_op;
    setfilter_op_t     setfilter_op;
    setdirection_op_t  setdirection_op;
    set_datalink_op_t  set_datalink_op;
    getnonblock_op_t   getnonblock_op;
    setnonblock_op_t   setnonblock_op;
    stats_op_t         stats_op;
 
    setbuff_op_t       setbuff_op;
    setmode_op_t       setmode_op;
    setmintocopy_op_t  setmintocopy_op;
 
    cleanup_op_t       cleanup_op;
 
    /*如果过数据包过滤不在内核空间,在此放置过滤器代码*/
    struct bpf_program fcode;
 
    char errbuf[PCAP_ERRBUF_SIZE + 1];
    int dlt_count;
    u_int *dlt_list;
 
    struct pcap_pkthdr pcap_header; /* pcap_next_ex()工作所需的链表*/
 
};

上一页  1 2 3 4 5  下一页

Tags:深度 剖析 WinPcap

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接