MFC+WinPCAP自定义报文开发环境

本文介绍如何使用VS2015和WinPCAP搭建网络抓包环境,并通过示例展示如何编写一个小程序来收集局域网内的所有IP地址。文章详细介绍了开发环境配置步骤,包括安装底层驱动、下载库文件、配置VS2015项目属性、添加预处理定义及库文件等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,建立开发环境,VS2015 + WinPCAP
1.安装WinPcap,底层驱动;
2.下载xcap库;http://download.youkuaiyun.com/download/sinat_27261621/10127370
3.配置开发环境,新建一个MFC项目,然后配置属性:
添加头文件目录
工具->属性->项目和解决方案-> VC++目录->包含文件->添加WinPcap开发包中的Include目录。
添加库文件目录
与上一个步骤一样,只有一小个变化,选择“库文件”,然后添加WinPcap开发包中的Lib目录。
增加与WinPCAP有关的预处理定义
项目->项目属性->配置属性->预处理定义->添加WPCAP和HAVE_REMOTE。
添加wpcap.lib
项目->项目属性->配置属性->连接器->命令行->附加选项框中加入wpcap.lib。
添加pcap.h头文件
#include “pcap.h”
4.开发环境搭好以后就可以开始编码了
5.我们来做个收集局域网内所有IP的小程序
首先需要枚举网卡,获取网卡的IP,mask,mac等信息,然后通过pcap的接口发送我们自定义的报文。
获取网卡信息的API:
GetAdaptersAddresses
GetAdaptersInfo
这两个都可以获取到网卡的信息,视情况而定;
获取到网卡信息后,然后就可以组包了;我们用ARP去获取局域网内的IP,收到ARP回复就是代表存在;
ARP报文数据结构:

#pragma pack(push)
#pragma pack(1)
//定义常量

#define EPT_IP   0x0800    /* type: IP */
#define EPT_ARP   0x0806    /* type: ARP */
#define EPT_RARP 0x8035    /* type: RARP */
#define ARP_HARDWARE 0x0001    /* Dummy type for 802.3 frames */
#define ARP_REQUEST 0x0001    /* ARP request */
#define ARP_REPLY 0x0002    /* ARP reply */

//定义以太网首部
typedef struct ehhdr
{
    unsigned char eh_dst[6];   /* destination ethernet addrress */
    unsigned char eh_src[6];   /* source ethernet addresss */
    unsigned short eh_type;   /* ethernet pachet type */
}EHHDR, *PEHHDR;

//定义以太网arp字段
typedef struct arphdr
{
    //arp首部
    unsigned short arp_hrd;    /* format of hardware address */
    unsigned short arp_pro;    /* format of protocol address */
    unsigned char arp_hln;    /* length of hardware address */
    unsigned char arp_pln;    /* length of protocol address */
    unsigned short arp_op;     /* ARP/RARP operation */

    unsigned char arp_sha[6];    /* sender hardware address */
    unsigned long arp_spa;    /* sender protocol address */
    unsigned char arp_tha[6];    /* target hardware address */
    unsigned long arp_tpa;    /* target protocol address */
}ARPHDR, *PARPHDR;

//定义整个arp报文包,总长度42字节
typedef struct arpPacket
{
    EHHDR ehhdr;
    ARPHDR arphdr;
} ARPPACKET, *PARPPACKET;
#pragma pack(pop) 

组包后调用pcap的接口发送请求:
调用pcap_open_live打开网卡;
调用pcap_next_ex发包;
另外起一个线程接收报文并过滤;
将过滤后的信息在ListCtrl中列出来:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值