WinPcap应用小记

引言

项目中根据需求要增加抓包模块,win平台下自然就用到了winpcap。
同时提供了按大小存或按时间存储的接口,并在外层控制存储数量。效果如下:
抓包功能

配置

  1. 在官网下载安装包开发包
  2. 配置VS2012:
    • 项目→属性→配置属性→C/C++→常规,右侧的“附加包含库目录”中添加开发包解压后的WpdPack的Include目录;
    • 项目→属性→配置属性→C/C++→预处理器,右侧的“预处理器定义”加上WPCAP,HAVE_REMOTE,WIN32;
    • 项目→属性→配置属性→链接器→常规,右侧的“附加库目录”中添加开发包解压后的WpdPack的lib目录;
    • 项目→属性→配置属性→链接器→输入,右侧的“附加依赖项”中添加wpcap.lib和Packet.lib,ws2_32.lib。

使用

  1. 线程中实现基础的抓包并保存功能,见代码
  2. 其他高级应用,如过滤等,参考引用文章
#ifndef THREADPCAP_H
#define THREADPCAP_H

#pragma comment(lib,"wpcap.lib")
#pragma comment(lib,"ws2_32.lib")
#include <pcap.h>
#include <QString>
#include <QThread>

typedef struct _DEVInfo{
    QString name;
    QString description;
    QString familyName;         //协议族,
    QString address;            //主机ip
    QString netmask;            //子网掩码
}DEVInfo;

// 将字节序ip地址转为点分十进制的字符串地址,并获取
inline char *my_iptos(u_long in);

/* 定义了QThread 的子类 PcapThread */
class ThreadPcap:public QThread
{
    Q_OBJECT

public:
    ThreadPcap(QObject *parent=0);
    ~ThreadPcap();

    u_char hexStr2UChar(QString hexS);
    // Windows Socket 初始化
    void winSocketInit();
    // 扫描本机所有的适配器,并获取每个适配器的信息
    QVector<DEVInfo> findAllDev();
    // 打开一个适配器
    void openLiveDev(const char *);
    // 打开一个堆文件
    void openDump(QString);
    // 捕获数据包函数
    void run();
    // 停止抓包
    void stop();
    // 设置保存模式
    void setSaveMode(int,int);
    // 重新开始按时间存文件
    void reStartSavePeriod();
signals:
    void signal_creatPcapFile(QString);//各个变量的变化发送到GUI线程    
protected:
    pcap_t * m_handle;
    pcap_if_t *alldevs;
    pcap_dumper_t *dumpfp;

private:
    pcap_pkthdr* pHeader_;
    const u_char * pPktdata_;                           //数据包
    int res;
    bool scanIsFinished;
    bool m_bSaveTimeup;
    int m_nSaveMode;//保存模式,0按大小KB保存,1按大小MB保存,2按时间s保存
    int m_nSaveSizeNum;//按大小保存时,单包的大小
};

#endif // THREADPCAP_H
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值