有会winpcap的吗

kornrock 2006-04-13 12:35:19
#include "stdafx.h"
#include <packet32.h>
#include <string.h>
#include <wchar.h>
#include <winbase.h>
#include <stdio.h>
typedef struct tagDLCHeader
{
unsigned char DesMAC[6]; /* destination HW addrress */
unsigned char SrcMAC[6]; /* source HW addresss */
unsigned short Ethertype; /* ethernet type */
} DLCHEADER, *PDLCHEADER;


typedef struct tagARPFrame
{
unsigned short HW_Type; /* hardware address */
unsigned short Prot_Type; /* protocol address */
unsigned char HW_Addr_Len; /* length of hardware address */
unsigned char Prot_Addr_Len; /* length of protocol address */
unsigned short Opcode; /* ARP/RARP */

unsigned char Send_HW_Addr[6]; /* sender hardware address */
unsigned long Send_Prot_Addr; /* sender protocol address */
unsigned char Targ_HW_Addr[6]; /* target hardware address */
unsigned long Targ_Prot_Addr; /* target protocol address */
unsigned char padding[18];
} ARPFRAME, *PARPFRAME;
// ARP Packet = DLC header + ARP Frame

typedef struct tagARPPacket
{
DLCHEADER dlcHeader;
ARPFRAME arpFrame;
} ARPPACKET, *PARPPACKET;

void formatStrToMAC(const char *lpstr, unsigned char *HWAddr)
{
unsigned int i, index = 0, value, temp;
unsigned char c;
for (i = 0;i<12;i++)
{
c = *(lpstr+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' + 10; // 字母
if ( (index % 2) == 1 )
{
value = value*10 + temp;
HWAddr[index/2] = value;
}
else value = temp;
index++;
} if (index == 12) break;
}
}
void SendArpPacket(ARPPACKET& ARPPacket)
{
LPADAPTER LpAdapter;
LPPACKET LpPacket;

//根据网卡名打开网卡,网卡名没错
LpAdapter=PacketOpenAdapter("\\Device\\NPF_{B9B76045_55DF_4588_80D5_EA462207108C}");

LpPacket=PacketAllocatePacket();

PacketInitPacket(LpPacket,&ARPPacket,sizeof(ARPPACKET));

PacketSetNumWrites(LpAdapter,5);

PacketSendPacket(LpAdapter,LpPacket,true);
PacketFreePacket(LpPacket);

PacketCloseAdapter(LpAdapter);

}

int main(int argc,char* argv[])
{
ARPPACKET ARPPacket;// 定义ARPPACKET结构体变量
memset(&ARPPacket,0,sizeof(ARPPACKET)); // 数据包初始化

formatStrToMAC("50634c6c0333",ARPPacket.dlcHeader.SrcMAC); // DLC帧头
formatStrToMAC("5063ffa866cd",ARPPacket.dlcHeader.DesMAC);
formatStrToMAC("212121212121",ARPPacket.arpFrame.Send_HW_Addr); // 源MAC
ARPPacket.arpFrame.Send_Prot_Addr = inet_addr("211.87.228.1"); // 源IP
formatStrToMAC("5063ffa866cd",ARPPacket.arpFrame.Targ_HW_Addr); // 目的MAC
ARPPacket.arpFrame.Targ_Prot_Addr = inet_addr("211.87.228.101");// 目的IP
// 自动填充变量
ARPPacket.arpFrame.Opcode = htons((unsigned short)2); // arp包类型
ARPPacket.dlcHeader.Ethertype = htons((unsigned short)0x0806); // DLC Header的以太网类型
ARPPacket.arpFrame.HW_Type = htons((unsigned short)1); // 硬件类型
ARPPacket.arpFrame.Prot_Type = htons((unsigned short)0x0800); // 上层协议类型
ARPPacket.arpFrame.HW_Addr_Len = (unsigned char)6; // MAC地址长度
ARPPacket.arpFrame.Prot_Addr_Len = (unsigned char)4;

SendArpPacket(ARPPacket);

return 0;
}

运行时出现异常"Unhandled exception in cba.exe(WANPACKET.DLL):0xC0000005: Access Violation",请真正做过的高手指点迷津











...全文
197 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bevin_chen 2007-03-13
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include <packet32.h>
#include <string.h>
#include <wchar.h>
#include <winbase.h>
#include <stdio.h>
typedef struct tagDLCHeader
{
unsigned char DesMAC[6]; /* destination HW addrress */
unsigned char SrcMAC[6]; /* source HW addresss */
unsigned short Ethertype; /* ethernet type */
} DLCHEADER, *PDLCHEADER;


typedef struct tagARPFrame
{
unsigned short HW_Type; /* hardware address */
unsigned short Prot_Type; /* protocol address */
unsigned char HW_Addr_Len; /* length of hardware address */
unsigned char Prot_Addr_Len; /* length of protocol address */
unsigned short Opcode; /* ARP/RARP */

unsigned char Send_HW_Addr[6]; /* sender hardware address */
unsigned long Send_Prot_Addr; /* sender protocol address */
unsigned char Targ_HW_Addr[6]; /* target hardware address */
unsigned long Targ_Prot_Addr; /* target protocol address */
unsigned char padding[18];
} ARPFRAME, *PARPFRAME;
// ARP Packet = DLC header + ARP Frame

typedef struct tagARPPacket
{
DLCHEADER dlcHeader;
ARPFRAME arpFrame;
} ARPPACKET, *PARPPACKET;

void formatStrToMAC(const char *lpstr, unsigned char *HWAddr)
{
unsigned int i, index = 0, value, temp;
unsigned char c;
for (i = 0;i<12;i++)
{
c = *(lpstr+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' + 10; // 字母
if ( (index % 2) == 1 )
{
value = value*10 + temp;
HWAddr[index/2] = value;
}
else value = temp;
index++;
} if (index == 12) break;
}
}
void SendArpPacket(ARPPACKET& ARPPacket)
{
LPADAPTER LpAdapter;
LPPACKET LpPacket;

//根据网卡名打开网卡,网卡名没错
LpAdapter=PacketOpenAdapter("\\Device\\NPF_{B9B76045_55DF_4588_80D5_EA462207108C}");

LpPacket=PacketAllocatePacket();

PacketInitPacket(LpPacket,&ARPPacket,sizeof(ARPPACKET));

PacketSetNumWrites(LpAdapter,5);

PacketSendPacket(LpAdapter,LpPacket,true);
PacketFreePacket(LpPacket);

PacketCloseAdapter(LpAdapter);

}

int main(int argc,char* argv[])
{
ARPPACKET ARPPacket;// 定义ARPPACKET结构体变量
memset(&ARPPacket,0,sizeof(ARPPACKET)); // 数据包初始化

formatStrToMAC("50634c6c0333",ARPPacket.dlcHeader.SrcMAC); // DLC帧头
formatStrToMAC("5063ffa866cd",ARPPacket.dlcHeader.DesMAC);
formatStrToMAC("212121212121",ARPPacket.arpFrame.Send_HW_Addr); // 源MAC
ARPPacket.arpFrame.Send_Prot_Addr = inet_addr("211.87.228.1"); // 源IP
formatStrToMAC("5063ffa866cd",ARPPacket.arpFrame.Targ_HW_Addr); // 目的MAC
ARPPacket.arpFrame.Targ_Prot_Addr = inet_addr("211.87.228.101");// 目的IP
// 自动填充变量
ARPPacket.arpFrame.Opcode = htons((unsigned short)2); // arp包类型
ARPPacket.dlcHeader.Ethertype = htons((unsigned short)0x0806); // DLC Header的以太网类型
ARPPacket.arpFrame.HW_Type = htons((unsigned short)1); // 硬件类型
ARPPacket.arpFrame.Prot_Type = htons((unsigned short)0x0800); // 上层协议类型
ARPPacket.arpFrame.HW_Addr_Len = (unsigned char)6; // MAC地址长度
ARPPacket.arpFrame.Prot_Addr_Len = (unsigned char)4;

SendArpPacket(ARPPacket);

return 0;
}

运行时出现异常"Unhandled exception in cba.exe(WANPACKET.DLL):0xC0000005: Access Violation",请真正做过的高手指点迷津
maijian 2006-04-13
  • 打赏
  • 举报
回复
我用过啊
你装了WinPcap之后,把WinPcap的头文件,Lib文件等等的目录添加到VC的头文件目录位置
就没问题啦
kornrock 2006-04-13
  • 打赏
  • 举报
回复
oyljerry:我检查了一下,没发现有非法使用指针的问题。
kornrock 2006-04-13
  • 打赏
  • 举报
回复
maijian:我都添加了,编译链接都没问题,可就是运行时异常。我想主要出在LpAdapter=PacketOpenAdapter("\\Device\\NPF_{B9B76045_55DF_4588_80D5_EA462207108C}");
你能把你自己做的代码给我看一下吗。不要从网上copy,那些代码都是一个模板,有很多错误.
拜托帮帮忙。
oyljerry 2006-04-13
  • 打赏
  • 举报
回复
WANPACKET.DLL):0xC0000005: Access
你访问的方法是否正确等,指针等是否初始化

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧