⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 portready.c

📁 端口扫描工具(速度其快)源代码
💻 C
📖 第 1 页 / 共 4 页
字号:

////////////////////////////////////////////////////////////////////////////////////////////////////
//工程 :PortReady
//版本 :1.6
//编译 :LCC-Win32 3.3
//版权 :源代码公开,不保留版权
//作者 :点普工作室(Yonsm)
//主页 :http://dotpot.533.net
//邮箱 :dotpot@163.net
//日期 :2002年1月
//说明 :用Visual C++ 6.0在Release方式下编译后大小为80KB,
//    正式发布版本用LCC-Win32编译,大小为49KB。
//    LCC-Win32及其汉化补丁可在点普工作室主页上下载。
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
//LCC-Win32编译时请添加下列文件到工程中(可使用相对目路径):
//    WSOCK32.lib
//    SHELL32.lib
//    PortReady.c
//    Resource.rc
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
#include			<winsock.h>
#include			<stdio.h>
#include			<commctrl.h>
#include			<shellapi.h>
#include			"NewComCtrl.h"
#include			"Resource.h"
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
typedef	struct tagThread
{
	DWORD			dwAddr;
	WORD			wPort;
}THREADINFO;

typedef	struct tagItem
{
	DWORD			dwAddr;
	WORD			wPort;
	LPSTR			lpstrBanner;
}ITEMINFO;
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
HWND				g_hWnd;
HWND				g_hwndListView;
HWND				g_hwndStatus;
HWND				g_hwndToolTip;
HMENU				g_hMenu;
HHOOK				g_hHook;
HINSTANCE			g_hInst;
HCURSOR				g_hCursor;
HBITMAP				g_hBitmap[6];

BYTE				byteIP[4];
FILE				*fpFile;
POINT				ptCur;
IN_ADDR				iaServer;
THREADINFO			thdINFO[300];

BOOL				isGetBanner;
BOOL				isUsePortRange;
BOOL				isUsePortList;
BOOL				isUseResultIP;
BOOL				isStopForce;
BOOL				isKeepHistroy		= TRUE;
BOOL				isNoAsk;

int					i;
int					nTimeOut;
int					nThreadNum;
int					nScannedPort;
int					nStartPort;
int					nEndPort;
int					nPort[100];
int					nPortCount;
int					nSkipHost;
int					nItemCount;
DWORD				dwStartIP;
DWORD				dwEndIP;
DWORD				dwThreadID;

char				*p;
char				strTemp[600];
const char			c_szResolve[]		= "正在解析域名...";
const char			c_szGetBanner[]		= "正在获取标识...";
const char			c_szCancelBanner[]	= "扫描中止,放弃标识";
const char			c_szWelcome[]		= "欢迎到访问『http://dotpot.533.net』";
const char			*c_szToolTip[]		=
					{
						"起始IP地址",
						"停止IP地址",
						"选择是否使用端口范围",
						"选择是否使用端口列表",
						"起始端口",
						"停止端口",
						"端口列表,使用逗号(,)将不同端口隔开",
						"扫描线程数目,默认100个线程",
						"连接超时时间,默认2秒",
						"扫描结果窗口,右击可调出弹出菜单",
						"开始扫描",
						"停止扫描",
						"http://dotpot.533.net",
						"mailto:dotpot@163.com"
					};

////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL WINAPI				LoadResult(char	*strFileName);
BOOL WINAPI				SaveResult(char	*strFileName,BOOL isSaveSelected);

void WINAPI				StartScan();
void WINAPI				ResolveDomain();
void WINAPI				ScanThread(int intCurThread);

void WINAPI				On_InitDialog();
void WINAPI				On_Command(WPARAM wParam);
void WINAPI				On_NoTify(WPARAM wParam,LPARAM lParam);
void WINAPI				On_DrawItem(WPARAM wParam,LPARAM lParam);

int	APIENTRY			WinMain(HINSTANCE hInstance, HINSTANCE	hPrevInstance, LPSTR lpCmdLine,	int	nCmdShow);
LRESULT	CALLBACK		MouseProc(int nCode, WPARAM wParam, LPARAM	lParam);
LRESULT CALLBACK		HyperLinkProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
static int CALLBACK		CompareFunc(LPARAM lParam1,	LPARAM lParam2,	LPARAM lParamSort);
static BOOL	CALLBACK	AboutDlgProc(HWND	g_hWnd,	UINT msg, WPARAM wParam, LPARAM	lParam);
static BOOL	CALLBACK	MainDlgProc(HWND g_hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
////////////////////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////////////////////
int	APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE	hPrevInstance, LPSTR lpCmdLine,	int	nCmdShow)
{
	WSADATA	wsaData;
	INITCOMMONCONTROLSEX initCom;

	g_hInst=hInstance;
	initCom.dwICC=ICC_INTERNET_CLASSES;
	initCom.dwSize=sizeof(INITCOMMONCONTROLSEX);
	InitCommonControlsEx(&initCom);
	if(WSAStartup(MAKEWORD(1, 1), &wsaData))
	{
		MessageBox(NULL,"无法初始化	Winsock	DLL\t","错误",MB_OK|MB_ICONSTOP);
		return 0;
	}
	DialogBox(g_hInst, MAKEINTRESOURCE(IDD_MAINDIALOG),	NULL, (DLGPROC)	MainDlgProc);
	WSACleanup();
	return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
static BOOL	CALLBACK MainDlgProc(HWND hWndDlg, UINT msg,	WPARAM wParam, LPARAM lParam)
{
	switch (msg)
	{
		case WM_INITDIALOG:
			g_hWnd=hWndDlg;
			On_InitDialog();
			return TRUE;

		case WM_CTLCOLORSTATIC:
			if(GetDlgCtrlID((HWND)lParam) == IDC_HOME || GetDlgCtrlID((HWND)lParam) == IDC_MAIL)
			{
				SetTextColor((HDC)wParam, 0xFF0000);
				SetBkColor((HDC)wParam, GetSysColor(COLOR_MENU));
				return (int)GetStockObject(HOLLOW_BRUSH);
			}
			break;

		case WM_DRAWITEM:
			On_DrawItem(wParam,lParam);
			return TRUE;

		case WM_NOTIFY:
			On_NoTify(wParam,lParam);
			return TRUE;

		case WM_HELP:
			SendMessage(g_hWnd,WM_SYSCOMMAND,IDC_HELPCMD,0);
			return TRUE;

		case WM_SIZE:
			if(wParam==SIZE_MAXIMIZED || wParam==SIZE_RESTORED)
			{
				MoveWindow(g_hwndListView,15,120,LOWORD(lParam)-30,HIWORD(lParam)-155,TRUE);
				MoveWindow(GetDlgItem(g_hWnd,IDG_RESULT),6,100,LOWORD(lParam)-12,HIWORD(lParam)-125,TRUE);

				SendMessage(g_hwndStatus,WM_SIZE,wParam,lParam);
				ListView_SetColumnWidth(g_hwndListView,2,LOWORD(lParam)-280);
			}
			break;

		case WM_SYSCOMMAND:
			if(LOWORD(wParam)==IDC_HELPCMD)
			{
				if(SearchPath(NULL,"Readme",".txt",MAX_PATH,strTemp,NULL))
					ShellExecute(g_hWnd,"open",strTemp,NULL,NULL,SW_MAXIMIZE);
				else if(MessageBox(g_hWnd,"帮助文件Readme.txt丢失\n\n要连接到http://dotpot.533.net重新下载吗?","找不到Readme.txt",MB_YESNO|MB_ICONQUESTION)==IDYES)
					ShellExecute(g_hWnd,"open","http://dotpot.533.net",NULL,NULL,SW_MAXIMIZE);
			}
			break;

		case WM_COMMAND:
			On_Command(wParam);
			break;

		case WM_CLOSE:
			for(i=0;i<6;i++)
			   DeleteObject(g_hBitmap[i]);
			if(fpFile=fopen("PortReady.ini","w"))
			{
				SendDlgItemMessage(g_hWnd,IDIP_STARTIP,IPM_GETADDRESS,0,(LPARAM) &dwStartIP);
				byteIP[0]=(BYTE)FIRST_IPADDRESS(dwStartIP);
				byteIP[1]=(BYTE)SECOND_IPADDRESS(dwStartIP);
				byteIP[2]=(BYTE)THIRD_IPADDRESS(dwStartIP);
				byteIP[3]=(BYTE)FOURTH_IPADDRESS(dwStartIP);
				sprintf(strTemp,"起始地址=%d.%d.%d.%d\n",byteIP[0],byteIP[1],byteIP[2],byteIP[3]);
				fputs(strTemp,fpFile);
				SendDlgItemMessage(g_hWnd,IDIP_ENDIP,IPM_GETADDRESS,0,(LPARAM) &dwStartIP);
				byteIP[0]=(BYTE)FIRST_IPADDRESS(dwStartIP);
				byteIP[1]=(BYTE)SECOND_IPADDRESS(dwStartIP);
				byteIP[2]=(BYTE)THIRD_IPADDRESS(dwStartIP);
				byteIP[3]=(BYTE)FOURTH_IPADDRESS(dwStartIP);
				sprintf(strTemp,"停止地址=%d.%d.%d.%d\n端口范围=%d->%d\n线程=%d\n延时=%d\n获取端口标识=%s\n保留历史记录=%s\n使用端口范围=%s\n使用端口列表=%s\n清除时不询问=%s\n端口列表=",
					byteIP[0],byteIP[1],byteIP[2],byteIP[3],
					GetDlgItemInt(g_hWnd,IDE_STARTPORT,NULL,0),GetDlgItemInt(g_hWnd,IDE_ENDPORT,NULL,0),
					GetDlgItemInt(g_hWnd,IDE_THREAD,NULL,0),
					GetDlgItemInt(g_hWnd,IDE_TIMEOUT,NULL,0),
					((GetMenuState(g_hMenu,IDC_GETBANNER,MF_BYCOMMAND) & MF_CHECKED))?"Yes":"No",
					((GetMenuState(g_hMenu,IDC_KEEPHISTORY,MF_BYCOMMAND) & MF_CHECKED))?"Yes":"No",
					SendDlgItemMessage(g_hWnd,IDC_USERANGE,BM_GETCHECK,0,0)?"Yes":"No",
					SendDlgItemMessage(g_hWnd,IDC_USELIST,BM_GETCHECK,0,0)?"Yes":"No",
					isNoAsk ? "Yes" : "No"
					);
				fputs(strTemp,fpFile);
				GetDlgItemText(g_hWnd,IDE_PORTLIST,strTemp,sizeof(strTemp));
				fputs(strTemp,fpFile);
				fclose(fpFile);
			}

			if(((GetMenuState(g_hMenu,IDC_KEEPHISTORY,MF_BYCOMMAND)	& MF_CHECKED)) )
				SaveResult("PortList.txt",FALSE);
			EndDialog(g_hWnd,0);
	}
	return FALSE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
LRESULT	CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM	lParam)
{
	MSG	msg;

	if (nCode>=0 &&	(IsChild(g_hWnd, ((MOUSEHOOKSTRUCT*)lParam)->hwnd)))
	{
		if (wParam==WM_MOUSEMOVE ||	wParam==WM_LBUTTONDOWN || wParam==WM_RBUTTONDOWN)
		{
			msg.lParam = 0;
			msg.wParam = 0;
			msg.message	= wParam;
			msg.hwnd = ((MOUSEHOOKSTRUCT*)lParam)->hwnd;
			SendMessage(g_hwndToolTip, TTM_RELAYEVENT, 0, (LPARAM) (LPMSG) &msg);
		}
	}

	return (CallNextHookEx(g_hHook,	nCode, wParam, lParam));
}
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK HyperLinkProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_LBUTTONUP:
		switch(GetDlgCtrlID(hwnd))
		{
		case IDC_HOME:
			ShellExecute(g_hWnd,"open",c_szToolTip[12],NULL,NULL,SW_MAXIMIZE);
			break;

		case IDC_MAIL:
			ShellExecute(g_hWnd,"open",c_szToolTip[13],NULL,NULL,SW_MAXIMIZE);
		}
		break;

	case WM_NCHITTEST:
	case WM_SETCURSOR:
		SetCursor(g_hCursor);
		break;

	default:
		return CallWindowProc((WNDPROC)GetWindowLong(hwnd,GWL_USERDATA),hwnd,uMsg,wParam,lParam);
	}
	return TRUE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
static int CALLBACK	CompareFunc(LPARAM lParam1,	LPARAM lParam2,	LPARAM lParamSort)
{
	#define	pItem1 ((ITEMINFO *) lParam1)
	#define	pItem2 ((ITEMINFO *) lParam2)

	if(!lParamSort)
	{
		if(	(pItem1->dwAddr) ==	(pItem2->dwAddr) )
		{
			if(	(pItem1->wPort)	== (pItem2->wPort) )
				return 0;
			else if( (pItem1->wPort) > (pItem2->wPort) )
				return 1;
			else
				return -1;

		}
		else if( (pItem1->dwAddr) >	(pItem2->dwAddr) )
			return 1;
		else
			return -1;
	}
	else if(lParamSort==1)
	{
		if(	(pItem1->wPort)	== (pItem2->wPort) )
		{
			if(	(pItem1->dwAddr) ==	(pItem2->dwAddr) )
				return 0;
			else if( (pItem1->dwAddr) >	(pItem2->dwAddr) )
				return 1;
			else
				return -1;

		}
		else if( (pItem1->wPort) > (pItem2->wPort) )
			return 1;
		else
			return -1;
	}
	else
	{
		return(	lstrcmpi(pItem1->lpstrBanner,pItem2->lpstrBanner) );
	}

	#undef pItem1
	#undef pItem2
}
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
void WINAPI	On_InitDialog()
{
	TOOLINFO ti;
	HICON hIcon;
	LV_COLUMN lvc;
	long sbParts[4];
	HIMAGELIST hImageList;

	g_hCursor = LoadCursor(g_hInst, MAKEINTRESOURCE(IDC_CURSOR_HAND));
	g_hMenu	= GetSystemMenu(g_hWnd,FALSE);
	AppendMenu(g_hMenu,MF_SEPARATOR,0,NULL);
	AppendMenu(g_hMenu,MF_ENABLED,IDC_HELPCMD,"帮助(&H)\tF1");

	g_hMenu=GetSubMenu(LoadMenu(g_hInst, MAKEINTRESOURCE(IDM_MENU)),0);
	g_hBitmap[0]=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_CHECK));
	g_hBitmap[1]=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_UNCHECK));
	SetMenuItemBitmaps(g_hMenu,	IDC_GETBANNER, MF_BYCOMMAND,g_hBitmap[1],g_hBitmap[0]);
	SetMenuItemBitmaps(g_hMenu,	IDC_KEEPHISTORY, MF_BYCOMMAND,g_hBitmap[1],g_hBitmap[0]);

	for(i=0;i<6;i++)
		g_hBitmap[i]=LoadBitmap(g_hInst, MAKEINTRESOURCE( (i%3)+200	) );

	CreateUpDownControl(WS_CHILD|WS_BORDER|WS_VISIBLE|UDS_SETBUDDYINT|UDS_ALIGNRIGHT, 0,0,0,0,g_hWnd,0,g_hInst,GetDlgItem(g_hWnd,IDE_THREAD),300,1,100);
	CreateUpDownControl(WS_CHILD|WS_BORDER|WS_VISIBLE|UDS_SETBUDDYINT|UDS_ALIGNRIGHT, 0,0,0,0,g_hWnd,0,g_hInst,GetDlgItem(g_hWnd,IDE_TIMEOUT),20,1,2);

	sbParts[0]=241;
	sbParts[1]=355;
	sbParts[2]=455;
	sbParts[3]=-1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -