📄 scan程序.txt
字号:
{
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<iTotal;j++)
{
//休息一会儿:)))
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]={0},*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<ey4s@21cn.com> 2001.5.20"
"\nhttp://www.patching.net"
"\n\nUsage:%s <StartIP> <EndIP> <ThreadNum> <CONNTIMEO>"
"\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);
}
程序在VC++6.0上编译通过,在
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -