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

📄 portready.c

📁 端口扫描工具(速度其快)源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
	g_hwndStatus=CreateStatusWindow(WS_CHILD|WS_VISIBLE,c_szWelcome,g_hWnd,IDS_STATUS);
	SendMessage(g_hwndStatus,SB_SETPARTS,(WPARAM) 4,(LPARAM) sbParts);
	SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)1,(LPARAM)"Ready");
	SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)2,(LPARAM)"活动线程:0");
	SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)3,(LPARAM)"开放端口:0");

	g_hwndToolTip =	CreateWindowEx(0, TOOLTIPS_CLASS, (LPSTR) NULL,	TTS_ALWAYSTIP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,	CW_USEDEFAULT, g_hWnd, (HMENU) NULL, g_hInst, NULL);
	ti.cbSize =	sizeof(TOOLINFO);
	ti.uFlags =	TTF_IDISHWND;
	ti.hwnd	= g_hWnd;
	ti.hinst = 0;
	ti.lpszText	= LPSTR_TEXTCALLBACK;
	for(i=IDIP_STARTIP; i<=IDC_MAIL; i++)
	{
		ti.uId = (UINT)	GetDlgItem(g_hWnd,i);
		SendMessage(g_hwndToolTip, TTM_ADDTOOL,	0, (LPARAM)	(LPTOOLINFO) &ti);
	}
	g_hHook	= SetWindowsHookEx(WH_MOUSE, MouseProc,(HINSTANCE) NULL, GetCurrentThreadId());

	hImageList=	ImageList_Create(16,16,	ILC_COLOR8,	1, 1);

	for(i=300;i<312;i++)
	{
		hIcon=LoadIcon(g_hInst,	MAKEINTRESOURCE(i));
		if(i==300)
			SetClassLong(g_hWnd,GCL_HICON,(LONG)hIcon);
		ImageList_AddIcon(hImageList,hIcon);
		DeleteObject(hIcon);
	}

	g_hwndListView = GetDlgItem(g_hWnd,IDL_RESULT);
	ListView_SetExtendedListViewStyle(g_hwndListView,LVS_EX_GRIDLINES|LVS_EX_SUBITEMIMAGES);
	ListView_SetImageList(g_hwndListView, hImageList, LVSIL_SMALL);
	lvc.mask = LVCF_WIDTH |	LVCF_TEXT |	LVCF_SUBITEM ;
	lvc.cx = 150;
	lvc.iSubItem = 0;
	lvc.pszText="地址";
	ListView_InsertColumn(g_hwndListView, 0, &lvc);
	lvc.cx = 75;
	lvc.iSubItem = 1;
	lvc.pszText="端口";
	ListView_InsertColumn(g_hwndListView, 1, &lvc);
	lvc.cx = 280;
	lvc.iSubItem = 2;
	lvc.pszText="标识";
	ListView_InsertColumn(g_hwndListView, 2, &lvc);

	SendDlgItemMessage(g_hWnd,IDE_STARTPORT,EM_SETLIMITTEXT,(WPARAM) 5,0);
	SendDlgItemMessage(g_hWnd,IDE_ENDPORT,EM_SETLIMITTEXT,(WPARAM) 5,0);
	SendDlgItemMessage(g_hWnd,IDE_PORTLIST,EM_SETLIMITTEXT,(WPARAM)	600,0);
	SendDlgItemMessage(g_hWnd,IDE_THREAD,EM_SETLIMITTEXT,(WPARAM) 3,0);
	SendDlgItemMessage(g_hWnd,IDE_TIMEOUT,EM_SETLIMITTEXT,(WPARAM) 2,0);
	SendDlgItemMessage(g_hWnd,IDC_USELIST,BM_SETCHECK,1,0);

	SetWindowLong(GetDlgItem(g_hWnd,IDC_HOME), GWL_USERDATA, (LONG)SetWindowLong(GetDlgItem(g_hWnd,IDC_HOME), GWL_WNDPROC, (LONG)HyperLinkProc));
	SetWindowLong(GetDlgItem(g_hWnd,IDC_MAIL), GWL_USERDATA, (LONG)SetWindowLong(GetDlgItem(g_hWnd,IDC_MAIL), GWL_WNDPROC, (LONG)HyperLinkProc));

	if(fpFile=fopen("PortReady.ini","r"))
	{
		fgets(strTemp,sizeof(strTemp),fpFile);
		if(p=strchr(strTemp,'='))
		{
			p++;
			for(i=0;i<4;i++)
			{
				byteIP[i]=atoi(p);
				for(;*p;)
					if(*(p++)=='.')
						break;
			}
			if(byteIP[0]||byteIP[1]||byteIP[2]||byteIP[3])
				SendDlgItemMessage(g_hWnd,IDIP_STARTIP,IPM_SETADDRESS,0,(LPARAM) MAKEIPADDRESS(byteIP[0],byteIP[1],byteIP[2],byteIP[3]));
		}

		fgets(strTemp,sizeof(strTemp),fpFile);
		if(p=strchr(strTemp,'='))
		{
			p++;
			for(i=0;i<4;i++)
			{
				byteIP[i]=atoi(p);
				for(;*p;)
					if(*(p++)=='.')
						break;
			}
			if(byteIP[0]||byteIP[1]||byteIP[2]||byteIP[3])
				SendDlgItemMessage(g_hWnd,IDIP_ENDIP,IPM_SETADDRESS,0,(LPARAM) MAKEIPADDRESS(byteIP[0],byteIP[1],byteIP[2],byteIP[3]));
		}

		fgets(strTemp,sizeof(strTemp),fpFile);
		if(p=strchr(strTemp,'='))
		{
			p++;
			if(atoi(p))
				SetDlgItemInt(g_hWnd,IDE_STARTPORT,atoi(p),0);
			for(;*p;)
				if(*(p++)=='>')
					break;
			if(atoi(p))
				SetDlgItemInt(g_hWnd,IDE_ENDPORT,atoi(p),0);
		}

		fgets(strTemp,sizeof(strTemp),fpFile);
		if(p=strchr(strTemp,'='))
		{
			p++;
			SetDlgItemInt(g_hWnd,IDE_THREAD,atoi(p),0);
		}

		fgets(strTemp,sizeof(strTemp),fpFile);
		if(p=strchr(strTemp,'='))
		{
			p++;
			SetDlgItemInt(g_hWnd,IDE_TIMEOUT,atoi(p),0);
		}

		fgets(strTemp,sizeof(strTemp),fpFile);
		if(p=strchr(strTemp,'='))
		{
			p++;
			if(*p=='Y'||*p=='y')
				CheckMenuItem(g_hMenu,IDC_GETBANNER,MF_CHECKED);
		}
		fgets(strTemp,sizeof(strTemp),fpFile);
		if(p=strchr(strTemp,'='))
		{
			p++;
			if((*p=='N'||*p=='n'))
			{
				CheckMenuItem(g_hMenu,IDC_KEEPHISTORY,MF_UNCHECKED);
			}
		}

		fgets(strTemp,sizeof(strTemp),fpFile);
		if(p=strchr(strTemp,'='))
		{
			p++;
			SendDlgItemMessage(g_hWnd,IDC_USERANGE,BM_SETCHECK,*p=='Y'||*p=='y',0);
		}
		fgets(strTemp,sizeof(strTemp),fpFile);
		if(p=strchr(strTemp,'='))
		{
			p++;
			if( (*p=='N'||*p=='n') && SendDlgItemMessage(g_hWnd,IDC_USERANGE,BM_GETCHECK,0,0) )
				SendDlgItemMessage(g_hWnd,IDC_USELIST,BM_SETCHECK,0,0);
		}

		fgets(strTemp,sizeof(strTemp),fpFile);
		if(p=strchr(strTemp,'='))
		{
			p++;
			if(*p=='Y'||*p=='y')
				isNoAsk=TRUE;
		}

		fgets(strTemp,sizeof(strTemp),fpFile);
		p=strrchr(strTemp,'\n');
		if(p)
			*p=0;
		if(p=strchr(strTemp,'='))
		{
			p++;
			SetDlgItemText(g_hWnd,IDE_PORTLIST,p);
		}
		fclose(fpFile);
	}

	if(GetMenuState(g_hMenu,IDC_KEEPHISTORY,MF_BYCOMMAND) &	MF_CHECKED)
		LoadResult("PortList.txt");
}
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
void WINAPI	On_Command(WPARAM wParam)
{
	char *pTemp;
	OPENFILENAME ofn;

	switch (LOWORD(wParam))
	{
		case IDIP_STARTIP:
			if((HIWORD(wParam))==EN_CHANGE)
			{
				if(SendDlgItemMessage(g_hWnd,IDIP_STARTIP,IPM_ISBLANK,0,0))
					SendDlgItemMessage(g_hWnd,IDIP_ENDIP,IPM_CLEARADDRESS,0,0);
				else
				{
					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);
					SendDlgItemMessage(g_hWnd,IDIP_ENDIP,IPM_SETADDRESS,0,(LPARAM) MAKEIPADDRESS(byteIP[0],(byteIP[1]||byteIP[2]||byteIP[3])?byteIP[1]:255,(byteIP[2]||byteIP[3])?byteIP[2]:255,(byteIP[3]==0||byteIP[3]==1)?255:byteIP[3]));
				}
			}
			break;

		case IDE_STARTPORT:
		case IDE_ENDPORT:
			if((HIWORD(wParam))==EN_CHANGE)
			{
				i=GetDlgItemInt(g_hWnd,LOWORD(wParam),NULL,FALSE);
				if(i>65535)
					SetDlgItemInt(g_hWnd,LOWORD(wParam),65535,0);
				else if( i && (LOWORD(wParam)==IDE_STARTPORT) )
					SetDlgItemInt(g_hWnd,IDE_ENDPORT,i,0);
			}
			break;

		case IDE_PORTLIST:
			if((HIWORD(wParam))==EN_CHANGE)
			{
				pTemp=NULL;
				GetDlgItemText(g_hWnd,IDE_PORTLIST,strTemp,sizeof(strTemp));
				for(p=strTemp;*p;)
				{
					if((*p<48 ||*p>57) && (*p!=',')	&& (*p!=';') &&	(*p!=' ') && (*p!='.'))
						for(pTemp=p;*pTemp;pTemp++)
							*pTemp=*(pTemp+1);
					else
						p++;
				}
				if(pTemp)
					SetDlgItemText(g_hWnd,IDE_PORTLIST,strTemp);
			}
			break;

		case IDE_THREAD:
		case IDE_TIMEOUT:
			if(	((HIWORD(wParam))==EN_CHANGE) && (GetDlgItemInt(g_hWnd,LOWORD(wParam),NULL,FALSE) >	(LOWORD(wParam)==IDE_THREAD	? (UINT)300	: (UINT)20)	) )
				SetDlgItemInt(g_hWnd,LOWORD(wParam),LOWORD(wParam)==IDE_THREAD ? 300 : 20,FALSE);
			break;

		case IDC_USERANGE:
		case IDC_USELIST:
			if(SendDlgItemMessage(g_hWnd,LOWORD(wParam),BM_GETCHECK,0,0))
			{
				SendDlgItemMessage(g_hWnd,LOWORD(wParam),BM_SETCHECK,0,0);
				if(!SendDlgItemMessage(g_hWnd,(LOWORD(wParam)==IDC_USELIST)?IDC_USERANGE:IDC_USELIST,BM_GETCHECK,0,0))
					SendDlgItemMessage(g_hWnd,(LOWORD(wParam)==IDC_USELIST)?IDC_USERANGE:IDC_USELIST,BM_SETCHECK,1,0);
			}
			else
				SendDlgItemMessage(g_hWnd,LOWORD(wParam),BM_SETCHECK,1,0);
			break;

		case IDC_GETBANNER:
		case IDC_KEEPHISTORY:
			if(CheckMenuItem(g_hMenu,LOWORD(wParam),MF_CHECKED)==MF_CHECKED)
				CheckMenuItem(g_hMenu,LOWORD(wParam),MF_UNCHECKED);
			TrackPopupMenu(g_hMenu,0,ptCur.x,ptCur.y,0,g_hWnd,NULL);
			break;

		case IDC_SCAN:
			CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)StartScan,0,0,&dwThreadID);
			break;

		case IDC_STOP:
			isStopForce = TRUE;
			break;

		case IDC_LOAD:
		case IDC_SAVE:
			ZeroMemory(&ofn,sizeof(ofn));
			ofn.lStructSize	= sizeof(ofn);
			ofn.hInstance =	g_hInst;
			ofn.hwndOwner =	g_hWnd;
			ofn.lpstrFile =	"PortList.txt";
			ofn.nMaxFile = 256;
			ofn.lpstrFilter	= "文本文件\0*.txt\0所有文件\0*.*\0";
			ofn.lpstrDefExt	= "txt";

			if(LOWORD(wParam)==IDC_LOAD)
			{
				ofn.lpstrTitle = "导入结果文件";
				ofn.Flags =	527372|OFN_FILEMUSTEXIST;
				if(GetOpenFileName(&ofn))
					SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,LoadResult(ofn.lpstrFile)	? (LPARAM)"文件导入成功" : (LPARAM)"文件导入失败");
			}
			else
			{
				ofn.lpstrTitle = (ListView_GetSelectedCount(g_hwndListView)) ? "将所选结果另存为" :	"将全部结果另存为";
				ofn.Flags =	527372|OFN_OVERWRITEPROMPT;
				if(GetSaveFileName(&ofn))
					SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,(SaveResult(ofn.lpstrFile,ListView_GetSelectedCount(g_hwndListView)))	? (LPARAM)"文件保存成功" : (LPARAM)"文件保存失败");
			}
			break;

		case IDC_DEL:
			if(ListView_GetSelectedCount(g_hwndListView))
			{
				for(i=0;i<nItemCount;)
				{
					if(ListView_GetItemState(g_hwndListView,i,LVIS_SELECTED))
					{
						ListView_DeleteItem(g_hwndListView,i);
						nItemCount--;
						nScannedPort=i;
					}
					else
						i++;
				}

				ListView_SetItemState(g_hwndListView,nScannedPort-((nScannedPort==i)?1:0),LVIS_SELECTED,LVIS_SELECTED);
				ListView_EnsureVisible(g_hwndListView,nScannedPort-((nScannedPort==i)?1:0),TRUE);
			}
			else
			{
				if(	isNoAsk || (HIBYTE(GetKeyState(VK_CONTROL))) || (MessageBox(g_hWnd,"确实要清除全部扫描结果吗?","确认清除",MB_OKCANCEL|MB_ICONQUESTION)==IDOK)	)
				{
					ListView_DeleteAllItems(g_hwndListView);
					nItemCount=0;
				}
			}

			sprintf(strTemp,"开放端口:%d",nItemCount);
			SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)3,(LPARAM)strTemp);
			break;

		case IDC_SELECTALL:
			for(i=0;i<nItemCount;i++)
			{
				ListView_SetItemState(g_hwndListView,i,LVIS_SELECTED,LVIS_SELECTED);
				if(isUseResultIP)
					ListView_SetItemState(g_hwndListView,i,INDEXTOSTATEIMAGEMASK(2),LVIS_STATEIMAGEMASK);
			}
			break;

		case IDC_SELECTINVERSE:
			for(i=0;i<nItemCount;i++)
			{
				if(ListView_GetItemState(g_hwndListView,i,LVIS_SELECTED))
				{
					ListView_SetItemState(g_hwndListView,i,0,LVIS_SELECTED);
					if(isUseResultIP)
						ListView_SetItemState(g_hwndListView,i,INDEXTOSTATEIMAGEMASK(1),LVIS_STATEIMAGEMASK);
				}
				else
				{
					ListView_SetItemState(g_hwndListView,i,LVIS_SELECTED,LVIS_SELECTED);
					if(isUseResultIP)
						ListView_SetItemState(g_hwndListView,i,INDEXTOSTATEIMAGEMASK(2),LVIS_STATEIMAGEMASK);
				}
			}
			break;

		case IDC_CUT:
		case IDC_COPY:
			if(OpenClipboard(g_hWnd))
			{
				EmptyClipboard();
				if(p=GlobalAlloc(GMEM_DDESHARE,ListView_GetSelectedCount(g_hwndListView)*18))
				{
					GlobalLock(p);
					*p='\0';
					for(i=0;i<nItemCount;i++)
					{
						if(ListView_GetItemState(g_hwndListView,i,LVIS_SELECTED))
						{
							ListView_GetItemText(g_hwndListView,i,0,strTemp,sizeof(strTemp));
							strcat(p,strTemp);
							strcat(p,"\r\n");
						}
					}
					if(pTemp=strrchr(p,'\r'))
						*pTemp='\0';
					GlobalUnlock(p);
					if(SetClipboardData(CF_TEXT, p))
					{
						CloseClipboard();
						if(LOWORD(wParam)==IDC_CUT)
						{
							SendMessage(g_hWnd,WM_COMMAND,IDC_DEL,0);
							SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,(LPARAM)"已将选定地址剪切到剪贴板");
						}
						else
							SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,(LPARAM)"已将选定地址复制到剪贴板");
						break;
					}
				}
			}
			SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,(LPARAM)"无法复制到剪贴板");
			break;

⌨️ 快捷键说明

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