MFC简单端口扫描器制作 IDE:VS2022
1、创建项目
使用MFC项目,选择基于对话框,在“高级功能”中将Windows 套接字勾选,点击完成。
2、拖组件
组件基本上没有啥需要注意的,就是按钮、静态文本、编辑框,唯一需要注意的一个就是IP地址的输入框,是一个特殊的IP address control的组件。
3、创建按钮的响应函数
直接双击按钮即可。
创建好的响应函数是在xxxDlg.cpp文件中的。
4、在响应函数中增加处理代码
代码如下:
void CPortScanTool2Dlg::OnClickedStartscan()
{
// TODO: 在此添加控件通知处理程序代码
//禁用按钮,在按钮按下之后
m_startBtn.EnableWindow(FALSE);
//获取要扫描的IP地址
unsigned char* pIP;
CString strIP;
DWORD dwIP;
m_ipAddress.GetAddress(dwIP);
pIP = (unsigned char*)&dwIP;
strIP.Format(_T("%u.%u.%u.%u"), *(pIP + 3), *(pIP + 2), *(pIP + 1), *pIP);
//获取扫描的端口范围
CString startPort, endPort;
m_startPort.GetWindowTextW(startPort);
m_endPort.GetWindowTextW(endPort);
//显示字符串的buffer
CString showStr;
//扫描用时
CTime starttime, endtime;
starttime = CTime::GetCurrentTime();
for (UINT wCurrentPort = _ttoi(startPort); wCurrentPort <= _ttoi(endPort); wCurrentPort++)
{
showStr.Format(_T("%d"), wCurrentPort);
m_currentPort.SetWindowTextW(showStr);
/*m_showResult.*/
if (TestConnection(strIP, wCurrentPort))
{
showStr.Format(_T("%d 端口开启\r\n"), wCurrentPort);
m_showResult.ReplaceSel(showStr);
}
//时间计算
endtime = CTime::GetCurrentTime();
CTimeSpan t = endtime - starttime;
showStr.Format(L"%02d:%02d:%02d", t.GetHours(), t.GetMinutes(), t.GetSeconds());
m_showTime.SetWindowTextW(showStr);
//m_BtnScan.EnableWindow(TRUE);
}
//启用按钮
m_startBtn.EnableWindow(TRUE);
return;
}
5、检测链接的函数代码
在按钮响应代码中有一个检测链接的函数是百度来的,代码如下:
//测试链接的函数
BOOL TestConnection(LPCTSTR lpstrAddress, UINT nPort)
{
CSocket* pSocket;
pSocket = new CSocket;
ASSERT(pSocket);
if (!pSocket->Create())
{
delete pSocket;
pSocket = NULL;
return FALSE;
}
while (!pSocket->Connect(lpstrAddress, nPort))
{
delete pSocket;
pSocket = NULL;
return FALSE;
}
pSocket->Close();
delete pSocket;
return TRUE;
}
6、各个控件变量
每个需要操作的控件都创建一个控件的变量。
如上图就算是创建完的变量了。
7、小结
弄完上述的内容后,基本上就算是全部搞完了。