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

📄 portready.c

📁 端口扫描工具(速度其快)源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
						if(j==nEndPort)
						{
							j=nStartPort;
							dwCurIP++;
						}
						else
							j++;
					}
				}
				else//未使用端口范围,则一定使用端口列表
				{
					if(k==nPortCount-1)
					{
						k=0;
						dwCurIP++;
					}
					else
					{
						k++;
					}
					j=nPort[k];
				}
			}
		}

		if(isStopForce)
		{
			SendDlgItemMessage(g_hWnd,IDIP_STARTIP,IPM_SETADDRESS,0,dwCurIP);
			SendDlgItemMessage(g_hWnd,IDIP_ENDIP,IPM_SETADDRESS,0,dwEndIP);
		}
		for(dwCurIP=0,j=1;nThreadNum;)
		{
			if(!(dwCurIP%500000))
			{
				if(isStopForce)
				{
					EnableWindow(GetDlgItem(g_hWnd,IDC_STOP),0);
					strcpy(strString,"扫描中止,等待线程退出");
				}
				else
					strcpy(strString,"所有线程创建完毕,等待退出");
				for(intINT=0;intINT	< (int)((dwCurIP/500000)%7);intINT++)
					strcat(strString,">");
				SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,(LPARAM)strString);
				if(dwCurIP==3000000)
					j=0;
				else if(dwCurIP==0)
					j=1;
			}
			if(j)
				dwCurIP++;
			else
				dwCurIP--;
		}
		SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,isStopForce?(LPARAM)"扫描中止":(LPARAM)"扫描完成");
		sprintf(strString,"耗时%d毫秒",GetTickCount()-dwStartTime);
		SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)1,(LPARAM)strString);
		EnableWindow(GetDlgItem(g_hWnd,IDC_SCAN),1);
		EnableWindow(GetDlgItem(g_hWnd,IDC_STOP),0);
	}
	else
	{
		SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,(LPARAM)"没有要进行扫描的端口");
		SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)1,(LPARAM)"Ready");
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
void WINAPI	ScanThread(int intTread)
{
	LV_ITEM				lvi;
	FD_SET				mask;
	u_long				value;
	SOCKET				sockfd;
	TIMEVAL				timeout;
	SOCKADDR_IN			addr;
	int					intCurThread		= intTread;
	int					intINT;
	char				strString[600];
	char				*pPoint1;
	char				*pPoint2;

	sockfd = socket(AF_INET, SOCK_STREAM, 0);
	if(sockfd==INVALID_SOCKET)
		SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,(LPARAM)"无法创建Socket");
	else
	{
		value=1;
		ioctlsocket(sockfd,FIONBIO,&value);
		addr.sin_family	= AF_INET;
		addr.sin_port =	htons(thdINFO[intCurThread].wPort);
		addr.sin_addr.s_addr = ntohl(thdINFO[intCurThread].dwAddr);
		connect(sockfd,(struct sockaddr	*) &addr, sizeof(addr));

		timeout.tv_sec=nTimeOut;
		timeout.tv_usec=0;
		FD_ZERO(&mask);
		FD_SET(sockfd,&mask);
		value=select(sockfd+1,NULL,&mask,NULL,&timeout);

		if(value &&	value!=SOCKET_ERROR)
		{
			ITEMINFO *pItem	= LocalAlloc(LPTR, sizeof(ITEMINFO));
			pItem->dwAddr=thdINFO[intCurThread].dwAddr;
			pItem->wPort=thdINFO[intCurThread].wPort;
			pItem->lpstrBanner=NULL;

			nItemCount++;
			lvi.mask = LVIF_TEXT | LVIF_IMAGE |	LVIF_PARAM;
			lvi.pszText	= LPSTR_TEXTCALLBACK;
			lvi.iItem =	65535;
			lvi.iSubItem = 0;
			lvi.lParam=(LPARAM)pItem;

			switch(pItem->wPort)
			{
				case 21:
					lvi.iImage = 1;
					break;
				case 23:
					lvi.iImage = 2;
					break;
				case 25:
					lvi.iImage = 3;
					break;
				case 79:
					lvi.iImage = 4;
					break;
				case 80:
					lvi.iImage = 5;
					break;
				case 110:
					lvi.iImage = 6;
					break;
				case 135:
					lvi.iImage = 7;
					break;
				case 139:
					lvi.iImage = 8;
					break;
				case 1080:
				case 8080:
					lvi.iImage = 9;
					break;
				case 1433:
					lvi.iImage = 10;
					break;
				case 3389:
					lvi.iImage = 11;
					break;
				default:
					lvi.iImage = 0;
			}

			value=ListView_InsertItem(g_hwndListView, &lvi);
			ListView_EnsureVisible(g_hwndListView,value,TRUE);
			sprintf(strString,"开放端口:%d",nItemCount);
			SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)3,(LPARAM)strString);

			if(isGetBanner && ((thdINFO[intCurThread].wPort==21) || (thdINFO[intCurThread].wPort==23) || (thdINFO[intCurThread].wPort==25) ||	(thdINFO[intCurThread].wPort==79)	|| (thdINFO[intCurThread].wPort==80) || (thdINFO[intCurThread].wPort==110) ))
			{
				pItem->lpstrBanner=	(LPSTR)c_szGetBanner;
				ListView_Update(g_hwndListView,value);

				 if(thdINFO[intCurThread].wPort==80)
					send(sockfd,"GET HEAD HTTP/1.1\n\n",20,0);
				ZeroMemory(strString,sizeof(strString));
				for(intINT=0;intINT<nTimeOut*20;intINT++)
				{
					if(isStopForce)
						break;
					Sleep(100);
					if(recv(sockfd,strString,sizeof(strString),0)>0)
						break;
				}
				if((thdINFO[intCurThread].wPort==80) && (pPoint1=strstr(strString,"Server:")))
				{
					pPoint1+=8;
					if(	(pPoint2=strchr(pPoint1,'\r')) || (pPoint2=strchr(pPoint1,'\n')) )
						*pPoint2='\0';
				}
				else
					pPoint1=strString;

				pPoint2=LocalAlloc(LMEM_FIXED, strlen(pPoint1)+1);
				strcpy(pPoint2,	pPoint1);
				pItem->lpstrBanner=(LPSTR)( ( (isStopForce) ? c_szCancelBanner : pPoint2 ) );
				ListView_Update(g_hwndListView,value);
			}
		}
	}

	nScannedPort++;
	sprintf(strString,"已完成:%d%%", nScannedPort*100/((isUseResultIP ? dwStartIP : (dwEndIP-dwStartIP+1-nSkipHost))*(nPortCount*isUsePortList+(nEndPort-nStartPort+1)*isUsePortRange)));
	SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)1,(LPARAM)strString);

	thdINFO[intCurThread].wPort=0;
	nThreadNum--;
	sprintf(strString,"活动线程:%d",nThreadNum);
	SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)2,(LPARAM)strString);
	closesocket(sockfd);
}
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL WINAPI	SaveResult(char	*strFileName,BOOL isSaveSelected)
{
	if(fpFile=fopen(strFileName,"w"))
	{
		for(i=0;i<nItemCount;i++)
		{
			if(isSaveSelected && (!ListView_GetItemState(g_hwndListView,i,LVIS_SELECTED)))
				continue;
			ListView_GetItemText(g_hwndListView,i,0,strTemp,16);
			fputs(strTemp,fpFile);
			strTemp[0]='\0';
			ListView_GetItemText(g_hwndListView,i,1,strTemp,6);
			if(strTemp[0])
			{
				fputs(":",fpFile);
				fputs(strTemp,fpFile);
				strTemp[0]='\0';
				ListView_GetItemText(g_hwndListView,i,2,strTemp,sizeof(strTemp));
				if(strTemp[0])
				{
					fputs("\t",fpFile);
					for(p=strTemp;*p;p++)
					{
						if(*p=='\n'||*p=='\r')
							*p=' ';
					}
					fputs(strTemp,fpFile);
				}
			}
			fputs("\n",fpFile);
		}
		fclose(fpFile);
		return TRUE;
	}
	return FALSE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL WINAPI	LoadResult(char	*strFileName)
{
	LV_ITEM				lvi;
	char				*pTemp;

	if(fpFile=fopen(strFileName,"r"))
	{
		if(!((GetMenuState(g_hMenu,IDC_KEEPHISTORY,MF_BYCOMMAND) & MF_CHECKED)))
		{
			ListView_DeleteAllItems(g_hwndListView);
			nItemCount=0;
			SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)3,(LPARAM)"开放端口:0");
		}
		while(fgets(strTemp,sizeof(strTemp),fpFile))
		{
			if(	(p=strchr(strTemp,':'))	|| (p=strchr(strTemp,',')) || (p=strchr(strTemp,';')) || (p=strchr(strTemp,'\t')) )
				*(p++)='\0';

			if(inet_addr(strTemp)!=INADDR_NONE)
			{
				ITEMINFO *pItem	= LocalAlloc(LPTR, sizeof(ITEMINFO));
				pItem->dwAddr=ntohl(inet_addr(strTemp));

				if(p)
				{
					pItem->wPort=atoi(p);

					if(	(pTemp=strchr(p,'\t')) || (pTemp=strchr(p,':'))	|| (pTemp=strchr(p,';')) ||	(pTemp=strchr(p,'@')) )
					{
						*(pTemp++)='\0';
						if(	(p=strchr(pTemp,'\n')) || (p=strchr(pTemp,'\r')) )
							*p='\0';

						p=LocalAlloc(LMEM_FIXED, strlen(pTemp)+1);
						strcpy(p,pTemp);
						pItem->lpstrBanner = p;
					}
				}

				nItemCount++;
				lvi.mask = LVIF_TEXT | LVIF_IMAGE |	LVIF_PARAM;
				lvi.pszText	= LPSTR_TEXTCALLBACK;
				lvi.iItem =	65535;
				lvi.iSubItem = 0;
				lvi.lParam=(LPARAM)pItem;

				switch(pItem->wPort)
				{
					case 21:
						lvi.iImage = 1;
						break;
					case 23:
						lvi.iImage = 2;
						break;
					case 25:
						lvi.iImage = 3;
						break;
					case 79:
						lvi.iImage = 4;
						break;
					case 80:
						lvi.iImage = 5;
						break;
					case 110:
						lvi.iImage = 6;
						break;
					case 135:
						lvi.iImage = 7;
						break;
					case 139:
						lvi.iImage = 8;
						break;
					case 1080:
					case 8080:
						lvi.iImage = 9;
						break;
					case 1433:
						lvi.iImage = 10;
						break;
					case 3389:
						lvi.iImage = 11;
						break;
					default:
						lvi.iImage = 0;
				}
				ListView_EnsureVisible(g_hwndListView,ListView_InsertItem(g_hwndListView, &lvi),TRUE);
				sprintf(strTemp,"开放端口:%d",nItemCount);
				SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)3,(LPARAM)strTemp);
			}
		}
		fclose(fpFile);
		return TRUE;
	}
	return FALSE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
void WINAPI	ResolveDomain()
{
	int					intINT;
	char				strString[50];
	HOSTENT				*hstName;

	isStopForce=FALSE;
	nThreadNum=1;
	dwStartIP=GetTickCount();
	EnableWindow(GetDlgItem(g_hWnd,IDC_SCAN),0);
	EnableWindow(GetDlgItem(g_hWnd,IDC_STOP),1);
	SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,(LPARAM)c_szResolve);
	SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)1,(LPARAM)"请等待...");
	SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)2,(LPARAM)"活动线程:1");
	for(intINT=0;intINT<nItemCount;intINT++)
	{
		if(isStopForce)
			break;
		if(ListView_GetItemState(g_hwndListView,intINT,LVIS_SELECTED))
		{
			ListView_EnsureVisible(g_hwndListView,intINT,TRUE);
			ListView_SetItemText(g_hwndListView,intINT,2,(LPSTR)c_szResolve);
			ListView_GetItemText(g_hwndListView,intINT,0,strString,sizeof(strString));
			dwEndIP=inet_addr(strString);
			hstName=gethostbyaddr((char	*)&dwEndIP,4,PF_INET);
			strcpy(strString,hstName ? hstName->h_name : "无法解析域名");
			ListView_SetItemText(g_hwndListView,intINT,2,strString);
		}
	}
	SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,isStopForce?(LPARAM)"解析域名中止":(LPARAM)"解析域名完成");
	sprintf(strString,"耗时%d毫秒",GetTickCount()-dwStartIP);
	SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)1,(LPARAM)strString);
	nThreadNum=0;
	SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)2,(LPARAM)"活动线程:0");
	EnableWindow(GetDlgItem(g_hWnd,IDC_SCAN),1);
	EnableWindow(GetDlgItem(g_hWnd,IDC_STOP),0);
}
////////////////////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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