专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 网络通信

这个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)
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: