使用winpcap驱动网卡,然后用vc发包,首先是获得不到网卡名称,找不到GetCurAdapterName()这个函数,现在通过PacketGetAdapterNames()函数取出了所有适配器的名称,然后把需要的适配器名称取出来,基本解决了问题,不知道这样会不会有隐患。第二个问题就是现在发不出去包,现在把sendpacket函数贴出来,希望大虾能帮看看:
void CMiniprinterDlg::sendARPPacket()
{
/*pcap_if_t *alldevs;
char errbuf[PCAP_ERRBUF_SIZE];
int k=pcap_findalldevs_ex(0, NULL , &alldevs, errbuf);
char *AdapterDeviceName=alldevs->name;
lpAdapter=PacketOpenAdapter(AdapterDeviceName);*/
char adapter_name[8192];
char adapter_list[4][1024];
ULONG AdapterLength=sizeof(adapter_name);
PacketGetAdapterNames((char*)adapter_name,&AdapterLength);
for(int k=0,j=0;k<1024;k++)
{
adapter_list[j][k]=adapter_name[k];
}
lpAdapter=(LPADAPTER)PacketOpenAdapter((LPTSTR)adapter_list[0]);
lpPacket=PacketAllocatePacket();
PacketInitPacket(lpPacket,&ARPPacket,sizeof(ARPPacket));
PacketSetNumWrites(lpAdapter,1);
PacketSendPacket(lpAdapter,lpPacket,1);
PacketFreePacket(lpPacket);
PacketCloseAdapter(lpAdapter);
}
void CMiniprinterDlg::sendARPPacket()
{
/*pcap_if_t *alldevs;
char errbuf[PCAP_ERRBUF_SIZE];
int k=pcap_findalldevs_ex(0, NULL , &alldevs, errbuf);
char *AdapterDeviceName=alldevs->name;
lpAdapter=PacketOpenAdapter(AdapterDeviceName);*/
char adapter_name[8192];
char adapter_list[4][1024];
ULONG AdapterLength=sizeof(adapter_name);
PacketGetAdapterNames((char*)adapter_name,&AdapterLength);
for(int k=0,j=0;k<1024;k++)
{
adapter_list[j][k]=adapter_name[k];
}
lpAdapter=(LPADAPTER)PacketOpenAdapter((LPTSTR)adapter_list[0]);
lpPacket=PacketAllocatePacket();
PacketInitPacket(lpPacket,&ARPPacket,sizeof(ARPPacket));
PacketSetNumWrites(lpAdapter,1);
PacketSendPacket(lpAdapter,lpPacket,1);
PacketFreePacket(lpPacket);
PacketCloseAdapter(lpAdapter);
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货