几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量  


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » 程序设计 » vc编程
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


 
 
主题工具 搜索本主题 显示模式
旧 2007-08-01, 01:33 PM   #1
yogy
高级会员
 
注册日期: 06-11
帖子: 1527
精华: 15
现金: 6353 标准币
资产: 6353 标准币
yogy 向着好的方向发展
默认 【转帖】多线程tcp扫描器

/**********************************************************************
gscan.cpp
多线程tcp connect扫描器

E-mail:gxisone@hotmail.com
最后更新:2004/8/5
*********************************************************************/
#include <stdio.h>
#include<winsock2.h>
#include <time.h>
#pragma comment(lib,"ws2_32.lib")

char *host;
int threadnum,maxthread,totalport;
long nowport;


TIMEVAL timeout;
FD_SET mask;
void usage(char *name)
{
printf("\t===================Portscaner======================\n");
printf("\t============gxisone@hotmail.com 2004/7/6=======\n");
printf("\tusage: %s IP StartPort-EndPort MaxThread(1000)\n",name);
printf("\tExample: %s 192.168.1.1 1-10000 500\n",name);
}


void display(void) // 定义状态提示函数
{
static int play=0;
// 进度条
char *plays[12]=
{
" | ",
" / ",
" - ",
" \\ ",
" | ",
" / ",
" - ",
" // ",
" | ",
" / ",
" - ",
" // ",
};

printf("=%s=\t%d threads %d %s Completed. \r", plays[play],threadnum,nowport*100/(totalport+1),"%");
play=(play==11)?0:play+1;
Sleep(1);

}




void WaitThreadEnd(void)
{
Sleep(1000);
printf("\nThread ending....\n");
while(threadnum>0)
{
Sleep(1);
printf(" =|=\t%d threads \r",threadnum);


}

printf("\nThread ended!\n");
}

DWORD WINAPI ThreadFunc( LPVOID lp ) //线程函数,跟普通的函数没什么两样
{

int port=*(DWORD*)lp;

SOCKET sockfd;
struct sockaddr_in addr;


u_long value;
addr.sin_family =AF_INET;
addr.sin_addr.s_addr =inet_addr(host);

value=1;



sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd==INVALID_SOCKET)
{
printf("Socket error!\n");
InterlockedExchangeAdd((long *)&threadnum,-1);
return 0;
}
ioctlsocket(sockfd,FIONBIO,&value);
addr.sin_port = htons(port);


connect(sockfd,(struct sockaddr *) &addr, sizeof(addr));


FD_ZERO(&mask);
FD_SET(sockfd,&mask);
value=select(0,NULL,&mask,NULL,&timeout);
if(value==0 || value==-1)
{
closesocket(sockfd);
Sleep(50);
InterlockedExchangeAdd((long *)&threadnum,-1);
return 0;

}
else
{
shutdown(sockfd, 0);
printf("\t\tFound port %d open.\r\n",port);
closesocket(sockfd);
Sleep(50);
InterlockedExchangeAdd((long *)&threadnum,-1);
}



return 0;
}

VOID main( int argc,char **argv )
{

WSADATA ws;
char *p;
int startport,endport;
clock_t start,end;//程序运行的起始和结束时间
float costtime;//程序耗时



if(argc!=4)
{
usage(argv[0]);
return ;
}



long lresult;

lresult=WSAStartup(MAKEWORD(2,2), &ws);

p=argv[2];//处理端口参数
if(strstr(argv[2],"-"))
{ startport=atoi(argv[2]);
for(;*p;)
if(*(p++)=='-')break;
endport=atoi(p);

if(startport<1 || endport>65535)
{
printf("Port Error!\n");
return;
}
}
host=argv[1];
maxthread=(atoi(argv[3])-1>999)?999:atoi(argv[3])-1;
usage(argv[0]);

timeout.tv_usec=0;
if(maxthread>500)timeout.tv_sec=2;
else timeout.tv_sec=1;

start=clock();//开始计时

totalport=endport-startport;

for(int port=startport;port<endport;port++,nowport++,threadnum++)
{
display();
while(threadnum>maxthread)
{
Sleep(10);
}
CreateThread( NULL,0,ThreadFunc,&port, 0,NULL);
}

end=clock();//计时结束
costtime= (float)(end - start) / CLOCKS_PER_SEC; //转换时间格式
printf("Cost time:%f Sec",costtime);//显示耗时
printf("\n\n");
WaitThreadEnd();


WSACleanup();
return ;
}
yogy离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
 


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭



所有的时间均为北京时间。 现在的时间是 05:38 PM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多