1 #include <stdio.h>
2 #include <winsock2.h>
3 #include <time.h>
4 #define iPort 80//目标 Web Server 端口
5 .#define szSign "500 13Server: Microsoft-IIS/5.0"//根据此标志来检查目
标是否有漏洞
6 #pragma comment(lib,"ws2_32.lib")
7 //////////////////////////////////////////////////////////////////////
/////
8 //
9 //定义&初始化全局变量
10 char *SendBuff="GET /NULL.printer",//发送的请求 buff
11 CurrentTarget[52]={0},//存放最后一个线程将扫描的目标
12 turn[4][2]={"-","\","|","/"};//显示进度时的字符
13 int SendBuffLen=strlen(SendBuff),//发送的 buff 长度
14 iConnTimeout,//TCP Connect TimeOut
15 ii=0,//扫描进度
16 iTotal;//服务器总数
17 HANDLE hSemaphore=NULL,//信标内核对象句柄,用来控制线程数量
18 hStdout;//console 标准输出句柄,做进度显示的时候用的
19 struct timeval timeout;//连接、发送和接收的超时值
20 DWORD SleepTime;//每个一个线程后等待的时间
21 /*
22 SleepTime 值根据用户输入的线程数量[ThreadNum]和 TCP
ConnectTimeOut[CONNTIMEO]来计算。确保在 CONNTIMEO 时间左右开 ThreadNum 个线程。这
样在 CONNTIMEO 时间后,所开的线程开始陆续超时退出,可以继续稳定的开线程,可以有效的保证
同时有 ThreadNum 个线程在运行。
23 */
24 //////////////////////////////////////////////////////////////////////
/////
25 void ShowError(char *);//显示出错信息函数
26 BOOL ResetCursor(void);//重置光标位置,线程输出的时候调用的
27 DWORD WINAPI ShowProInfo(LPVOID);//显示进度信息
28 DWORD WINAPI scan(LPVOID);//扫描函数
29 void usage(char *);//帮助函数
30 //////////////////////////////////////////////////////////////////////
/////
31 int main(int argc,char **argv)
32 {
33 HANDLE hThread=NULL;//线程句柄
34 DWORD dwThreadID;//线程 ID
35 struct sockaddr_in sa;
36 int i,
37 MaxThread;//最大线程数量