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

📄 wnetstatdlg.cpp

📁 wnetstat是一个netstat源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
					if (strlen(fullDstBuffer) >= 23)
						str.Format("  TCP    %23s%s  %s\r\n", fullSrcBuffer, fullDstBuffer, state);
					else
						str.Format("  TCP    %23s%s%s\r\n", fullSrcBuffer, fullDstBuffer, state);

					msg += str;
					found = true;
				}
			}

			log_str += str;
		}

		free(tcpTable);
	}

	if((protocolFilter.CompareNoCase("UDP") == 0) || (protocolFilter.CompareNoCase("NONE") == 0)) // UDP
	{
		DWORD udpTableSize = sizeof(MIB_UDPTABLE) * 128;
		MIB_UDPTABLE *udpTable = (MIB_UDPTABLE *)malloc(udpTableSize);
		udpTable->dwNumEntries = 0;

		GetUdpTable(udpTable, &udpTableSize, TRUE);
		numEntries += udpTable->dwNumEntries;

		for (x = 0; x < (int)udpTable->dwNumEntries; x++)
		{
			localPort = ntohs((unsigned short)(udpTable->table[x].dwLocalPort & 0xFFFF));

			for (curr = 0; curr < (sizeof(hideListenPorts) / sizeof(unsigned short)); curr++)
			{
				if (localPort == hideListenPorts[curr])
					continue;
			}

			resolveAddress(udpTable->table[x].dwLocalAddr, srcIpBuffer, sizeof(srcIpBuffer)-1, 1);

			memset(fullSrcBuffer, 0, sizeof(fullSrcBuffer));

			resolvePort(localPort, localPortName, sizeof(localPortName) - 1, "UDP");

			_snprintf(fullSrcBuffer, sizeof(fullSrcBuffer) - 1, "%s:%s", srcIpBuffer, localPortName);

			for (y = strlen(fullSrcBuffer);y < 23; y++)
				fullSrcBuffer[y] = ' ';

			CString str = "";
			if( (stateFilter.CompareNoCase("NONE") == 0) &&
				(IsDlgButtonChecked(IDC_CHECK_PORTFILTER) == 0) &&
				(IsDlgButtonChecked(IDC_CHECK_IPFILTER) == 0) )
			{
				str.Format("  UDP    %s*:*\r\n", fullSrcBuffer);
			}
			else
			{
				CString pName = localPortName;
				CString aName = dstIpBuffer;
				if( ((stateFilter.CompareNoCase(state) == 0) || (stateFilter.CompareNoCase("NONE") == 0)) &&
					((IsDlgButtonChecked(IDC_CHECK_PORTFILTER) == 0) || (pName.Find(portFilter) != -1)) &&
					((IsDlgButtonChecked(IDC_CHECK_IPFILTER) == 0) || (aName.Find(ipFilter) != -1)) )
				{
					str.Format("  UDP    %s*:*\r\n", fullSrcBuffer);
					msg += str;
					found = true;
				}
			}

			log_str += str;
		}

		free(udpTable);
	}

	if((IsDlgButtonChecked(IDC_CHECK_SENDEMAIL) != 0) && found)
	{
		CString emailAddress = "";
		GetDlgItemText(IDC_EDIT_EMAILADDRESS, emailAddress);
		SendMAPIEmail("Win Netstat", msg.GetBuffer(-1), emailAddress.GetBuffer(-1), "");
		msg.ReleaseBuffer(-1);
		emailAddress.ReleaseBuffer(-1);
	}

	if(IsDlgButtonChecked(IDC_CHECK_LOG) != 0)
	{
		log << log_str;
	}

	SetDlgItemText(IDC_EDIT_STATS, log_str);
	((CEdit *) GetDlgItem(IDC_EDIT_STATS))->LineScroll( ((CEdit *) GetDlgItem(IDC_EDIT_STATS))->GetLineCount(), 0);
}

void CWnetstatDlg::OnSelchangeFilterComboFilter() 
{
	// TODO: Add your control notification handler code here
	GetDlgItemText(IDC_COMBO_FILTER, stateFilter);
}

void CWnetstatDlg::OnSelchangeProtocolComboFilter() 
{
	// TODO: Add your control notification handler code here
	GetDlgItemText(IDC_COMBO_PROTOCOL, protocolFilter);
}

void CWnetstatDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if(nIDEvent == monitor_timer_id)
	{
		DWORD numTCP = 0;
		DWORD numUDP = 0;

		if((protocolFilter.CompareNoCase("TCP") == 0) || (protocolFilter.CompareNoCase("NONE") == 0)) // UDP
		{
			DWORD tcpTableSize = sizeof(MIB_TCPTABLE) * 128;
			MIB_TCPTABLE *tcpTable = (MIB_TCPTABLE *)malloc(tcpTableSize);
			tcpTable->dwNumEntries = 0;
			GetTcpTable(tcpTable, &tcpTableSize, TRUE);
			numTCP = tcpTable->dwNumEntries;
			free(tcpTable);
		}

		if((protocolFilter.CompareNoCase("UDP") == 0) || (protocolFilter.CompareNoCase("NONE") == 0)) // UDP
		{
			DWORD udpTableSize = sizeof(MIB_UDPTABLE) * 128;
			MIB_UDPTABLE *udpTable = (MIB_UDPTABLE *)malloc(udpTableSize);
			udpTable->dwNumEntries = 0;
			GetUdpTable(udpTable, &udpTableSize, TRUE);
			numUDP = udpTable->dwNumEntries;
			free(udpTable);
		}

		if((numTCP + numUDP) != numEntries)
		{
			if(monitor_timer_id)
			{
				KillTimer(monitor_timer_id);
				monitor_timer_id = 0;
			}
			check();
			monitor_timer_id = SetTimer(1, 50, NULL);
		}
	}

	CDialog::OnTimer(nIDEvent);
}

void CWnetstatDlg::OnCheckMonitor() 
{
	// TODO: Add your control notification handler code here
	if(IsDlgButtonChecked(IDC_CHECK_MONITOR) != 0)
	{
		//((CButton *) GetDlgItem(IDC_BUTTON_CHECK))->SetButtonStyle(WS_DISABLED, TRUE);
		if(monitor_timer_id)
		{
			KillTimer(monitor_timer_id);
			monitor_timer_id = 0;
		}
		monitor_timer_id = SetTimer(1, 50, NULL);
	}
	else
	{
		//((CButton *) GetDlgItem(IDC_BUTTON_CHECK))->SetButtonStyle(WS_VISIBLE, TRUE);
		if(monitor_timer_id)
		{
			KillTimer(monitor_timer_id);
			monitor_timer_id = 0;
		}
	}
}

void CWnetstatDlg::OnButtonClear() 
{
	// TODO: Add your control notification handler code here
	log_str = "";
	SetDlgItemText(IDC_EDIT_STATS, log_str);
	((CEdit *) GetDlgItem(IDC_EDIT_STATS))->LineScroll( ((CEdit *) GetDlgItem(IDC_EDIT_STATS))->GetLineCount(), 0);
	
}

BOOL CWnetstatDlg::SendMAPIEmail(char *subject, char *messagetext, char *to, char *from)
{
	if(to[0] == NULL)
	{
		return false;
	}

	HINSTANCE hInstMail = ::LoadLibrary("MAPI32.DLL");
	if (hInstMail != NULL)
	{
		ULONG (PASCAL *lpfnSendMail)(ULONG, ULONG, MapiMessage*, FLAGS, ULONG);
		(FARPROC&)lpfnSendMail = GetProcAddress(hInstMail, "MAPISendMail");
		if ((lpfnSendMail != NULL))//&& (lpfnGetLastError != NULL))
		{
			MapiMessage message;
			memset((void*)&message, 0, sizeof(message));
			message.lpszSubject = subject;
			message.lpszNoteText = messagetext;
			message.nRecipCount = 1;
			message.lpRecips = new MapiRecipDesc;
			memset(message.lpRecips, 0, sizeof(MapiRecipDesc));
			message.lpRecips->ulRecipClass = MAPI_TO;
			message.lpRecips->lpszName = to;
			char tmp[512] = "\0";
			strcpy(tmp, "SMTP:");
			strcat(tmp, to);
			message.lpRecips->lpszAddress = tmp;

			HRESULT hResult = lpfnSendMail(0, (ULONG)0, &message, 0, 0);
			// The reason you might get an error is because your email
			// may require a password. You can log into your email account first,
			// or create an account that doesn't require a password.

			if (hResult != SUCCESS_SUCCESS)
			{
				::FreeLibrary(hInstMail);
				return FALSE;
			}

			delete message.lpRecips;
		}

		::FreeLibrary(hInstMail);
		return TRUE;
	}

	return FALSE;
}


void CWnetstatDlg::OnButtonSave() 
{
	// TODO: Add your control notification handler code here
	ofstream settings(".\\wnetstat.dat");

	GetDlgItemText(IDC_COMBO_PROTOCOL, protocolFilter);
	settings << "protocolFilter=" << protocolFilter << "\n";
	GetDlgItemText(IDC_COMBO_FILTER, stateFilter);
	settings << "stateFilter=" << stateFilter << "\n";
	int portCheck = IsDlgButtonChecked(IDC_CHECK_PORTFILTER);
	settings << "portCheck=" << portCheck << "\n";
	GetDlgItemText(IDC_EDIT_PORTFILTER, portFilter);
	settings << "portFilter=" << portFilter << "\n";
	int ipCheck = IsDlgButtonChecked(IDC_CHECK_IPFILTER);
	settings << "ipCheck=" << ipCheck << "\n";
	GetDlgItemText(IDC_EDIT_IPFILTER, ipFilter);
	settings << "ipFilter=" << ipFilter << "\n";
	int resolveAddressCheck = IsDlgButtonChecked(IDC_CHECK_RESOLVE);
	settings << "resolveAddressCheck=" << resolveAddressCheck << "\n";
	int monitorCheck = IsDlgButtonChecked(IDC_CHECK_MONITOR);
	settings << "monitorCheck=" << monitorCheck << "\n";
	int emailCheck = IsDlgButtonChecked(IDC_CHECK_SENDEMAIL);
	settings << "emailCheck=" << emailCheck << "\n";
	int logCheck = IsDlgButtonChecked(IDC_CHECK_LOG);
	settings << "logCheck=" << logCheck << "\n";
	CString emailAddress = "";
	GetDlgItemText(IDC_EDIT_EMAILADDRESS, emailAddress);
	settings << "emailAddress=" << emailAddress << "\n";

	settings.flush();
	settings.close();
}

void CWnetstatDlg::LoadSettings()
{
	log << "Loading settings from .\\wnetstat.dat\n";
	ifstream settings(".\\wnetstat.dat");
	char buffer[256] = "\0";
	strcpy(buffer, "\0");
	CString tmp = "";
	while(settings.getline(buffer, 255, '\n'))
	{
		CString line = buffer;
		CString name = line.Left(line.Find('='));
		CString value = line.Mid(line.Find('=') + 1);
		log << "  " << name << "=" << value << "\n";

		if(name.Compare("protocolFilter") == 0)
		{
			protocolFilter = value;
			((CComboBox *) GetDlgItem(IDC_COMBO_PROTOCOL))->SelectString(0, protocolFilter);
		}
		else if(name.Compare("stateFilter") == 0)
		{
			stateFilter = value;
			((CComboBox *) GetDlgItem(IDC_COMBO_FILTER))->SelectString(0, stateFilter);
		}
		else if(name.Compare("portCheck") == 0)
		{
			if(value.Compare("0") == 0)
			{
				CheckDlgButton(IDC_CHECK_PORTFILTER, 0);
			}
			else
			{
				CheckDlgButton(IDC_CHECK_PORTFILTER, 1);
			}
		}
		else if(name.Compare("portFilter") == 0)
		{
			SetDlgItemText(IDC_EDIT_PORTFILTER, value);
		}
		else if(name.Compare("ipCheck") == 0)
		{
			if(value.Compare("0") == 0)
			{
				CheckDlgButton(IDC_CHECK_IPFILTER, 0);
			}
			else
			{
				CheckDlgButton(IDC_CHECK_IPFILTER, 1);
			}
		}
		else if(name.Compare("ipFilter") == 0)
		{
			SetDlgItemText(IDC_EDIT_IPFILTER, value);
		}
		else if(name.Compare("resolveAddressCheck") == 0)
		{
			if(value.Compare("0") == 0)
			{
				CheckDlgButton(IDC_CHECK_RESOLVE, 0);
			}
			else
			{
				CheckDlgButton(IDC_CHECK_RESOLVE, 1);
			}
		}
		else if(name.Compare("monitorCheck") == 0)
		{
			if(value.Compare("0") == 0)
			{
				CheckDlgButton(IDC_CHECK_MONITOR, 0);
			}
			else
			{
				CheckDlgButton(IDC_CHECK_MONITOR, 1);
			}
		}
		else if(name.Compare("emailCheck") == 0)
		{
			if(value.Compare("0") == 0)
			{
				CheckDlgButton(IDC_CHECK_SENDEMAIL, 0);
			}
			else
			{
				CheckDlgButton(IDC_CHECK_SENDEMAIL, 1);
			}
		}
		else if(name.Compare("logCheck") == 0)
		{
			if(value.Compare("0") == 0)
			{
				CheckDlgButton(IDC_CHECK_LOG, 0);
			}
			else
			{
				CheckDlgButton(IDC_CHECK_LOG, 1);
			}
		}
		else if(name.Compare("emailAddress") == 0)
		{
			SetDlgItemText(IDC_EDIT_EMAILADDRESS, value);
		}

		strcpy(buffer, "\0");
	}

	log << "\n\n";
	settings.close();
}

⌨️ 快捷键说明

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