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

📄 portready.c

📁 端口扫描工具(速度其快)源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
		case IDC_SORTIP:
		case IDC_SORTPORT:
		case IDC_SORTBANNER:
			ListView_SortItems(	g_hwndListView,	CompareFunc, LOWORD(wParam) - 514 );
			break;

		case IDC_TELNET:
			for(i=0;i<nItemCount;i++)
			{
				if(ListView_GetItemState(g_hwndListView,i,LVIS_SELECTED))
				{
					ListView_GetItemText(g_hwndListView,i,0,strTemp,sizeof(strTemp));
					p=strTemp+strlen(strTemp);
					*(p++)=' ';
					ListView_GetItemText(g_hwndListView,i,1,p,6);
					ShellExecute(g_hWnd,"open","telnet.exe",strTemp,NULL,SW_SHOWNORMAL);
				}
			}
			break;

		case IDC_RESOLVEDOMAIN:
			CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ResolveDomain,0,0,&dwThreadID);
			break;
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
void WINAPI	On_NoTify(WPARAM wParam,LPARAM lParam)
{
	#define lpmsg ((LPNMHDR)lParam)

	switch(lpmsg->code)
	{
	case TTN_NEEDTEXT:
		((LPTOOLTIPTEXT) lParam)->lpszText = (LPSTR) c_szToolTip[GetDlgCtrlID((HWND) lpmsg->idFrom) - 400];
		break;

	case TTN_SHOW:
		SendMessage(g_hwndStatus,SB_SETTEXT,0,(LONG) c_szToolTip[GetDlgCtrlID((HWND) lpmsg->idFrom) - 400]);
		break;

	case TTN_POP:
		SendMessage(g_hwndStatus,SB_SETTEXT,0,(LONG)c_szWelcome);
		break;

	case LVN_COLUMNCLICK:
		#define	pnm	((NM_LISTVIEW *) lParam)
		ListView_SetColumnWidth(g_hwndListView,0,150);
		ListView_SetColumnWidth(g_hwndListView,1,75);
		ListView_SortItems(	g_hwndListView,	CompareFunc, (LPARAM) (pnm->iSubItem) );
		#undef pnm
		break;

	case LVN_GETDISPINFO:
		#define	pnmv ((LV_DISPINFO *) lParam)
		if (pnmv->item.mask	& LVIF_TEXT)
		{
			#define	pItem ((ITEMINFO *)(pnmv->item.lParam))
			if(	!(pnmv->item.iSubItem) )
			{
				iaServer.s_addr=htonl(pItem->dwAddr);
				lstrcpy(pnmv->item.pszText,	inet_ntoa(iaServer));
			}
			else if( pnmv->item.iSubItem ==	1 )
			{
				char strString[6];
				sprintf(strString,"%d",pItem->wPort);
				lstrcpy(pnmv->item.pszText,strString);
			}
			else
				lstrcpy(pnmv->item.pszText,	pItem->lpstrBanner);
			#undef pItem
		}
		#undef pnmv
		break;

	case NM_RCLICK:
		i=ListView_GetSelectedCount(g_hwndListView);

		EnableMenuItem(g_hMenu,IDC_COPY,i?MF_ENABLED:MF_GRAYED);
		EnableMenuItem(g_hMenu,IDC_CUT,(i && !nThreadNum)	? MF_ENABLED : MF_GRAYED);
		EnableMenuItem(g_hMenu,IDC_SELECTINVERSE,i?MF_ENABLED:MF_GRAYED);
		EnableMenuItem(g_hMenu,IDC_RESOLVEDOMAIN,(i	&& !nThreadNum) ?	MF_ENABLED : MF_GRAYED);
		EnableMenuItem(g_hMenu,IDC_TELNET,i?MF_ENABLED:MF_GRAYED);
		ModifyMenu(g_hMenu,IDC_DEL,MF_BYCOMMAND,IDC_DEL,i?"删除(&D)\tDel":"清除(&D)\tCtrl+Del");

		EnableMenuItem(g_hMenu,IDC_SORTIP,nItemCount ?  MF_ENABLED: MF_GRAYED);
		EnableMenuItem(g_hMenu,IDC_SORTPORT,nItemCount ? MF_ENABLED : MF_GRAYED);
		EnableMenuItem(g_hMenu,IDC_SORTBANNER,nItemCount ? MF_ENABLED : MF_GRAYED);
		EnableMenuItem(g_hMenu,IDC_DEL,(nItemCount &&	!nThreadNum)?MF_ENABLED:MF_GRAYED);

		EnableMenuItem(g_hMenu,IDC_SELECTALL,nItemCount?MF_ENABLED:MF_GRAYED);
		EnableMenuItem(g_hMenu,IDC_SAVE,nItemCount?MF_ENABLED:MF_GRAYED);
		EnableMenuItem(g_hMenu,IDC_LOAD,nThreadNum ? MF_GRAYED : MF_ENABLED);

		GetCursorPos(&ptCur);
		TrackPopupMenu(g_hMenu,0,ptCur.x,ptCur.y,0,g_hWnd,NULL);
		break;

	case LVN_KEYDOWN:
		i=ListView_GetSelectedCount(g_hwndListView);
		#define	pnm	((LV_KEYDOWN *)	lParam)
		switch(pnm->wVKey)
		{
			case 46://Del
				if(!nThreadNum)
				{
					if(HIBYTE(GetKeyState(VK_CONTROL)))
					{
						ListView_DeleteAllItems(g_hwndListView);
						nItemCount=0;
						SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)3,(LPARAM)"开放端口:0");
					}
					else if(nItemCount)
						SendMessage(g_hWnd,WM_COMMAND,IDC_DEL,0);
				}
				break;

			case 65://Ctrl+A
				if(nItemCount	&& HIBYTE(GetKeyState(VK_CONTROL)) )
					SendMessage(g_hWnd,WM_COMMAND,IDC_SELECTALL,0);
				break;

			case 67://Ctrl+C
				if(i &&	HIBYTE(GetKeyState(VK_CONTROL)))
					SendMessage(g_hWnd,WM_COMMAND,IDC_COPY,0);
				break;

			case 68://Ctrl+D
				isUseResultIP =	!isUseResultIP;
				ListView_SetExtendedListViewStyle(g_hwndListView,isUseResultIP ? (LVS_EX_GRIDLINES|LVS_EX_SUBITEMIMAGES|LVS_EX_CHECKBOXES) : (LVS_EX_GRIDLINES|LVS_EX_SUBITEMIMAGES) );
				SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,isUseResultIP	? (LPARAM)"请选择结果窗口的地址进行扫描" : (LPARAM)"要激活隐藏功能,请在结果窗口按Ctrl+D");
				break;

			case 73://Ctrl+I
				if(i &&	HIBYTE(GetKeyState(VK_CONTROL)))
					SendMessage(g_hWnd,WM_COMMAND,IDC_SELECTINVERSE,0);
				break;

			case 88://Ctrl+X
				if(i &&	(!nThreadNum)	&& HIBYTE(GetKeyState(VK_CONTROL)))
					SendMessage(g_hWnd,WM_COMMAND,IDC_CUT,0);
				break;
		}
		#undef pnm
	}
	#undef lpmsg
}
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
void WINAPI	On_DrawItem(WPARAM wParam,LPARAM lParam)
{
	HDC	hdcMem;

	hdcMem = CreateCompatibleDC(((LPDRAWITEMSTRUCT)	lParam)->hDC);
	SetBkMode(hdcMem,TRANSPARENT);
	SelectObject(hdcMem, GetStockObject(DEFAULT_GUI_FONT));

	i =	((LPDRAWITEMSTRUCT)	lParam)->itemState & ODS_SELECTED;

	if(wParam==IDC_SCAN)
	{
		if(	( (LPDRAWITEMSTRUCT) lParam)->itemState	& ODS_DISABLED )
			SelectObject(hdcMem, g_hBitmap[2]);
		else
			SelectObject(hdcMem, g_hBitmap[i]);
		TextOut(hdcMem,12+i,5+i,"扫 描",5);
	}
	else if(wParam==IDC_STOP)
	{
		if(	( (LPDRAWITEMSTRUCT) lParam)->itemState	& ODS_DISABLED )
			SelectObject(hdcMem, g_hBitmap[5]);
		else
			SelectObject(hdcMem, g_hBitmap[i+3]);
		TextOut(hdcMem,12+i,5+i,"停 止",5);
	}

	BitBlt(((LPDRAWITEMSTRUCT) lParam)->hDC,((LPDRAWITEMSTRUCT)	lParam)->rcItem.left,((LPDRAWITEMSTRUCT) lParam)->rcItem.top,((LPDRAWITEMSTRUCT) lParam)->rcItem.right - ((LPDRAWITEMSTRUCT) lParam)->rcItem.left, ((LPDRAWITEMSTRUCT) lParam)->rcItem.bottom -	((LPDRAWITEMSTRUCT)	lParam)->rcItem.top, hdcMem, 0,	0, SRCCOPY);
	DeleteDC(hdcMem);
}
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
void WINAPI	StartScan()
{
	int					k = 0;
	int					j;
	int					intINT;
	int					intMAXThread;
	char				*pPoint1;
	char				*pPoint2;
	char				strString[600];
	IN_ADDR				iaServer;
	DWORD				dwStartTime,dwCurIP;
	BOOL				isStartScanRange = TRUE;

	nSkipHost			= 0;
	nPortCount			= 0;
	nScannedPort		= 0;
	isStopForce			= FALSE;
	ZeroMemory(&thdINFO,300*sizeof(THREADINFO));

	isGetBanner=(GetMenuState(g_hMenu,IDC_GETBANNER,MF_BYCOMMAND) &	MF_CHECKED);
	isKeepHistroy=(GetMenuState(g_hMenu,IDC_KEEPHISTORY,MF_BYCOMMAND) &	MF_CHECKED);
	isUsePortRange=SendDlgItemMessage(g_hWnd,IDC_USERANGE,BM_GETCHECK,0,0);
	isUsePortList=SendDlgItemMessage(g_hWnd,IDC_USELIST,BM_GETCHECK,0,0);//获取BOOL数据

	intMAXThread=GetDlgItemInt(g_hWnd,IDE_THREAD,NULL,0);
	if(!intMAXThread)
	{
		SetDlgItemInt(g_hWnd,IDE_THREAD,50,0);
		intMAXThread=50;
	}
	nTimeOut=GetDlgItemInt(g_hWnd,IDE_TIMEOUT,NULL,0);
	if(!nTimeOut)
	{
		SetDlgItemInt(g_hWnd,IDE_TIMEOUT,3,0);
		nTimeOut=3;
	}

	SendDlgItemMessage(g_hWnd,IDIP_STARTIP,IPM_GETADDRESS,0,(LPARAM) &dwStartIP);
	SendDlgItemMessage(g_hWnd,IDIP_ENDIP,IPM_GETADDRESS,0,(LPARAM) &dwEndIP);
	if(dwStartIP>dwEndIP)
	{
		dwCurIP=dwStartIP;
		dwStartIP=dwEndIP;
		dwEndIP=dwCurIP;
		SendDlgItemMessage(g_hWnd,IDIP_STARTIP,IPM_SETADDRESS,0,dwStartIP);
		SendDlgItemMessage(g_hWnd,IDIP_ENDIP,IPM_SETADDRESS,0,dwEndIP);
	}

	if(isUsePortRange)
	{
		nStartPort=GetDlgItemInt(g_hWnd,IDE_STARTPORT,NULL,0);
		nEndPort=GetDlgItemInt(g_hWnd,IDE_ENDPORT,NULL,0);
		if(nStartPort>nEndPort)
		{	intINT=nStartPort;
			nStartPort=nEndPort;
			nEndPort=intINT;
		}
		if(!nStartPort)
		{
			if(!nEndPort)
			{
				isUsePortRange=FALSE;
			}
			else
			{
				nStartPort=nEndPort;
				SetDlgItemInt(g_hWnd,IDE_STARTPORT,nEndPort,0);
				SetDlgItemInt(g_hWnd,IDE_ENDPORT,nEndPort,0);
			}
		}
	}//获取端口范围


	if(isUsePortList)
	{
		GetDlgItemText(g_hWnd,IDE_PORTLIST,strString,599);
		pPoint1=strString;
		for(nPortCount=0;*pPoint1	&& (nPortCount<100);)
		{
			j=atoi(pPoint1);
			if(j &&	j<65535	&& (j<nStartPort || j>nEndPort || !isUsePortRange ))
			{
				nPort[nPortCount]=j;
				nPortCount++;
			}
			if(!( (pPoint2=strchr(pPoint1,','))	|| (pPoint2=strchr(pPoint1,';')) ||	(pPoint2=strchr(pPoint1,' ')) || (pPoint2=strchr(pPoint1,'.')) ))
				break;
			pPoint1=++pPoint2;
		}
		if(!nPortCount)
			isUsePortList=FALSE;
	}//获取端口列表

	if(isUsePortList||isUsePortRange)
	{
		EnableWindow(GetDlgItem(g_hWnd,IDC_SCAN),0);
		EnableWindow(GetDlgItem(g_hWnd,IDC_STOP),1);
		SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)1,(LPARAM)"已完成:0%");

		if(isUsePortList)
			j=nPort[0];
		else
			j=nStartPort;
		if(isUseResultIP)
		{
			dwCurIP=0;
			for	(dwStartIP=0,dwEndIP=0;(int)dwEndIP	< nItemCount;dwEndIP++)
				if(ListView_GetCheckState(g_hwndListView,dwEndIP))
					dwStartIP++;
		}
		else
		{
			dwCurIP=dwStartIP;
			if(!isKeepHistroy)
			{
				ListView_DeleteAllItems(g_hwndListView);
				nItemCount=0;
				sprintf(strTemp,"开放端口:%d",nItemCount);
				SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)3,(LPARAM)strTemp);
			}
		}
		dwStartTime=GetTickCount();

		while(dwCurIP<=dwEndIP)
		{
			if(isStopForce)
				break;
			if(	((dwCurIP %	256)==0	|| (dwCurIP	% 256)==255) &&	!isUseResultIP)
			{
				nSkipHost++;
				dwCurIP++;
				continue;
			}
			if(nThreadNum<intMAXThread)
			{
				for(intINT=0;intINT<intMAXThread;intINT++)
					if(thdINFO[intINT].wPort==0)
						break;
				if(isUseResultIP)
				{
					while(dwCurIP<dwEndIP)
					{
						if(ListView_GetCheckState(g_hwndListView,dwCurIP))
							break;
						dwCurIP++;
					}
					if(dwCurIP==dwEndIP)
						break;
					ListView_GetItemText(g_hwndListView,dwCurIP,0,strTemp,16);
					thdINFO[intINT].dwAddr=htonl(inet_addr(strTemp));
				}
				else
				{
					thdINFO[intINT].dwAddr=dwCurIP;
				}
				thdINFO[intINT].wPort=j;

				CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ScanThread,(LPVOID)intINT,0,&dwThreadID);
				nThreadNum++;

				iaServer.s_addr=htonl(thdINFO[intINT].dwAddr);
				sprintf(strString,"正在扫描 %s:%d",inet_ntoa(iaServer),j);
				SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,(LPARAM)strString);
				sprintf(strString,"活动线程:%d",nThreadNum);
				SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)2,(LPARAM)strString);

				if(isUsePortRange)
				{
					if(isUsePortList)//既使用端口范围,又使用端口列表
					{
						if(k==nPortCount-1)
						{
							if(isStartScanRange)
							{
								j=nStartPort;
								isStartScanRange=FALSE;
							}
							else
							{
								if(j==nEndPort)
								{
									j=nPort[0];
									k=0;
									isStartScanRange=TRUE;
									dwCurIP++;
								}
								else
									j++;
							}
						}
						else
						{
							k++;
							j=nPort[k];
						}
					}
					else//使用端口范围,未使用端口列表
					{

⌨️ 快捷键说明

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