📄 packetmac.h
字号:
// PacketMAC.h: interface for the PacketMAC class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_PACKETMAC_H__F41E953E_158D_49AE_B3DD_02A2D9A0A8DD__INCLUDED_)
#define AFX_PACKETMAC_H__F41E953E_158D_49AE_B3DD_02A2D9A0A8DD__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#pragma comment(lib, "Packet.lib")
#pragma comment(lib, "wpcap.lib")
#include "Packet32.h"
#include "Ntddndis.h"
#define ETH_ARP 0x0806
#define ARP_HARDWARE 0x0001
#define ETH_IP 0x0800
#define ARP_REQUEST 0x0001
#define ARP_REPLY 0x0002
#define MAC_HEAD 0xAB
#define DATA_HEAD_ALL 0x01
#define DATA_HEAD 0x02
#define BUFMAX 50
struct IPHDR
{
unsigned char h_lenver;
unsigned char tos;
unsigned short total_len;
unsigned short ident;
unsigned short frag_and_flags;
unsigned char ttl;
unsigned char proto;
unsigned short checksum;
unsigned int sourceip;
unsigned int destip;
};
struct ARPHDR
{
unsigned short arp_hdr;
unsigned short arp_pro;
unsigned char arp_hln;
unsigned char arp_pln;
unsigned short arp_opt;
unsigned char arp_sha[6];
unsigned long arp_spa;
unsigned char arp_tha[6];
unsigned long arp_tpa;
};
struct ETHDR
{
unsigned char eh_dst[6];
unsigned char eh_src[6];
unsigned short eh_type;
};
struct MAC
{
unsigned char head;
unsigned char tha[6];
unsigned char sha[6];
unsigned char len[2];
unsigned char data[1000];
unsigned char crc[4];
};
struct MACDATA
{
unsigned char head;
unsigned char data[999];
};
struct Gateway
{
char ip[20];
};
class GatewayBuffer
{
public:
GatewayBuffer(int a=1)
{
max = a;
Buffer = new Gateway[max];
index = 0;
count = 0;
}
bool IsNull()
{
if(count<=0)
{
return true;
}
return false;
}
void Put(Gateway &buffer)
{
index++;
if(index>=max)
{
index = 0;
}
Buffer[index] = buffer;
count++;
if(count>max)
{
count = max;
}
}
Gateway Get()
{
Gateway temp;
temp.ip[0] = '#';
temp.ip[1] =0;
if(count<=0)
{
count =0;
return temp;
}
temp = Buffer[index];
index--;
if(index<0)
{
index = max-1;
}
count--;
if(count<0)
{
count =0;
}
return temp;
}
private:
Gateway *Buffer;
int max;
int index;
int count;
};
class MacBuffer
{
public:
MacBuffer(int a=1)
{
max = a;
Buffer = new MAC[max];
index = 0;
count = 0;
}
bool IsNull()
{
if(count<=0)
{
return true;
}
return false;
}
void Put(MAC &buffer)
{
index++;
if(index>=max)
{
index = 0;
}
Buffer[index] = buffer;
count++;
if(count>max)
{
count = max;
}
}
MAC Get()
{
MAC temp;
temp.head = '#';
if(count<=0)
{
count =0;
return temp;
}
temp = Buffer[index];
index--;
if(index<0)
{
index = max-1;
}
count--;
if(count<0)
{
count =0;
}
return temp;
}
private:
MAC *Buffer;
int max;
int index;
int count;
};
class PacketMAC
{
public:
void write();
bool IsNullIP();
Gateway ReadBufferIP();
PacketMAC();
virtual ~PacketMAC();
bool init(); //初始化
bool Open(); //开始服务,用于接数据包到Buffer
bool Close();
bool Send(CString data,unsigned char tmac[]);
bool Send(CString data);
int GetAdapterNameCount();//取网卡名个数
CString GetAdapterNameForList(int index);//从网卡名列表中取网卡名
CString GetAdapterName();//取当前网卡名
CString GetErrorText();//取错误信息
MAC ReadBuffer(); //读缓存
bool IsNull();
bool SetAdapterName(int index); //设置网卡名
bool SetAdapterName(CString name); //设置网卡名
protected:
private:
friend UINT GetPacket(LPVOID pParam);
friend void GetData(PacketMAC *dlg);
friend UINT GetMine( LPVOID pParam );
CWinThread *GetThread,*MyMacThread;
//取网卡名列表
bool GetWKNameList();
char buffer[256000];
CString ErrorText;
CString AdapterList;
CString AdapterName;
int AdapterNameCount;
LPADAPTER lpadapter; //打开网卡
LPPACKET lpPacket; //数据包
bool start;
CString myip;
unsigned char mmac[6];
MacBuffer Buffer;
GatewayBuffer gatewayBuffer;
};
#endif // !defined(AFX_PACKETMAC_H__F41E953E_158D_49AE_B3DD_02A2D9A0A8DD__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -