计算机网络课程设计++端口扫描++实验报告材料

  • 格式:doc
  • 大小:160.84 KB
  • 文档页数:37

下载文档原格式

  / 37
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关主题