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

📄 myclass.h

📁 应用ARP结构的知识与WinPcap的发送和捕获功能
💻 H
字号:
/*******************************************************************************
 *	文件名称:myClass.h
 *	摘    要:定义的ARP包的类
 *	单    位:软件学院
 *	作    者:姚旺
 *	学    号:2120070369
 *	完成日期:2007年11月8日
 *******************************************************************************/


namespace ArpWinPcap{
	class ARPPacket									//ARP包的类
	{
	private:
		typedef struct DLCHeader					//物理头结构
		{	
			unsigned char		cDestMAC[6];		//目的MAC
			unsigned char		cSrcMAC[6];			//源MAC
			unsigned short		sFrameType;			//帧类型
		}DLCHEADER;

		typedef struct ARPFrame						//ARP包结构
		{
			unsigned short		sHW_Type;			//硬件类型
			unsigned short		sProto_Type;		//上层协议类型
			unsigned char		cMAC_Len;			//MAC地址长度
			unsigned char		cIP_Len;			//IP地址长度
			unsigned short		sFlag;				//1表示请求,2表示应答
			unsigned char		cSrcMAC_Addr[6];	//源MAC地址
			unsigned char		iSrcIP_Addr[4];		//源IP地址
			unsigned char		cDestMAC_Addr[6];	//目的MAC地址
			unsigned char		iDestIP_Addr[4];	//目的IP地址
			unsigned char		cPadding[18];		//多余填充数据
		}ARPFRAME;

		typedef struct ARPPack						//物理帧结构
		{
			DLCHEADER dlcHeader;					//物理头
			ARPFRAME arpFrame;						//ARP包
		}ARPPACK;

		ARPPACK arpPack;							//定义一个帧结构的实例

	public:
		ARPPacket()											//构造函数
		{	
			for(int i=0;i<6;i++)
				arpPack.dlcHeader.cDestMAC[i]=0xFF;			//物理头中目的MAC为广播地址
			arpPack.dlcHeader.sFrameType=htons(0x0806);		//物理头中类型为0x0806

			arpPack.arpFrame.sHW_Type=htons(0x01);			//ARP头中硬件类型为0x0100
			arpPack.arpFrame.sProto_Type= htons(0x0800);	//ARP头中上层协议类型
			arpPack.arpFrame.cMAC_Len=0x06;					//ARP头中MAC长度
			arpPack.arpFrame.cIP_Len=0x04;					//ARP头中IP长度
			arpPack.arpFrame.sFlag=htons(0x01);				//ARP头中操作字段为请求状态
			
			for(int i=0;i<6;i++)
				arpPack.arpFrame.cDestMAC_Addr[i]=(unsigned char)0;			//ARP头中设置目的MAC为0
			for(int i=0;i<18;i++)
				arpPack.arpFrame.cPadding[i]=0;								//ARP头中填充数据
		}
		

		/**************************************************************************
		 * 初始化包时调用的函数:
		 * 本函数功能:初始化一个包,即写入源MAC地址,源IP地址和目标IP地址
		 * 输入参数: 
		 *		cSrc_MAC_Addr:	源MAC地址
		 *		 iSrc_IP_Addr:	源IP地址
		 *		iDest_IP_Addr:	目标IP地址
		 *
		 *************************************************************************/

		void InitAddr(array<unsigned char>^ cSrc_MAC_Addr,System::String ^iSrc_IP_Addr,System::String ^iDest_IP_Addr)
		{
			array<System::String ^>^ strTmp;
			for(int i=0;i<6;i++)
				arpPack.arpFrame.cSrcMAC_Addr[i]=arpPack.dlcHeader.cSrcMAC[i]=cSrc_MAC_Addr[i];//设置源MAC
			strTmp=gcnew array<System::String ^>(1){"."};
			strTmp=iSrc_IP_Addr->Split(strTmp,System::StringSplitOptions::RemoveEmptyEntries);
			for(int i=0;i<4;i++)
				arpPack.arpFrame.iSrcIP_Addr[i]=System::Convert::ToByte(strTmp[i]);//设置源IP
			strTmp=gcnew array<System::String^>(1){"."};
			strTmp=iDest_IP_Addr->Split(strTmp,System::StringSplitOptions::RemoveEmptyEntries);
			for(int i=0;i<4;i++)
				arpPack.arpFrame.iDestIP_Addr[i]=System::Convert::ToByte(strTmp[i]);//设置目的IP


		}

		/****************************************
		本函数返回ARP包的unsigned char型指针
		****************************************/
		u_char * GetPack()
		{
			return (u_char *)&arpPack;
		}
	};


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -