📄 wnetstatdlg.cpp
字号:
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 + -