MFC编写一个简单的端口扫描器

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、小结

弄完上述的内容后,基本上就算是全部搞完了。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值