#includepcap.h#pragmacomment(lib,wpcap)#pragmacomment(lib,ws2_32)//=========Êý¾Ý°ü½á¹¹ÉêÃ÷========================typedefstructIP_Address//32λµÄIPµØÖ·{u_charbyte1;u_charbyte2;u_charbyte3;u_charbyte4;}ip_address;typedefstructHard_Mac//48λµÄMACµØÖ·{u_charbyte1;u_charbyte2;u_charbyte3;u_charbyte4;u_charbyte5;u_charbyte6;}Hard_Mac;/*Ethernetheader*/typedefstructEthernet_Header//112λ48λSMac+48λSMac+16λÐÒéÀàÐÍÒÔÌ«ÍøÍ·{Hard_MacDMac;//(1)48λĿMACµØÖ·Hard_MacSMac;//(2)48λԴMACµØÖ·WORDPType;//(3)16λÐÒéÀàÐÍ}Ethernet_Header;typedefstructARP_Header//¶¨ÒåARPÊײ¿{Ethernet_HeaderFrameHeader;//Ö¡Í·WORDHardWare;//(4)16λÍø¿¨Ó²¼þÀàÐÍWORDPType3;//(5)16λÐÒéÀàÐÍu_charHLeng;//(6)8λӲ¼þµØÖ·³¤¶Èu_charPLeng;//(7)16λÐÒéµØÖ·³¤¶ÈWORDOper;//(8)16λ²Ù×÷Ñ¡ÏîHard_MacSMac3;//(9)48λԴMACµØÖ·ip_addressSaddr;//(10)32λԴIPµØÖ·Hard_MacDMac3;//(11)48λĿ±êMACµØÖ·ip_addressDaddr;//(12)32λĿ±êIPµØÖ·BYTEpadding[18];//Ìî³ä0}ARP_Header;//=====================================================================//Ìî³äAPRÊý¾Ý°ü//======================================================================ARP_Headerfiltpacket(){ARP_HeaderARPH;//·¢Ë͵ÄARP°ü½á¹¹//Ïȳõʼ»¯Èý²ãARPµÄMACµØÖ·ARPH.DMac3.byte1=0;ARPH.DMac3.byte2=0;ARPH.DMac3.byte3=0;ARPH.DMac3.byte4=0;ARPH.DMac3.byte5=0;ARPH.DMac3.byte6=0;//Ä¿±êMACµØÖ·ARPH.SMac3.byte1=0x00;ARPH.SMac3.byte2=0xE0;ARPH.SMac3.byte3=0x11;ARPH.SMac3.byte4=0x01;ARPH.SMac3.byte5=0xD0;ARPH.SMac3.byte6=0x05;//Ô´MACµØÖ·//ARPH.FrameHeader.SMac.byte1=ARPH.SMac3.byte1;ARPH.FrameHeader.SMac.byte2=ARPH.SMac3.byte2;ARPH.FrameHeader.SMac.byte3=ARPH.SMac3.byte3;//ARPH.FrameHeader.SMac.byte4=ARPH.SMac3.byte4;ARPH.FrameHeader.SMac.byte5=ARPH.SMac3.byte5;ARPH.FrameHeader.SMac.byte6=ARPH.SMac3.byte6;//Ô´MACµØÖ·ARPH.FrameHeader.SMac.byte1=0x00;ARPH.FrameHeader.SMac.byte2=0xE0;ARPH.FrameHeader.SMac.byte3=0x11;ARPH.FrameHeader.SMac.byte4=0x01;ARPH.FrameHeader.SMac.byte5=0xD0;ARPH.FrameHeader.SMac.byte6=0x05;//Ô´MACµØÖ·ARPH.FrameHeader.DMac.byte1=0xFF;ARPH.FrameHeader.DMac.byte2=0xFF;ARPH.FrameHeader.DMac.byte3=0xFF;ARPH.FrameHeader.DMac.byte4=0xFF;ARPH.FrameHeader.DMac.byte5=0xFF;ARPH.FrameHeader.DMac.byte6=0xFF;//Ä¿±êMACµØÖ·ARPH.FrameHeader.PType=htons(0x0806);//ÐÒéÀàÐÍΪARPARPH.HardWare=htons(0x0001);//10MEthernetARPH.PType3=htons(0x0800);//ÐÒéÀàÐÍΪIPARPH.HLeng=6;//Ó²¼þµØÖ·³¤¶ÈARPH.PLeng=4;//IPµØÖ·³¤¶ÈARPH.Oper=htons(0x0001);//ÇëÇó²Ù×÷ARPH.Daddr.byte1=172;ARPH.Daddr.byte2=18;ARPH.Daddr.byte3=19;ARPH.Daddr.byte4=110;//Ä¿±êIPµØÖ·ARPH.Saddr.byte1=172;ARPH.Saddr.byte2=18;ARPH.Saddr.byte3=19;ARPH.Saddr.byte4=103;//Ô´IPµØÖ·inti;for(i=0;i18;i++){ARPH.padding[i]=0;}returnARPH;};//==========================================================//·¢ËÍÊý¾Ý°ü//==========================================================voidSendPacket(pcap_t*adhandle,ARP_HeaderARPH){//constu_char*Buff;//Buff=&ARPH.FrameHeader.DMac.byte1;//½á¹¹Ê×µØÖ·´«ÈëBuffif(pcap_sendpacket(adhandle,//Adapter(u_char*)&ARPH,//bufferwiththepacketsizeof(ARPH)//size)!=0){printf(·¢ËÍÊý¾Ý°üʧ°Ü\n);}//else//printf(·¢ËÍÊý¾Ý°ü³É¹¦£¡\n);}//=======================================================//½âÎöÊý¾Ý°ü//=======================================================voidpacket_handler(u_char*param,conststructpcap_pkthdr*header,constu_char*pkt_data){//structtm*ltime;//chartimestr[16];/*convertthetimestamptoreadableformat*///ltime=localtime(&header-ts.tv_sec);//strftime(timestr,sizeoftimestr,%H:%M:%S,ltime);/*printtimestampandlengthofthepacket*///printf(%s.%.6dlen:%d\n,timestr,header-ts.tv_usec,header-len);ARP_Header*ah;ah=(ARP_Header*)(pkt_data);if(ah-FrameHeader.PType==1544&&ah-Oper==512&&ah-Daddr.byte1==172&&ah-Daddr.byte2==18&&ah-Daddr.byte3==19&&ah-Daddr.byte4==116&&ah-Saddr.byte1==172&&ah-Saddr.byte2==18&&ah-Saddr.byte3==19&&ah-Saddr.byte4==103){/*Êä³öÔ´IPµØÖ·£¬Ä¿µÄIPµØÖ·*/printf(\n%d.%d.%d.%d-%d.%d.%d.%d\n,ah-Saddr.byte1,ah-Saddr.byte2,ah-Saddr.byte3,ah-Saddr.byte4,ah-Daddr.byte1,ah-Daddr.byte2,ah-Daddr.byte3,ah-Daddr.byte4);/*Êä³öÄ¿µÄµØÖ·£¬Êä³öÔ´µØÖ·£¬ÊäÈëÐÒéÀàÐÍ*/Hard_MacSMAC,DMAC;Ethernet_Header*eh;eh=(Ethernet_Header*)pkt_data;SMAC=eh-SMac;printf(Ô´µØÖ·%.2x--%.2x--%.2x--%.2x--%.2x--%.2x\n,SMAC.byte1,SMAC.byte2,SMAC.byte3,SMAC.byte4,SMAC.byte5,SMAC.byte6);//printf(Ô´µØÖ·%.2x--%.2x--%.2x--%.2x--%.2x--%.2x\n//,ah-FrameHeader.SMac.byte1,ah-FrameHeader.SMac.byte2,ah-FrameHeader.SMac.byte3,ah-FrameHeader.SMac.byte4,ah-FrameHeader.SMac.byte5,ah-FrameHeader.SMac.byte6);DMAC=eh-DMac;printf(Ä¿µÄµØÖ·%.2x--%.2x--%.2x--%.2x--%.2x--%.2x\n,DMAC.byte1,DMAC.byte2,DMAC.byte3,DMAC.byte4,DMAC.byte5,DMAC.byte6);printf(Ö¡ÐÒé%.4x\n,ntohs(eh-PType));printf(Ó²¼þÀàÐÍ%.4x\n,ntohs(ah-HardWare));printf(ÐÒéÀàÐÍ%.4x\n,ntohs(ah-PType3));printf(²Ù×÷ÀàÐÍ%.4x\n,ntohs(ah-Oper));printf(Êý¾ÝÄÚÈÝ%x\n,ah-padding);printf(\n\n==============================================================\n);}}intmain(){//´ò¿ªÍø¿¨pcap_if_t*alldevs;pcap_if_t*d;intinum;inti=0;pcap_t*adhandle;charerrbuf[PCAP_ERRBUF_SIZE];charpacket_filter[]=arp;/*Retrievethedevicelist*/if(pcap_findalldevs(&alldevs,errbuf)==-1