计算机网络实验课项目指导书.docx
- 文档编号:2399227
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:31
- 大小:87.16KB
计算机网络实验课项目指导书.docx
《计算机网络实验课项目指导书.docx》由会员分享,可在线阅读,更多相关《计算机网络实验课项目指导书.docx(31页珍藏版)》请在冰点文库上搜索。
计算机网络实验课项目指导书
计算机网络实验课
项目指导书
项目1:
网络流量的分析
目的
加深对SNMP协议的理解。
任务
通过SNMP协议,实现对于网络流量的分析。
要求
1.WindowsNT(或以上)环境下运行,程序应在1台PC上运行,应在以太网环境下运行。
2.功能:
1)对于收到、发出的TCP、UDP、IP包统计个数;
2)导入整个MIB库到程序中。
3)自己构造SNMP包,实现用户界面来扩充MIB。
4)运行比较长的一段时间,能够比较流量变化。
3.以上几个功能应可视。
要求界面。
提交
4.提交所有源代码。
并可编译执行;
5.文档:
文档应包括原理概述,程序详细设计说明及收获建议部分,其中详细说明应包括程序流程,主要数据结构及主要函数说明。
并需附上程序代码文件说明,既各个代码文件的用途。
例:
(在VC环境下)文件link.h,用于描述联路结构。
评分
6.最高分:
A+
7.原代码是否可运行;
8.文档是否完备,清晰;
9.文档与程序代码是否一致;
10.程序容错性,健壮性;
参考:
11.支持SNMP协议的操作系统;
12.查找Windows的API函数(提示:
SNMP部分),找出相应的函数及所需配置;
13.经过一定的时间间隔(例如:
1sec),更新显示内容;
14.思考比较用socket的函数(可以是在linux或者unix下使用的socket)分析包的方法得到的数据和用SNMP方法得到数据的不同之处。
同时,在程序开发中应该注意系统的配置。
部分同学程序运行不通过可能是系统配置的问题,具体情查看WindowsNT或者Win2000的相关技术书籍资料;
15.snmp.rar是一些现有的工具和源代码。
有兴趣的同学可以参考,更多的文献资料可以在网上查找。
项目2:
简单的个人网络嗅探器(Sniffer)
目的
加深对TCP/IP协议的理解
任务:
16.实现Sniffer的基本功能。
Sniffer是一种用于监测网络性能、使用情况的工具。
17.能够指定需要侦听的网卡(考虑一台机器上多张网卡的情况)
18.能够侦听所有进出本主机的数据包,解析显示数据包(ICMP、IP、TCP、UDP等)各个字段。
比如,对IP头而言,需要显示版本、头长度、服务类型、数据包长度、标识、DF/MF标志、段内偏移、生存期、协议类型、源目的IP地址、选项内容、数据内容。
要求显示数据的实际含义(例如用ASCII表示);
19.能够侦听来源于指定IP地址的数据包,能够侦听指定目的IP地址的数据包,显示接收到的TCP和UDP数据包的全部实际内容。
需要考虑一个TCP或UDP包划分为多个IP包传输的情况;
20.能够根据指定的协议类型来过虑包,例如,只侦听ICMP包,或只侦听ICMP和UDP包。
21.功能验证手段:
在运行Sniffer的同时,执行标准的Ping、Telnet和浏览网页等操作,检查Sniffier能否返回预期的结果。
22.数据包保存:
可以保存选中的包,保存文件要有可读性。
23.文件重组:
一个文件在传输过程中,被分成若干个TCP包传送,如果抓到经过本机的该文件的所有TCP包,将这些包重组还原出该文件。
24.查询功能:
例如查询内容中包含”password”的包,并集中显示。
要求:
25.Windows平台上可以用winpcap类库;在linux平台上可以使用libpcap类库。
也可以调用Sockets等有关的网络类库。
提交:
26.演示Sniffer的功能(用户界面友好)。
27.程序源代码;
28.项目设计报告
评分:
29.最高分A+。
相同实现,linux平台上可以加分。
30.符合要求:
70%
31.源程序可读性:
10%
32.项目报告:
20%。
项目报告至少应包含:
4)系统概述:
运行环境、编译、使用方法、实现环境、程序文件列表等;
5)主要数据结构;
6)主要算法描述;
7)遇到的问题及解决方法;
8)体会与建议。
参考:
1.数据字段的具体含义,需要查阅TCP/IP协议方面的书籍或相关RFC。
2.可以参照实现成熟的sniffer产品的功能,扩充本实验的功能。
项目3:
简单的Linux包过滤防火墙设计
目的:
加深对TCP/IP协议的理解,初步掌握包过滤技术的基本原理和开发技术。
熟悉在Linux环境下的程序设计。
任务:
本实验要求实现一个简单的包过滤防火墙能,能够根据IP地址范围阻塞或允许客户机对FTP服务的访问。
要求
33.在Linux环境下运行,程序应在单机上运行。
34.演示:
根据设定的IP访问规则,能够阻塞客户机对FTP的访问。
提交:
35.程序源代码;
36.项目设计报告。
评分:
37.最高分:
A+
38.符合要求:
70%
39.源程序可读性:
10%
40.项目报告:
20%。
项目报告至少应包含:
9)系统概述:
运行环境、编译、使用方法、实现环境、程序文件列表等。
10)主要数据结构:
11)主要算法描述:
12)遇到的问题及解决方法;
13)体会与建议;
参考:
基本实现原理:
Linux的内核可以自动调用用户编写的防火墙程序,并根据这个防火墙程序返回的结果来决定对网络收发数据报的处理策略。
前提条件就是用户必须正确地将自己编写的防火墙程序登记到内核中。
内核中提供了防火墙的登记和卸载函数,如果是kernel2.4之前的版本,它们分别是register_firewall和unregister_firewall,参见firewall.c。
如果是kernel2.4之后的版本,则是/net/core/netfilter.c中的nf_register_hook函数。
防火墙的信息流程如下图:
N
N
N
N
项目4:
简单Proxy的实现
目的:
熟悉MAC层帧格式,ARP、IP、TCP、UDP协议报文的格式;ARP协议的工作细节;NAT的具体实现。
任务:
实现代理网关Proxy的功能及NAT的功能。
要求:
41.使用C或C++,在Microsoft(9x/NT/2000/XP/2003之一或全部)上实现,或者在Linux平台上实现。
42.在Windows平台上可使用WinPCAP,或者使用Windows系统提供NDIS函数库。
在Linux平台上可使用libpcap库提供的函数,进行数据链路层的数据收发。
43.主机连接方式:
局域网中,一台计算机拥有两块网卡,配有两个IP地址,一个是全局的外部IP地址(如202.120.15.9)连接Internet,另一个是内部IP地址(如192.168.16.1/24),该计算机称为“主机”,实现代理网关的功能(并保留它直接访问Internet的功能)。
其他计算机只能使用内部IP地址(比如192.168.16.X/24),称为“从机”,从机以某种方式连接到主机上,并通过主机的Proxy访问Internet。
主机和从机的物理连接方式不限,多台从机可以通过HUB与主机连接,单台从机也可以直接与主机连接,不论哪种方式,逻辑上从机都将通过主机访问Internet。
44.IP包转发的实现方式
14)如主、从机之间通过HUB连接,当主机收到内部从机的IP包时,主机将判断其目的地址是否内部从机,如是内部从机,则不作任何处理;
15)当主机收到内部从机的IP包,其目的地址是外部网络,则必须对其作NAT,如果边界路由器对主机的IP地址和MAC地址作了捆绑,则除了做NAT之外,还要做MAC地址的转换,此时,应该考虑的问题可能更多;
45.响应外部网络用户主动的连接请求,如某内部主机开了ftp服务,通过端口映射,外网也应能够请求ftp服务。
(选做)
提交:
46.演示:
以上述多台从机或单台从机的运行环境均可,单主机运行Proxy程序前,从机不能访问Internet,而在主机运行了Proxy程序之后,从机能访问Internet。
对于传输层为UDP和TCP服务的应用,分别演示一种应用层协议。
47.程序源代码;
48.项目设计报告。
评分:
49.完成上述全部要求,最高分为A+,要求5没有完成,则最高分为A
50.符合要求:
70%
51.源程序可读性:
10%
52.项目报告:
20%。
项目报告至少应包含:
16)系统概述:
运行环境、编译、使用方法、实现环境、程序文件列表等;
17)主要数据结构;
18)主要算法描述;
19)遇到的问题及解决方法;
20)体会与建议。
提示:
winpcap、libpcap、NDIS这三种库都可以完成这个项目,但各自有特点。
建议熟悉一种类库的特点,分析在使用中可能会要用到的工具或软件,当出现问题的时候,能够有恰当的解决方案。
项目5:
使用网络仿真工具NS探索无线网络
目的:
了解、熟悉网络仿真工具NS(NetworkSimulator)。
任务:
在linux平台上安装NS,并且能够调试运行tcl脚本。
要求:
1.在linux平台上安装NS比较新的版本(比如2.26,2.27),能够成功运行NS中自带的测试脚本。
2.选取无线网络中一种(比如:
bluetooth、WLAN、AdHoc),设计场景,运行一定的TCP或UDP业务源,用nam进行演示。
3.在2的基础上,分析trace文件,测定网络的性能(比如:
吞吐量、时延、丢包率等,任选择一个),用图表的方式(可以用linux下的xgraph或gnuplot,或者matlab)说明测定结果。
提交:
1.用nam演示,说明脚本中参数含义。
2.tcl脚本代码。
3.设计文档。
评分:
完成要求1,得分为B+。
完成要求1和2,得分为A。
全部完成为A+。
如果有创新,可以在每个档次上适当加分。
提示:
NS(NetworkSimulator)是一种软件,用计算机程序对通信网络进行模型化,通过程序的运行模仿通信网络的运行过程。
仿真的方法非常适合缺乏条件,或者不允许实际实验的科学研究中。
研究人员可以利用有限的资源,实现无限的梦想。
参考资料:
1《NS与网络模拟》人民邮电出版社
2NS主页:
http:
//www.isi.edu/nsnam/ns/
3NS的maillist:
http:
//mailman.isi.edu/pipermail/ns-users/
4国内的论坛:
建议:
实际使用NS会碰到很多问题,不妨使用google搜索一下,也许会有结果。
项目6:
简单的WebServer
目的
熟悉Http,熟悉Socket编程,熟悉RFC2068
任务
实现一个WebServer,能够响应客户端的请求将指定目录下的HTML或text文件通过指定的TCP端口发送给客户端,一些文件受password保护因此需要实现HTTPclear-textpasswordprotocol
要求
53.Server启动时可指定端口缺省为8000
54.可指定Webrootdirectory
55.可指定passwordfile的路径
56.口令保护你的server需要实现HTTPWWW-Authenticate:
/Authorization"BasicAuthenticationScheme"describedintwopartsofRFC2068简单的说如果server收到一个文件请求该文件受口令保护并且该请求包含正确的认证信息Server将发送文件否则返回出错信息
57.passwordfile包含多行每行包含一个相对路径名相对于webrootdirectory后跟用户名口令中间由一个或多个space或tab分隔用户名和口令为plain-textstringsi.e.notbase-64
58.e.g./robots.htmlSusan_Calvin3laws
59./robots.htmlKarel_CapekR.U.R.
60.Server应能够并发处理多个请求可只处理GET和HEAD命令欢迎增强你的Server的功能如支持POST,Delete以及OPTIONCGI-form/ISINDEXvariantsofGET评分时将予考虑(A+)
61.请同时书写必要的客户端测试程序用于发送HTTP请求并显示返回结果也可使用一般的浏览器测试
62.使用C或C++在MicrosoftWindows平台实现,要求使用图形界面实现整个server的模拟。
63.不能使用已有的处理HTTPHTML或MIME的库windowssockets调用不能使用已有的类库如MFC
评分
64.最高分A-
65.程序能正确运行60%注意Server应能处理各种不合法的请求并返回正确的错误提示
66.项目报告30%至少包含如下内容
21)系统概述运行环境编译使用方法实现环境程序文件列表等
22)主要数据结构
23)主要算法
24)遇到的问题及解决方法
25)体会与建议
67.可正确编译的可读性好的源代码10%
项目7:
滑动窗口协议的模拟
目的:
加深对滑动窗口协议的理解。
任务:
实现对于滑动窗口协议的模拟(协议六—选择性重发)。
要求:
68.Windows环境下运行,程序应在1-2台PC上运行;
69.演示在两台计算机间传输文件。
允许在同一台机器中用两个独立线程来模拟
70.功能:
26)由一台PC(线程)向另一台PC(线程)发送数据包,界面应显示出双方帧个数变化,帧序号,发送和接受速度,暂停或重传提示等,界面中必须动态显示数据帧的发送情况和接受情况,包括在相应窗口详细显示相应的ACK和其他收发数据帧后发出的消息,以表明模拟协议的正确运作过程。
27)接收方及发送方应具有按序收发帧的能力;
28)接受方应有固定大小的滑动窗口,并对收到信息缓存。
当发送方速度过快或帧丢失(超时),接受方应发送消息,要求暂停或重传(停--等协议);
29)发送方发送速度应可以调节,并可以暂停或重发;
30)发送方重传时可仅重传需要的(丢失的)幀;
71.以上几个功能应可视,要求简单界面。
提交:
72.所有程序源代码,并可编译执行;
73.文档:
文档应包括原理概述,程序详细设计说明及收获建议部分,其中详细说明应包括程序流程,主要数据结构及主要函数说明。
并需附上程序代码文件说明,既各个代码文件的用途。
例:
(在VC环境下)文件LINK.H,用于描述链路结构。
74.项目设计报告
评分:
75.最高分:
A
76.原代码是否可运行;
77.文档是否完备,清晰;
78.文档与程序代码是否一致;
79.程序容错性,健壮性;
参考:
80.关于滑动窗口,请阅读网络教材(实现协议6—选择性重发);
81.运行时启动两个线程client和server。
其中sever初始应该为监听状态;
82.可指定滑动窗口数目m(m=2n,n为大于1的整数)和要发送的帧总数,停等的超时时间间隔以及发送类型(正常发送,即没有缺帧和错序发送帧的现象),发送速率等参数;
83.client向server发起连接,成功则转入5;
84.client端发出帧,帧的内容可同序号或者为“111”“222”…“aaa”“bbb”…或者是一段文章中的部分内容;
85.选择发送类型为“缺帧”,模拟因网络拥塞造成丢帧的情况,开始发送情况同“正常发送”的情况。
不同的是在帧x发送前用户可以选择丢失,则客户端继续接收帧x+1,x+2…并且对帧x+1,x+2…发出确认并缓存该帧;
86.服务器端等待一段相当长的时间(超时),重发帧x;
87.选择发送类型为“错序发送”。
将一组待发送的帧按照指定(错序)顺序发送。
具体实现同“缺帧”情况;
88.以上各种情况下,client和server窗口中应实时显示帧的发送和接受情况,包括序号,到达时间,内容等。
以及窗口的填充和清空情况;
89.使用socket编程;
90.本实验要求实现的是一个简化了许多的滑动窗口协议。
对于所有包,在生成序列号后进行发送。
接收方为每个包设定一个定时器,记录包的到达情况。
如发送方发送速度过快,或某包定时器超时,则发送方应重发。
接受方窗口满时,接受到的包应被拷贝至硬盘(以下部分可以自由设计,仅做参考)。
91.主要的数据结构:
31)包:
classpacket{
protect:
intnum;//数据包的序号
cstringcontent;//数据包内容
……
//method
……
}
32)消息:
classmessage{
protect:
intno;//消息的序号
cstringcontent;//消息内容
intid;//消息的方向
//method
……
}
33)
程序主要流程
方法:
voidcreate_windows();//模拟滑动窗口协议中发送,接受窗口
voidcreate_packet();//模拟滑动窗口协议中包
boolcreate_timer();//模拟滑动窗口协议中的定时器
intwaitfornext();//等待下一个包
voidresend();//重发
voidreceive();//数据包到达,接受数据包
voidwrite();//数据包全部到达,写入硬盘
注:
本实验主要目的是为了加深同学们对于滑动窗口协议的了解,而不是底层的网络编程。
所以在这里,“包”的概念可以是一组题为“1”、“2”、“3”等等的文件(由程序动态创建)。
如果是在两台机器上实现,其中一台机器作为发送方,另一台则是接收方,双方进行通讯。
如果接收方窗口大小为6,则当编号为7的包(文件)到达时,接受方应作相应处理,包括通知发送方暂停发送,缓存收到的包,清空滑动窗口等。
当然,对于出错的情况,比如包丢失,不按序到达等情况编程者应有所考虑,所以在模拟接收方的机器上,应提供选择待发送包序号的界面。
一个简单的选择发送包的界面如下:
34)按序发送
35)错序发送(包4未发送)
项目8:
简单的端口扫描
目的:
加深对TCP/IP协议的理解,熟悉Socket编程。
任务:
实现一个扫描器,必须能够完成以下所有功能:
使用TCPconnect、TCPSYN和TCPFIN进行端口扫描,使用ICMPecho扫描实现IP扫描。
并把扫描得知的结果记录下来。
本项目由一人完成。
提交:
92.程序源代码,必须有详细的注释。
93.项目设计报告
要求:
94.Windows或Linux环境下,程序应在单机上运行。
95.演示:
使用端口扫描对一台主机进行扫描,并显示出结果(一台主机上有哪些端口是打开的)。
对一个网段进行IP扫描,显示出结果(一个网段内有哪些主机是开机的)。
96.友好的用户界面。
评分:
97.最高分:
A-
98.符合要求:
70%
99.源程序可读性:
10%
100.项目报告:
20%。
项目报告至少应包含:
36)系统概述:
运行环境、编译、使用方法、实现环境、程序文件列表等;
37)主要数据结构;
38)主要算法描述;
39)遇到的问题及解决方法;
40)体会与建议。
参考:
几种扫描的原理
101.TCPconnect()扫描:
这是最基本的TCP扫描。
操作系统提供的connect()系统调用,用来与每一个感兴趣的目标计算机的端口进行连接。
如果端口处于侦听状态,那么connect()就能成功。
否则,这个端口是不能用的,即没有提供服务。
这个技术的一个最大的优点是,你不需要任何权限。
系统中的任何用户都有权利使用这个调用。
另一个好处就是速度。
如果对每个目标端口以线性的方式,使用单独的connect()调用,那么将会花费相当长的时间,你可以通过同时打开多个套接字,从而加速扫描。
使用非阻塞I/O允许你设置一个低的时间用尽周期,同时观察多个套接字。
102.TCPSYN扫描:
这种技术通常认为是“半开放”扫描,这是因为扫描程序不必要打开一个完全的TCP连接。
扫描程序发送的是一个SYN数据包,好像准备打开一个实际的连接并等待反应一样(参考TCP的三次握手建立一个TCP连接的过程)。
一个SYN/ACK的返回信息表示端口处于侦听状态。
一个RST返回,表示端口没有处于侦听态。
如果收到一个SYN/ACK,则扫描程序必须再发送一个RST信号,来关闭这个连接过程。
103.TCPFIN扫描:
有的时候有可能SYN扫描都不够秘密。
一些防火墙和包过滤器会对一些指定的端口进行监视,有的程序能检测到这些扫描。
相反,FIN数据包可能会没有任何麻烦的通过。
这种扫描方法的思想是关闭的端口会用适当的RST来回复FIN数据包。
另一方面,打开的端口会忽略对FIN数据包的回复。
这种方法和系统的实现有一定的关系。
有的系统不管端口是否打开,都回复RST,这样,这种扫描方法就不适用了。
这种方法在区分Unix和NT时,是十分有用的。
104.ICMPEcho扫描:
使用ICMPRequest数据包来判断在一个网络上主机是否开机。
如果主机开机,则会回复ICMPEcho数据包。
否则得不到回复。
注意:
在使用ICMPEcho扫描时,要求程序能够判断接收到的数据包是否是对本进程发出的数据包的响应。
并请思考为什么要这样做。
项目9:
以太网络的拓扑发现
目的:
加深对以太网逻辑拓扑、物理拓扑、交换机、路由器工作原理和SNMP协议的理解
任务:
本项目分为两个阶段,第一阶段为网络逻辑拓扑的发现,第二阶段为网络物理拓扑的发现。
第一阶段:
设计并实现一个简单的以太网的逻辑拓扑发现算法。
逻辑拓扑是发现三层设备(包括路由器和具有VLAN划分功能的交换机)与子网(包括VLAN)、三层设备与三层设备之间的连接关系。
这主要是网络层级别的。
实现方法是根据SNMP协议读取访问路由器的一些MIB信息(MIB-II),根据这些信息来计算网络的拓扑结构。
第二阶段:
设计并实现一个简单的以太网的物理拓扑发现算法。
发现子网内交换机之间的连接关系。
以太网交换机内存在一个地址转发表,利用SNMP协议获得该表,设计一个算法,对其中的地址-端口对应关系进行分析,可以找出以太网的物理拓扑。
接着可以计算网络中交换机与主机的连接情况,从而得到整个网络的拓扑情况。
拓扑图中应该最终包含主机(假设主机是支持SNMP的)。
以下介绍一种物理拓扑的发现方案,分为设备发现和拓扑计算两部分:
发现子网内可以发现的所有交换机
当交换机上配置了IP地址并且开放了SNMP协议,那么该交换机就是可以被发现的。
用集合SwitchSet表示发现的交换机集合。
其中每个元素都为序偶<交换机IP地址,交换机MAC地址>。
理论上采用的方法是逐个对子网内的网络地址发送GetRequest请求,请求的对象是sysServices,对应的oid=1.3.6.1.2.1.1.7.0,收到GetResponse响应报文后,按sysServices值来判断响应报文是否来自交换机设备。
因为sysServices对象的取值按7位编码来解释。
每一位对
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 实验 项目 指导书