myclass.h

来自「应用ARP结构的知识与WinPcap的发送和捕获功能」· C头文件 代码 · 共 101 行

H
101
字号
/*******************************************************************************
 *	文件名称: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 + =
减小字号Ctrl + -
显示快捷键?