现在的位置: 首页 > 综合 > 正文

多线程端口扫描器

2013年09月25日 ⁄ 综合 ⁄ 共 1833字 ⁄ 字号 评论关闭

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>

#pragma comment(lib,"ws2_32.lib")

#define maxthread 100 //最大线程数
#define scanspeed 20 //主线程等待时间

DWORD WINAPI scan(LPVOID lp);

void usage(){
 printf("/n/n----------------------------------------");
 printf("/n code by jsufcz -- jsufcz@21xcn.net");
 printf("/n usage:scan ip port1 port2");
 printf("/n----------------------------------------/n/n");
}

void checkerror(int code,char *msg){
 if(code==-1){
  printf("/n%s error:%d",msg,GetLastError());
  exit(-1);
 }
}

typedef struct{
 char ip[20];
 int port;
}infor;

int threadcount;
int findcount;

void main(int argc,char *argv[]){
 WSADATA wsa;
 infor infor1={0};
 int ret;
 int nowport;
 int min,max;
 HANDLE h;
 
 if(argc!=4){
  usage();
  exit(-1);
 }
 
 ret=WSAStartup(0x0202,&wsa);
 checkerror(ret,"wsastartup()");
 
 min=atoi(argv[2]);
 max=atoi(argv[3]);
 strcpy(infor1.ip,argv[1]);
 
 threadcount=0;
 findcount=0;
 for(nowport=min;nowport<=max;nowport++){
  infor1.port=nowport;
  if(threadcount>=maxthread) Sleep(1000);
  h=CreateThread(NULL,NULL,scan,&infor1,NULL,NULL);
  if(h==NULL){
   printf("/ncreatethread error!");
   WaitForSingleObject(h,INFINITE);
  }
  Sleep(scanspeed);
 }
 
 printf("/n/nscan end! find portcount:%d",findcount);
 WSACleanup();
}

DWORD WINAPI scan(LPVOID lp){
 struct sockaddr_in sin;
 SOCKET sock;
 infor *lpinfor=(infor*)lp;
 int ntime;
 int ret;
 
 threadcount++;
 sock=socket(AF_INET,SOCK_STREAM,0);
 checkerror(sock,"socket()");
 
 ntime=1000;
 ret=setsockopt(sock,SOL_SOCKET,SO_SNDTIMEO,(char*)&ntime,sizeof(ntime));
 checkerror(ret,"so_sndtimeo");
 
 memset(&sin,0,sizeof(sin));
 sin.sin_family=AF_INET;
 sin.sin_addr.s_addr=inet_addr(lpinfor->ip);
 sin.sin_port=htons(lpinfor->port);
 
 ret=connect(sock,(struct sockaddr*)&sin,sizeof(sin));
 if(!ret){
  findcount++;
  printf("/nhost %s -> %d",(char*)inet_ntoa(sin.sin_addr),ntohs(sin.sin_port));
 }
 closesocket(sock);
 threadcount--;
 return 0;
}

在VC6。0下编译通过。

【上篇】
【下篇】

抱歉!评论已关闭.