{ WaitForSingleObject(hSemaphore,INFINITE);if(!ReleaseSemaphore(hSemaphore,1,&PreviousCount))
{ ShowError(“main() ReleaseSemaphore”);Sleep(5000);break;} if(PreviousCount==(MaxThread-1))
{ printf(“nAll done.”);break;} Sleep(500);} }//end of try //搞定,清场,收工__finally { //计时结束end=clock();//转换时间格式duration = (double)(end - start) / CLOCKS_PER_SEC;//显示所用时间printf(“nnComplete.Scan %d targets use %2.1f seconds.Speed %0.3g/sn”,iTotal,duration,iTotal/duration);//关闭句柄CloseHandle(hStdout);CloseHandle(hSemaphore);WSACleanup();} return 0;} /////////////////////////////////////////////////////////////////////////// // //回显错误信息函数// void ShowError(char *msg)
{ MessageBox(NULL,msg,“ERROR”,0);//printf(“n%s failed:%d”,GetLastError());} ////////////////////////////////////////////////////////////////////////// // //重置光标位置函数,以便扫描线程输出结果// BOOL ResetCursor()
{ CONSOLE_SCREEN_BUFFER_INFO ConsoleScreenBufferInfo;//取得当前光标位置if(!GetConsoleScreenBufferInfo(hStdout,&ConsoleScreenBufferInfo))
{ ShowError(“GetConsoleScreenBufferInfo”);return FALSE;} //配置光标X坐标为0 ConsoleScreenBufferInfo.dwCursorPosition.X=0;//配置当前光标位置SetConsoleCursorPosition(hStdout,ConsoleScreenBufferInfo.dwCursorPosition);return TRUE;} /////////////////////////////////////////////////////////////////////////// // //显示进度信息函数// DWORD WINAPI ShowProInfo(LPVOID lp)
{ int j,k;CONSOLE_SCREEN_BUFFER_INFO ConsoleScreenBufferInfo;float m;for(j=0;ii { //休息一会儿))
Sleep(SleepTime);//取得当前光标位置if(!GetConsoleScreenBufferInfo(hStdout,&ConsoleScreenBufferInfo))
{ ShowError(“GetConsoleScreenBufferInfo”);return 1;} //配置百分比进度显示的X坐标ConsoleScreenBufferInfo.dwCursorPosition.X=0;//配置当前光标位置SetConsoleCursorPosition(hStdout,ConsoleScreenBufferInfo.dwCursorPosition);//已完成的百分比m=(ii 1)*100.00/iTotal;//显示进度if(ii==iTotal)
{ printf(“******** 100%% Wait %d seconds to exit ********
n",iConnTimeout);
break;} else { k=j%4;printf(“%-15s %s [%d/%d] %s %%%0.3g”,CurrentTarget,turn[k],ii,iTotal,turn[k],m);} }//end of for return 0;} /////////////////////////////////////////////////////////////////////////// // //扫描函数// DWORD WINAPI scan(LPVOID lp)
{ int i=(int)lp,iErr;struct sockaddr_in server;SOCKET s=INVALID_SOCKET;char RecvBuff[1024]=,*ptr;int RecvBuffLen=sizeof(RecvBuff);u_long ul=1;//初始化为为非0值fd_set r,w;
//create socket s=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(s==INVALID_SOCKET)
{ printf(“nCreate socket failed:%d”,GetLastError());ExitProcess(1);} //fill the addr struct server.sin_family=AF_INET;server.sin_port=htons(iPort);server.sin_addr.S_un.S_addr=htonl(i);__try { //配置socket为非锁定模式,ul为0值的话,那么soocket将被配置为锁定模式iErr=ioctlsocket(s,FIONBIO,(unsigned long*)&ul);if(iErr==SOCKET_ERROR )
{ ResetCursor();ShowError(“ioctlsocket”);ExitProcess(1);} //printf(“n%X ioctl ok.strat conn”,i);//connect to target connect(s,(struct sockaddr *)&server,sizeof(server));//printf(“n%X conn return,start select w”,i);//配置select参数FD_ZERO(&w);FD_SET(s, &w);//等待connect成功&socket可写iErr=select(0, 0, &w, 0, &timeout);//printf(“n%X select w return %d”,i,iErr);//等待返回后,socket仍不可写则退出if((iErr==SOCKET_ERROR) || (iErr==0))
{ //printf(“n%X select return w err,exit”,i);__leave;} //socket可写则继续else { //send buff to target //printf(“n%X send”,i);iErr=send(s,SendBuff,SendBuffLen,0);//printf(“n%X send return”,i);if(iErr==SOCKET_ERROR)
__leave;} //等待socket可读FD_ZERO(&r);FD_SET(s, &r);//printf(“n%X start select r”,i);iErr=select(0, &r, 0, 0, &timeout);//printf(“n%X select r return %d”,i,iErr);if((iErr==SOCKET_ERROR) || (iErr==0))
{ //printf(“n%X select r err,exit”,i);__leave;} else { //recv buff from target //printf(“n%X start recv”,i);iErr=recv(s,RecvBuff,RecvBuffLen,0);//printf(“n%X recv ret”,i);if(iErr==SOCKET_ERROR)
__leave;} //verify buff ptr=strstr(RecvBuff,szSign);if(ptr!=NULL)
{ //线程输出前要先调用ResetCursor函数ResetCursor();//输出信息后务必加一个以上换行符号,输出前请别加换行符号,以免显示混乱printf(“[%-15s] has .printer mapped.
n",inet_ntoa(server.sin_addr));
} __finally { if(!ReleaseSemaphore(hSemaphore,1,NULL))
ShowError(“thread ReleaseSemaphore failed”);closesocket(s);} return 0;} /////////////////////////////////////////////////////////////////////////// void usage(char *proname)
{ printf(“n%s v0.1 only can find IIS5 .Printer mapped”“nPower by ey4s 2001.5.20”“nhttp://www.patching.net”“nnUsage:%s ”“nnNotice”“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”“nnExample”“n %s 192.168.0.0 192.168.255.255 200 2”,proname,proname,proname);}程式在VC 6.0上编译通过,在windows2000上运行良好:)
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



