⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 packetmac.h

📁 基于MAC网卡物理地址的通信类
💻 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 + -