计算机网络课程设计报告端口扫描实验报告.docx

上传人:b****2 文档编号:386671 上传时间:2022-10-09 格式:DOCX 页数:25 大小:89.77KB
下载 相关 举报
计算机网络课程设计报告端口扫描实验报告.docx_第1页
第1页 / 共25页
计算机网络课程设计报告端口扫描实验报告.docx_第2页
第2页 / 共25页
计算机网络课程设计报告端口扫描实验报告.docx_第3页
第3页 / 共25页
计算机网络课程设计报告端口扫描实验报告.docx_第4页
第4页 / 共25页
计算机网络课程设计报告端口扫描实验报告.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

计算机网络课程设计报告端口扫描实验报告.docx

《计算机网络课程设计报告端口扫描实验报告.docx》由会员分享,可在线阅读,更多相关《计算机网络课程设计报告端口扫描实验报告.docx(25页珍藏版)》请在冰豆网上搜索。

计算机网络课程设计报告端口扫描实验报告.docx

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

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编程。

课程设计容

实现一个扫描器,使用TCPconnect进行端口扫描,并把扫描到的结果记录下来。

课程设计要求

(1)Windows或Linux环境下,程序在单机上运行;

(2)使用端口扫描对一台主机进行扫描,并显示出结果;对一个网段进行IP扫描,显示出结果;

(3)提供友好的用户界面。

2.概要设计

2.1原理概述

TCPconnect扫描是最基本的扫描,操作系统提供的connect()系统调用,用来与每一个感兴趣的目标计算机的端口进行连接。

如果端口处于侦听状态,那么connect()就能成功。

否则,这个端口是不能用的,即没有提供服务。

2.2运行环境

Windowsxp,VC++6.0

2.3基本设计思路

创建一个CSocket套接字,通过CSocket的Connect函数测试该主机的某个端口是否能够连通,获得该端口的打开状态。

2.4功能模块设计

(1)测试主机某个端口是否打开;

(2)“扫描结果”标题栏;

(3)扫描单个或多个端口的单选按钮;

(4)“扫描”,“停止”,“保存”按钮。

3.详细设计

3.1程序流程

 

3.2主要算法

(1)测试主机某个端口是否打开的函数TestConnection():

BOOLCMyDlg:

:

TestConnection(CStringIP,UINTnPort)

{CSocket*pSocket;

pSocket=newCSocket;

ASSERT(pSocket);

if(!

pSocket->Create())

{deletepSocket;

pSocket=NULL;

returnfalse;

}

while(!

pSocket->Connect(IP,nPort))

{deletepSocket;

pSocket=NULL;

returnfalse;

}

pSocket->Close();

deletepSocket;

returntrue;

}

(2)响应单选按钮“扫描单个端口”和“扫描多个端口”的单击消息:

voidCMyDlg:

:

OnRadio1Single()

{m_bSinglePort=true;

m_cSinglePort.EnableWindow();

m_cPortFrom.EnableWindow(false);

m_cPortTo.EnableWindow(false);

m_cBtnStop.EnableWindow(false);

}

voidCMyDlg:

:

OnRadio2Range()

{m_bSinglePort=false;

m_cSinglePort.EnableWindow(false);

m_cPortFrom.EnableWindow();

m_cPortTo.EnableWindow();

m_cBtnStop.EnableWindow(false);

}

(3)显示列表框标题栏的成员函数:

//增加列表框标题栏的某一列

BOOLCMyDlg:

:

AddColumn(LPCTSTRstrItem,intnItem,intnSubItem,intnMask,intnFmt)

{LV_COLUMNlvc;

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;

}

returnm_cResult.InsertColumn(nItem,&lvc);

}

//在列表框中加一条

BOOLCMyDlg:

:

AddItem(intnItem,intnSubItem,LPCTSTRstrItem,intnImageIndex)

{LV_ITEMlvItem;

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)

returnm_cResult.InsertItem(&lvItem);

returnm_cResult.SetItem(&lvItem);

}

//加一列标题栏字符

voidCMyDlg:

:

AddHeader(LPTSTRhdr)

{if(m_pColumns)

m_pColumns->AddTail(hdr);

}

//显示列表框标题栏

voidCMyDlg:

:

ShowHeaders()

{intnIndex=0;

POSITIONpos=m_pColumns->GetHeadPosition();

while(pos)

{CStringhdr=(CString)m_pColumns->GetNext(pos);

AddColumn(hdr,nIndex++);

}

}

(4)“扫描”,“停止”,“保存”按钮,见附录程序。

3.3主要数据结构及主要函数说明

(1)测试主机某个端口是否打开——TestConnection函数;

(2)“扫描结果”标题栏成员函数——AddHeader,AddColumn,ShowHeaders;在列表框中添加字符串的函数——AddItem;

(3)扫描单个或多个端口的单选按钮——OnRadioSingle()和OnRadioRange();

(4)“扫描”,“停止”,“保存”按钮——OnButton1Start(),OnButton2Stop(),OnButton3Save();

4.用户使用手册

输入要扫描的主机IP地址,选择“扫描单个端口”或“扫描多个端口”,若选择前者,则输入单个端口号;若选择后者,则输入端口围。

再输入扫描次数(默认值为1),单击“扫描”按钮,扫描结果列表框中将会显示所输入端口的扫描结果。

单击“停止”时停在那一刻的状态,并显示已扫描的结果。

单击“保存”时,可将结果保存在文本文件中。

5.项目分析与总结

5.1项目分析

扫描单个端口的结果:

扫描多个端口:

通过观察,主机IP为10.5.104.36的25号端口是打开的。

5.2总结与建议

通过这次实验,加深了对端口的理解,也对socket编程有了进一步的认识。

实验中遇到许多函数和定义需要上网查阅资料,而且调试的过程也比较困难,需要向同学请教。

所以,今后在编程和查阅资料方面的能力有待于进一步去提高。

附录A

源程序代码文件说明:

(1)端口扫描Dlg.h:

#if!

defined(AFX_DLG_H__37F5060C_6D8B_42F0_90D9_FBA754BAD52B__INCLUDED_)

#defineAFX_DLG_H__37F5060C_6D8B_42F0_90D9_FBA754BAD52B__INCLUDED_

#if_MSC_VER>1000

#pragmaonce

#endif//_MSC_VER>1000

#include

#include

#include

#include

#include

//扫描结果

typedefstruct

{intnAttempts;

TCHARIPAddress[16];

TCHARport[5];

BOOLbStatus;//1=open,0=close

}DATA;

/////////////////////////////////////////////////////////////////////////////

//CMyDlgdialog

classCMyDlg:

publicCDialog

{//Construction

public:

CMyDlg(CWnd*pParent=NULL);//standardconstructor

//DialogData

//{{AFX_DATA(CMyDlg)

enum{IDD=IDD_MY_DIALOG};

CProgressCtrlm_cProgress;

CListCtrlm_cResult;

CIPAddressCtrlm_cIP;

CEditm_cAttempts;

CEditm_cPortTo;

CEditm_cPortFrom;

CEditm_cSinglePort;

CButtonm_cBtnStop;

CButtonm_cBtnScan;

//}}AFX_DATA

//ClassWizardgeneratedvirtualfunctionoverrides

//{{AFX_VIRTUAL(CMyDlg)

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport

//}}AFX_VIRTUAL

//Implementation

protected:

HICONm_hIcon;

BOOLTestConnection(CStringIP,UINTnPort);//测试主机某个端口是否打开

voidShowHeaders(void);//显示列表框标题栏

voidAddHeader(LPTSTRhdr);//增加一列标题栏字符

AddItem(intnItem,intnSubItem,LPCTSTRstrItem,intnImageIndex=-1);//向m_cResult输出一个结果

//向输出结构列表控件增加一列

BOOLAddColumn(LPCTSTRstrItem,intnItem,intnSubItem=-1,

intnMask=LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM,

intnFmt=LVCFMT_LEFT);

//变量

UINTm_nMaxAttempts;//试图连接次数的最

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 表格类模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1