WEB开发网
开发学院软件开发VC 自定义ARP 阅读

自定义ARP

 2010-07-25 20:46:39 来源:WEB开发网   
核心提示:三、ARP 协议格式如下:数据链路层 目的 MAC 地址 6 Byte 源 MAC 地址 6 Byte 类型

三、ARP 协议格式如下:

数据链路层

目的 MAC 地址 6 Byte
源 MAC 地址 6 Byte
类型 2 Byte

ARP 层包报文

硬件类型 2 Byte
协议类型 2 Byte
硬件地址长度 1Byte
协议地址长度 1Byte
操作类型 2 Byte
发送方 MAC 6 Byte
发送方 IP 4 Byte
目的 MAC 6 Byte
目的 IP 4 Byte

四、主要代码

//发送ARP包
void CNetArpDlg::OnBtnSendarp()
{
if (!UpdateData()) return ;
static int nPacketNum=0;
CHex bPacket(64);
CString strDestMac;
DWORD dwAddress;
m_edDest>>strDestMac;
//最终报文大概的样子
//FFFFFFFFFFFF000AE43D867408060001080006040001000AE43D8674C0A80101000000000000C0A801B5
m_edShow.SetSpace(m_IsSpace);
try
{
if (strDestMac.GetLength()!=12||m_strSrc.GetLength()!=12) throw "MAC地址有错,应该是6个字节";
//数据链路层
bPacket<<strDestMac; //Destination MAC
bPacket<<m_strSrc; //Source MAC
bPacket.AddTwoByte(0x0806); //type=arp
//arp层
bPacket.AddTwoByte(0x0001); //Harware type
bPacket.AddTwoByte(0x0800); //protocol type
bPacket.AddOneByte(0x6); //hardware size
bPacket.AddOneByte(0x4); //protocol size
bPacket.AddTwoByte(m_nArpType+1); //code type
bPacket<<m_strSrc; //sender mac address
m_IPSend.GetAddress(dwAddress);
bPacket.AddUINT(dwAddress); //sender ip address
bPacket.Add((void *)"x0x0x0x0x0x0",6);//target mac address
m_IPTarget.GetAddress(dwAddress);
bPacket.AddUINT(dwAddress); //target ip address
// bPacket.Trace("内容");
if (1==m_nArpType) //如果是响应
bPacket.Add((void *)"x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0",18);
m_pcap.SendPacket(bPacket);
m_edShow<<"发送第"<<++nPacketNum<<"包"<<endl<<bPacket<<endl<<endl;
}
catch(char *szErr){AfxMessageBox(szErr);}
}

五、结束

详细请看代码,本人也是刚接触WinPcap,所以一不定有一些错漏的地方,请各位大蝦不要见笑。

如果程序有编译不过去的地方,请务必先按装winPcap库,更新VC6的PlatformSDK

上一页  1 2 

Tags:定义 ARP

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接