文章作者:恶猫[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);
}其他文件在压缩包内....