zoukankan      html  css  js  c++  java
  • Winpcap基础代码

    Winpcap基础代码

     

        使用Winpcap进行网络数据的截获和发送都需要的一段代码:

    #include<PCAP.H>
    #pragma comment(lib, "wpcap.lib")
    //#pragma comment(lib, "ws2_32.lib")

    #include<iostream>
    using namespace std;

    //回调函数
    void packet_handler(u_char*param,const struct pcap_pkthdr*header,const u_char*pkt_data);

    int main()
    {
        pcap_if_t *alldevs;
        pcap_if_t *d;
        char errbuf[PCAP_ERRBUF_SIZE];
        /* 获得网卡的列表 */
        if (pcap_findalldevs(&alldevs, errbuf) == -1){}
        /* 找到要选择的网卡结构 first NIC*/
        d=alldevs;//d->next
        pcap_t*adhandle;//记录打开的网卡
        /* 打开选择的网卡 */
        /*
        65536-max mac packet
        1-混杂模式
        1000-1s超时
        
    */
        if((adhandle=pcap_open_live(d->name,65536,1,1000,errbuf)) == NULL){}
        //提取子网掩码
        u_int netmask;
        if(d->addresses)
            netmask=((sockaddr_in*)d->addresses->netmask)->sin_addr.S_un.S_addr;
        else
            netmask=0xffffffff;//无效地址子网掩码全1
        /* 释放列表 */
        pcap_freealldevs(alldevs);

        /*--------------------------------------------------------------------------*/
        u_char data[100]={0};
        /* 发送数据报文 */
        int i=50000;
        while(i--)
            pcap_sendpacket(adhandle,data,100);

        /*--------------------------------------------------------------------------*/
        /* 抓取数据报文 */
        if(pcap_datalink(adhandle)!=DLT_EN10MB){}//以太网
        /* 配置过滤器 */
        bpf_program fcode;
        char packet_filter[]="ip and udp";
        //编译过滤规则
        if(pcap_compile(adhandle,&fcode,packet_filter,1,netmask)<0){}
        if(pcap_setfilter(adhandle,&fcode)<0){}
        pcap_loop(adhandle,0,packet_handler,NULL);
        pcap_close(adhandle);
        return 0;
    }
    void packet_handler(u_char*param,const struct pcap_pkthdr*header,const u_char*pkt_data)
    {
        struct tm ltime;
        char timestr[16];
        time_t t=(time_t)header->ts.tv_sec;
        localtime_s(&ltime,&t);
        /* 将时间戳转变为易读的标准格式*/
        strftime( timestr, sizeof timestr, "%H:%M:%S", &ltime);
        printf("%s,%.6d len:%d caplen:%d\n", timestr, header->ts.tv_usec, header->len,header->caplen); 
    }

        Winpcap参考手册链接:http://www.ferrisxu.com/WinPcap/html/index.html 

  • 相关阅读:
    统计学习及监督学习概论(2)
    推荐系统(1)
    统计学习及监督学习概论(1)
    JavaScript学习08 Cookie对象
    JavaScript学习07 内置对象
    JavaScript学习06 JS事件对象
    JavaScript学习05 定时器
    JavaScript学习04 对象
    JavaScript学习03 JS函数
    JavaScript学习02 基础语法
  • 原文地址:https://www.cnblogs.com/fanzhidongyzby/p/2613256.html
Copyright © 2011-2022 走看看