步骤 1. 创建一个基于对话框的应用程序 PackCapture
实现步骤
步 骤 2. 添 加 控 件 IDC_EDIT_COUNT , IDC_EDIT_PACKET ,
IDC_BTN_CAPTURE
以及静态控件 Capture Number,Capture Information。
设置对话框标题为 “数据包捕获程序”。
步骤 3. 为以下控件增加 Value 变量
控件 IDC_EDIT_COUNT
控件 IDC_EDIT_PACKET
变量 int m_Count
变量 CString m_Packet
步骤 4. 在 stdafx.h 增加以下十二行:
#include "winsock2.h"
#include "ws2tcpip.h"
#pragma comment(lib,"ws2_32.lib")
#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)
#define IPV4_VERSION 4
#define IPV6_VERSION 6
#define ICMP_PACKET 1
#define IGMP_PACKET 2
#define TCP_PACKET
6
8
#define EGP_PACKET
#define UDP_PACKET
17
#define OSPF_PACKET 89
步骤 5. 为 CPackCaptureDlg 增加以下 private 类型的结构体定义:
typedef struct IP_HEAD //IP 头部结构
{
union
{
unsigned char Version;
unsigned char HeadLen;
//版本(字节前 4 位)
//头部长度(字节后 4 位)
};
unsigned char ServiceType; //服务类型
unsigned short TotalLen;
unsigned short Identifier;
union
{
//总长度
//标识符
unsigned short Flags;
//标志位(字前 3 位)
unsigned short FragOffset; // 片偏移(字后 13 位)
};
unsigned char TimeToLive;
//生存周期
unsigned char Protocol;
unsigned short HeadChecksum; //头部校验和
//源 IP 地址
unsigned int
unsigned int
//目的 IP 地址
SourceAddr;
DestinAddr;
//协议
}ip_head;
typedef struct ICMP_HEAD
{
//ICMP 头部结构
//类型
//代码
unsigned char Type;
unsigned char Code;
unsigned short HeadChecksum; //头部校验和
unsigned short Identifier;
unsigned short Sequence;
//标识符
//序号
}icmp_head;
步骤 6.
为按钮 IDC_BTN_CAPTURE 的单击事件增加函数 OnBtnCapture