ARP封包总结

第一次写发包程序,发送ARP数据包。写一些体会。

1.封包之前一定要用sniffer抓包看看,封好之后看看数组内存的值,比对一下。ARP包sniffer需要选Hardware
2.由于计算机内存序列和网络序列不一致,所以需要用htons函数转成网络序列。序列具体的不同,可以看抓包文件。

void BuildArpPacket(CString szEDMac,CString szESMac,CString szPDMac,CString szPDIP,CString szPSMac,CString szPSIP,int nStyle,u_char * p)
{
 /*获取数值*/
 u_char smac[6]={0};
 u_char dmac[6]={0};
 char sip[20]={0};
 char dip[20]={0};
 u_char psmac[6]={0};
 u_char pdmac [6]={0};
 u_short opCode= ARPOP_REPLY;
 
 memcpy(sip,szPSIP.GetBuffer(szPSIP.GetLength()),20);
 memcpy(dip,szPDIP.GetBuffer(szPDIP.GetLength()),20);
 
 u_char *smac_u = smac;
 u_char *dmac_u = dmac;
 u_char *psmac_u = psmac;
 u_char *pdmac_u = pdmac;
 
 str2mac(smac_u,szESMac);
 str2mac(dmac_u,szEDMac);
 str2mac(psmac_u,szPSMac);
 str2mac(pdmac_u,szPDMac);
 
 u_char pshost_u[4]={0};
 str2ip(sip,pshost_u);
 u_char pdhost_u[4] = {0};
 str2ip(dip,pdhost_u);
 
 //info
 ETHeader etHeader;
 ARPHeader arpHeader;
 
 memcpy(etHeader.shost, smac_u,6);
 memcpy(etHeader.dhost, dmac_u,6);
 etHeader.type = htons(0x0806);  /*eth*/
 
 arpHeader.hrd = htons(0x0001);
 arpHeader.eth_type = htons(0x0800);
 arpHeader.maclen = 6;
 arpHeader.iplen = 4;
 arpHeader.opcode = htons(nStyle);
 memcpy(arpHeader.smac, psmac_u, 6);
 memcpy(arpHeader.saddr, pshost_u, 4);
 memcpy(arpHeader.dmac, pdmac_u, 6);
 memcpy(arpHeader.daddr, pdhost_u, 4);
 
 memcpy(p, &etHeader, sizeof(etHeader));
 memcpy(p+sizeof(etHeader), &arpHeader, sizeof(arpHeader)); 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值