这个ARP包有没有写错?解决方案
发布时间:2011-07-03 07:13:06 文章来源:www.iduyao.cn 采编人员:星星草
这个ARP包有没有写错?
#define WIN32
#define HAVE_REMOTE
#include <stdio.h>
#include "winsock2.h"
#include "pcap.h"
#include "Packet32.h"
#pragma comment(lib, "ws2_32.lib")
typedef struct DLCHEADER
{
unsigned char eth_addr_des[6];//以太网目的地址
unsigned char eth_addr_src[6];//以太网源地址
unsigned short frame_type; //帧类型
}DlcHeader;
typedef struct ARPFRAME
{
unsigned short hwtype; //硬件类型
unsigned short protrol_type; //协议类型
unsigned char hw_length; //硬件地址长度
unsigned char pro_length; //协议地址长度
unsigned short op; //ARP包类型;
unsigned char mac_src[6];//发送端以太网地址
unsigned long ip_src; //发送端IP地址
unsigned char mac_des[6];//目的以太网地址
unsigned long ip_des; //目的IP地址
unsigned char pading[18]; //填充位
}ArpFrame;
typedef struct ARPPACKET
{
DlcHeader arp_header;
ArpFrame arp_frame;
}ArpPacket;
/****************************************************************************
* Name & Params::
* formatStrToMAC
* (
* const LPSTR lpHWAddrStr : 用户输入的MAC地址字符串
* unsigned char *HWAddr : 返回的MAC地址字符串(赋给数据包结构体)
* )
* Purpose:
* 将用户输入的MAC地址字符转成数据包结构体需要的格式
****************************************************************************/
void formatStrToMAC(const LPSTR lpHWAddrStr, unsigned char *HWAddr)
{
unsigned int i, index = 0, value, temp;
unsigned char c;
_strlwr(lpHWAddrStr); // 转换成小写
for (i = 0; i < strlen(lpHWAddrStr); i++)
{
c = *(lpHWAddrStr + i);
if (( c>='0' && c<='9' ) || ( c>='a' && c<='f' ))
{
if (c>='0' && c<='9') temp = c - '0'; // 数字
if (c>='a' && c<='f') temp = c - 'a' + 0xa; // 字母
if ( (index % 2) == 1 )
{
value = value*0x10 + temp;
HWAddr[index/2] = value;
}
else value = temp;
index++;
}
if (index == 12) break;
}
}
void GenArpPacket(ArpPacket *APbuf)
{
int i;
memset(APbuf,0,sizeof(*APbuf));
formatStrToMAC("00e0524ca312",APbuf->arp_header.eth_addr_src);
formatStrToMAC("ffffffffffff",APbuf->arp_header.eth_addr_des);
APbuf->arp_header.frame_type=htons((u_short)0x0806);
APbuf->arp_frame.hwtype=htons((u_short)1);//以太网类型
APbuf->arp_frame.protrol_type=htons((u_short)0x0800);
APbuf->arp_frame.hw_length=(u_char)6;
APbuf->arp_frame.pro_length=(u_char)4;
APbuf->arp_frame.op=htons((u_short)0x0001);
formatStrToMAC("00e0524ca312",APbuf->arp_frame.mac_src);
APbuf->arp_frame.ip_src=inet_addr("202.192.165.169");
formatStrToMAC("ffffffffffff",APbuf->arp_frame.mac_des);
APbuf->arp_frame.ip_des=inet_addr("202.192.165.199");
for(i=0;i<18;i++)
APbuf->arp_frame.pading[i]=i;
}
int main()
{
pcap_if_t *alldevs;
pcap_if_t *d;
int inum;
int i=0;
pcap_t *adhandle;
char errbuf[PCAP_ERRBUF_SIZE];
int ret=-1;
int MaxPacketLen=100;
ArpPacket *pbuf;
u_char *pBuf;
/* 获取本机网络设备列表*/
if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL,
&alldevs, errbuf) == -1)
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
如果客户端的机子突然断了电,那服务端还能收到FD_CLOSE事件么?
如题.....
已查到解决方案(心跳包)
来人,结贴。。。
------解决方案...
-
IOCP使用上的一点看法讨论。
iocp的实现,在msdn和codeproject上面的例子都是创建一个iocp,然后所有socket加入该端口监视,n个工作线...
-
h264 与 RTP 的区别?
同样都是视频应用的协议,他们的关系或者在协议簇中的位置有什么区别?
------解决方案--------------------
H...
-
openmeetings错误 求解决
将doc文件上传时出现错误
错误代码:
Name: error
Value: 2011-6-4 12:54:14 com.artofsolving.jodconver...
-
为什么计算机网络中一定要有一个MAC层(MAC地址),既然MAC地址和IP地址是有一定的映射关系的,为什么不能只用其中一个地址通信就可以了,...
-
P2P软件有技术门槛吗?
讨论一下P2P软件的技术:
1.NAT穿越
2.UDP可靠传输
3.分块调度策略
...
http://hr.baidu.com/www/job/jobDe...
-
以TCP为写的服务器和客户端程序 无法通信
基于面向连接的TCP,写了一个服务器程序和一个客户端程序。服务器负责监听一个端口等待...
-
毕设啊,来不及了,谁做过 OFDMA动态资源分配算法 的 MATLAB仿真??
我们毕设的题目是“OFDMA动态资源分配算法的研究”,我在网上也荡了一...
-
关于UDP包传送的问题
最近在佛山移动做一个项目,这个项目已经过了初验,现在需要终验。但由于一个问题迟迟没有解决,不敢跟客户提终验...
-
udp通信数据接收转发
小弟最近在写流媒体转发服务器程序,从原始服务器发送过来的媒体包,需要1对多的转发给不同的client,在主程序中...