计算机网络课程设计++端口扫描++实验报告材料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
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.1 课程设计目的
加深对TCP/IP的理解,熟悉socket编程。
课程设计容
实现一个扫描器,使用TCP connect进行端口扫描,并把扫描到的结果记录下来。
课程设计要求
(1)Windows或Linux环境下,程序在单机上运行;
(2)使用端口扫描对一台主机进行扫描,并显示出结果;对一个网段进行IP扫描,显示出结果;
(3)提供友好的用户界面。
2.概要设计
2.1 原理概述
TCP connect扫描是最基本的扫描,操作系统提供的connect()系统调用,用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能成功。否则,这个端口是不能用的,即没有提供服务。
2.2 运行环境
Windows xp,VC++6.0
2.3 基本设计思路
创建一个CSocket套接字,通过CSocket的Connect函数测试该主机的某个端口是否能够连通,获得该端口的打开状态。
2.4 功能模块设计
(1)测试主机某个端口是否打开;
(2)“扫描结果”标题栏;
(3)扫描单个或多个端口的单选按钮;
(4)“扫描”,“停止”,“保存”按钮。
3.详细设计
3.1 程序流程
3.2 主要算法
(1)测试主机某个端口是否打开的函数TestConnection():
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(nMask&LVCF_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;
lvItem.pszText=(LPTSTR)strItem;
if(nImageIndex!=-1)
{ lvItem.mask|=LVIF_IMAGE;
lvItem.iImage|=LVIF_IMAGE;
}
if(nSubItem==0)
return m_cResult.InsertItem(&lvItem);