发新话题
打印

[原创]一个简单的sdk版多线程扫描器

[原创]一个简单的sdk版多线程扫描器

  文章作者:恶猫[E.S.T](EvilCat[E.S.T])
信息来源:邪恶八进制 中国

网上开源扫描器很多,可惜一般都是命令行下的,我正好在学习windows程序设计,就写了个gui版的,很简陋忘大家见谅,注意扫描结果中的端口与端口之间是以"|"分隔的。有想法的朋友可以把它变强。在VC6.0下编译通过。下面的这个附件是源码,随意改造。
复制内容到剪贴板
代码:
//by EvilCat[E.S.T]
//Welcome to [url]www.eviloctal.com[/url]
#include<winsock.h>
#include<stdio.h>
#include"resource.h"
#include"myscan.h"
#pragma comment(lib,"ws2_32.lib")
#define MaxThread 100 //最大线程数
#define ScanSpeed 30 //主线程等待时间


int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                        LPSTR lpCmdLine,int nCmdShow)
{
     
     DialogBox(hInstance,(LPCTSTR)MainDialog,NULL,(DLGPROC)DlgPro);
     
     return(TRUE);
}


BOOL APIENTRY DlgPro(HWND hDlg,UINT message,
                        WPARAM wParam,LPARAM lParam)
{
     
     switch(message)
     {
     case WM_INITDIALOG:
         
          SetDlgItemText(hDlg,IDC_SHOWTEXT,"邪恶八进制");
          return TRUE;
         
     case WM_COMMAND:
         
          switch(LOWORD(wParam))
          {
          case IDC_IPADDRESS:
              if(HIWORD(wParam) == EN_CHANGE)
              {
                   GetDlgItemText(hDlg,IDC_IPADDRESS,IP_String,20);
                  
              }     
              break;
              
          case IDC_PORT1:
              if(HIWORD(wParam) == EN_CHANGE)
              {
                   uMin=GetDlgItemInt(hDlg,IDC_PORT1,&bErr,TRUE);
              }            
              break;
              
      case IDC_PORT2:
              if(HIWORD(wParam) == EN_CHANGE)
              {
                   uMax=GetDlgItemInt(hDlg,IDC_PORT2,&bErr,TRUE);
              }     
              break;
              
          case IDC_SHOWTEXT:
              
        break;
              
          case IDC_SCAN:
              WSA_return = WSAStartup(0x0002,&wsa);
              if(WSA_return != 0)
              {
                   MessageBox(NULL,"初始化失败!","警告!",0);
                   WSACleanup();
              }
              
              infor1.hDlg = hDlg;
        strcpy(infor1.ip,IP_String);              
        for(uNow = uMin; uNow <= uMax; uNow++)
              {
                   infor1.port = uNow;
                  
                   if(hThread = CreateThread(NULL,0,scan,&infor1,0,&dwThreadId) == NULL)
                   {
                        MessageBox(NULL,"创建线程失败!","警告",0);
                        return;
                   }
                   CloseHandle(hThread);

                   Sleep(ScanSpeed);

                   if(threadcount == 100) Sleep(1000);
              }
              
              
        MessageBox(NULL,TEXT("Scan End!"),TEXT("扫描结束!"),0);
              
        WSACleanup();
              break;
              
          case IDCANCEL:
              strcpy(szURL,"[url]http://www.eviloctal.com/forum/index.php[/url]");
              ShellExecute(NULL,"open",szURL,NULL,NULL,SW_SHOWNORMAL);
              EndDialog(hDlg,TRUE);
              return(TRUE);
              
          }
         
     }
     return(FALSE);
     
}
其他文件在压缩包内....

附件

myscan.rar (19 KB)

2005-1-20 00:22, 下载次数: 70

我用青春赌明天

TOP

把程序编译了一下,扫描本机端口发现程序呈半死状态。
嘎嘎~~
http://hi.baidu.com/fengze

TOP

我是xpsp2运行的还成,端口的判断没什么问题,这个扫描器很简单,风泽觉得那里不好,自己改改呀~~哈哈~
我用青春赌明天

TOP

不是不好~~  :)

代码的确不错  :) 但我认为线程最好让用户自己设置  :)慢速扫描可以躲过IDS嘛~~
http://hi.baidu.com/fengze

TOP

呵呵..测试结果和风泽兄一样,半死状态..
安全就象毒品一样,上瘾了就戒不掉了 http://www.6code.net

TOP

上面的帖子不知道你读没读,话我想不用再和zhouzhen兄说一遍吧。
端口范围过大的时候,是有可能出现假死状态的。要是CUI的估计不会出现这样的问题了。
我用青春赌明天

TOP

发新话题