#include
#include
#include
#define iPort 80//目标Web Server端口
.#define szSign "500 13\r\nServer: Microsoft-IIS/5.0"//根据此标志来检查目标是否有漏洞
#pragma comment(lib,"ws2_32.lib")
///////////////////////////////////////////////////////////////////////////
//
//定义&初始化全局变量
char *SendBuff="GET /NULL.printer\n",//发送的请求buff
CurrentTarget[52]={0},//存放最后一个线程将扫描的目标
turn[4][2]={"-","\\","|","/"};//显示进度时的字符
int SendBuffLen=strlen(SendBuff),//发送的buff长度
iConnTimeout,//TCP Connect TimeOut
ii=0,//扫描进度
iTotal;//服务器总数
HANDLE hSemaphore=NULL,//信标内核对象句柄,用来控制线程数量
hStdout;//console标准输出句柄,做进度显示的时候用的
struct timeval timeout;//连接、发送和接收的超时值
DWORD SleepTime;//每个一个线程后等待的时间
/*
SleepTime值根据用户输入的线程数量[ThreadNum]和TCP ConnectTimeOut[CONNTIMEO]来计算。确保在CONNTIMEO时间左右开ThreadNum个线程。这样在CONNTIMEO时间后,所开的线程开始陆续超时退出,可以继续稳定的开线程,可以有效的保证同时有ThreadNum个线程在运行。
*/
///////////////////////////////////////////////////////////////////////////
void ShowError(char *);//显示出错信息函数
BOOL ResetCursor(void);//重置光标位置,线程输出的时候调用的
DWORD WINAPI ShowProInfo(LPVOID);//显示进度信息
DWORD WINAPI scan(LPVOID);//扫描函数
void usage(char *);//帮助函数
///////////////////////////////////////////////////////////////////////////
int main(int argc,char **argv)
{
HANDLE hThread=NULL;//线程句柄
DWORD dwThreadID;//线程ID
struct sockaddr_in sa;
int i,
MaxThread;//最大线程数量
WSADATA wsd;
long PreviousCount;
clock_t start,end;//程序运行的起始和结束时间
double duration;
//检查用户输入参数
if(argc!=5)
{
usage(argv[0]);
return 1;
}
//get target range
int StartNet=inet_addr(argv[1]);
int StopNet=inet_addr(argv[2]);
int StartHost=ntohl(StartNet);
int StopHost=ntohl(StopNet);
//取得线程数量
MaxThread=atoi(argv[3]);
//取得conn超时时间
iConnTimeout=atoi(argv[4]);
//检查参数合法性
if((iConnTimeout>6) || (iConnTimeout<2) || (MaxThread<1) || (MaxThread>500) || (StopHost 2001.5.20"
"\nhttp://www.patching.net"
"\n\nUsage:%s "
"\n\nNotice"
"\n StartIP StopIP ==>Don‘t forgot StopIP must large than StartIP "
"\n ThreadNum ==>Thread number,please input between 1-500"
"\n CONNTIMEO ==>TCP connect timeout,please input between 2-6"
"\n\nExample"
"\n %s 192.168.0.0 192.168.255.255 200 2",proname,proname,proname);
} |