📄 myclass.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 + -