计算机网络课程设计 端口扫描 实验报告.doc
文本预览下载声明
目 录
1 需求分析 3
1.1 课程设计目的 3
1.2 课程设计内容 3
1.3 课程设计要求 3
2 概要设计 3
2.1 原理概述 3
2.2 运行环境 3
2.3 基本设计思路 3
2.4 功能模块设计 3
3 详细设计 3
3.1 程序流程 3
3.2 主要算法 5
3.3 主要数据结构 6
3.4 主要函数说明 6
4 用户使用手册 7
5 项目分析与总结 7
5.1 项目分析 7
5.2 总结与建议 8
附录A 源程序代码文件说明 8
附录B 参考文献 20
需求分析
1.1 课程设计目的
加深对TCP/IP的理解,熟悉socket编程。
课程设计内容
实现一个扫描器,使用TCP connect进行端口扫描,并把扫描到的结果记录下来。
课程设计要求
Windows或Linux环境下,程序在单机上运行;
使用端口扫描对一台主机进行扫描,并显示出结果;对一个网段进行IP扫描,显示出结果;
提供友好的用户界面。
概要设计
2.1 原理概述
TCP connect扫描是最基本的扫描,操作系统提供的connect()系统调用,用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能成功。否则,这个端口是不能用的,即没有提供服务。
2.2 运行环境
Windows xp,VC++6.0
2.3 基本设计思路
创建一个CSocket套接字,通过CSocket的Connect函数测试该主机的某个端口是否能够连通,获得该端口的打开状态。
2.4 功能模块设计
(1)测试主机某个端口是否打开;
(2)BOOL CMyDlg::TestConnection(CString IP,UINT nPort)
{ CSocket* pSocket;
pSocket=new CSocket;
ASSERT(pSocket);
if (!pSocket-Create())
{ delete pSocket;
pSocket=NULL;
return false;
}
while (!pSocket-Connect(IP,nPort))
{ delete pSocket;
pSocket=NULL;
return false;
}
pSocket-Close();
delete pSocket;
return true;
}
(2)响应单选按钮“扫描单个端口”和“扫描多个端口”的单击消息:
void CMyDlg::OnRadio1Single()
{ m_bSinglePort=true;
m_cSinglePort.EnableWindow();
m_cPortFrom.EnableWindow(false);
m_cPortTo.EnableWindow(false);
m_cBtnStop.EnableWindow(false);
}
void CMyDlg::OnRadio2Range()
{ m_bSinglePort=false;
m_cSinglePort.EnableWindow(false);
m_cPortFrom.EnableWindow();
m_cPortTo.EnableWindow();
m_cBtnStop.EnableWindow(false);
}
(3)显示列表框标题栏的成员函数:
//增加列表框标题栏的某一列
BOOL CMyDlg::AddColumn(LPCTSTR strItem,int nItem,int nSubItem,int nMask,int nFmt)
{ LV_COLUMN lvc;
lvc.mask=nMask;
lvc.fmt=nFmt;
lvc.pszText=(LPTSTR) strItem;
lvc.cx=m_cResult.GetStringWidth(lvc.pszText)+25;
if(nMaskLVCF_SUBITEM)
{ if(nSubItem!=-1)
lvc.iSubItem=nSubItem;
else
lvc.iSubItem=nItem;
}
return m_cResult.InsertColumn(nItem,lvc);
}
//在列表框中加一条
BOOL CMyDlg::AddItem(int nItem,int nSubItem,LPCTSTR strItem ,int nImageIndex)
{ LV_ITEM lvItem;
lvItem.mask=LVIF_TEXT;
lvItem.iItem=nItem;
lvItem.iSubItem=nSubItem;
显示全部