计算机网络实验指导书.docx
《计算机网络实验指导书.docx》由会员分享,可在线阅读,更多相关《计算机网络实验指导书.docx(23页珍藏版)》请在冰豆网上搜索。
计算机网络实验指导书
HUBEIUNIVERSITYOFAUTOMOTIVETECHNOLOGY
计算机工程系课程设计指导书
朱贤成向郑涛编杨亚会审
电气与信息工程学院
2013年8月
目录
一、课程设计的目的和任务1
二、课程设计的主要内容与学时分配1
三、课程设计的质量标准与成绩评定1
四、课程设计选题2
4.1P2P聊天程序的设计与实现2
4.2FTP客户端程序的设计与实现3
4.3局域网抓包软件的设计与实现6
4.4浏览器程序的设计与实现15
4.5湖北汽车工业校园网的规划与设计17
五、设计报告要求17
一、课程设计的目的和任务
计算机网络课程设计是使学生全面系统理解和掌握计算机网络的原理和方法的重要环节。
通过本课程设计,使学生在对计算机网络技术与发展整体了解的基础上,掌握网络的主要种类和常用协议的概念及原理,初步掌握以TCP/IP协议族为主的网络协议结构,培养学生在TCP/IP协议工程和LAN、WAN上的实际工作能力。
二、课程设计的主要内容与学时分配
本课程为实践性教学环节,以学生在实验室做实验为主,同时辅以实验理论的讲授。
每位学生必须在指导教师的指导下,独立完成课程设计任务的设计、编写与调试工作,在完成课题验收后,学生应在规定的时间内完成课程设计报告一份(不少于2000字)。
具体学时安排如下:
1.实验室讲授(4学时)
说明计算机网络课程设计的目的、内容、任务和要求,针对每个课程设计选题,讲解基本编程过程、调试手段和错误处理方法。
2.相关资料查阅(4学时)
学生根据所选课题,通过查找相关资料,做课程设计的前期准备工作。
3.实验室实践(4*8学时)
主要以学生独立做课程设计为主,指导教师应在实验室及时指导,同时对已完成课程设计任务的同学进行检查验收。
三、课程设计的质量标准与成绩评定
每个同学单独进行验收和答辩,根据验收答辩的情况和课程设计报告的质量综合给出成绩。
成绩采用优、良、中、及格和不及格五级评分制,评分标准如下:
优:
设计方案正确,程序结构合理,达到规定的各项技术要求。
设计说明书层次分明,条理清晰,理论分析正确,实现完整。
课设说明书书写工整、规范,资料齐全。
对于善于独立思考并且设计和分析有独到之处的学生优先考虑。
良:
设计方案合理,基本达到规定的各项技术要求,回答问题正确。
课程设计说明书层次较清楚、理论分析较正确、书写工整、资料齐全。
中:
设计方案基本正确,尚能基本满足规定的各项技术要求,回答问题基本正确。
设计说明书存在一些问题(如:
理论分析有某些错误,条理不十分清晰,书写不太规范等)。
及格:
设计方案存在一些问题。
有些技术要求不能满足或实现,回答问题有错误。
设计说明书存在较多问题。
不及格:
设计方案存在严重问题且经指导教师指出仍不肯改正。
程序质量很差,不能回答问题,课题基本达不到技术要求,设计说明书有严重问题(如:
方案分析基本全错,概念不清,层次混乱,书写不认真)。
四、课程设计选题
4.1P2P聊天程序的设计与实现
应用可视化编程工具,设计开发P2P聊天程序,实现局域网内点对点的信息对话。
基本功能要求:
可实现文本信息、表情信息等的对话,同时具有自动答复功能。
【提示】:
(1)课程设计任务给出的是一个比较基本的要求,实验者要根据任务要求,把任务的潜在需求挖掘出来。
为此,设计者可先将自己作为使用者来考虑:
这个聊天程序需要作些什么?
比如,要能够显示聊天记录;要能设置自动回复功能中的回复内容(或可以预设多条回复,根据需要选择要回复的内容);暂时离开时可以设置一个简单的留言功能,并通知对方可以留言等。
这一步应该是最具创新性的工作,鼓励验者在完成基本需求的情况下进行创新思考,想象出更新的聊天需求。
(2)根据上一步的工作,完成聊天程序的功能设计,比如聊天程序运行以后,要有能设置对方IP地址和端口号的功能,要有能选择底层协议的功能:
是用UDP还是TCP协议进行通信,如果使用TCP还应该设置一个连接功能,当有对方信息到达是否应该提示聊天者等。
这一步应该做到程序编制出来以后是如何使用的都应确定下来。
(3)将第二步骤设的各项功能中,需要在网络上实现的功能分离出来,为这些功能设计协议,每一项网络功能都必须对应一项协议内容,这一步要求非常详细,不能存在任何的模糊性。
协议要求有协议格式,协议格式的设计要合理,最好协议要具备可扩充性,这样程序可以方便的扩充功能,进行升级。
当然这一步也要考虑实现起来的方便性。
比如,用二进制1表示对于VisualBasic来讲实现就不很方便,对C语言来将就不是问题。
(4)建议实验者使用Winsock编程组件来实现底层通信功能,这个组件可以实现TCP或UDP的通信协议功能,聊天程序的协议按已设计好的协议格式作为组件的数据部分传输。
4.2FTP客户端程序的设计与实现
应用可视化编程工具,设计开发FTP客户端程序,实现FTP基本操作过程和服务器的反馈信息,并进行信息解释。
基本功能要求:
至少实现cd、dir、get、?
、quit等五个以上的命令。
【提示】:
(1)FTP工作原理:
文件传送协议FTP只提供文件传送的一些基本的服务,它使用TCP可靠的运输服务;FTP使用客户服务器方式,一个FTP服务器进程可同时为多个客户进程提供服务;FTP的服务器进程由两大部分组成:
一个主进程,负责接受新的请求,另外有若干个从属进程,负责处理单个请求。
主进程的工作步骤:
(a)打开熟知端口(端口号为21),使客户进程能够连接上。
(b)等待客户进程发出连接请求。
(c)启动从属进程来处理客户进程发来的请求。
从属进程对客户进程的请求处理完毕后即终止,但从属进程在运行期间根据需要还可能创建其他一些子进程。
(d)回到等待状态,继续接受其他客户进程发来的请求。
主进程与从属进程的处理是并发地进行。
(e)控制连接在整个会话期间一直保持打开,FTP客户发出的传送请求通过控制连接发送给服务器端的控制进程,但控制连接不用来传送文件。
(f)实际用于传输文件的是“数据连接”。
服务器端的控制进程在接收到FTP客户发送来的文件传输请求后就创建“数据传送进程”和“数据连接”,用来连接客户端和服务器端的数据传送进程。
(g)数据传送进程实际完成文件的传送,在传送完毕后关闭“数据传送连接”并结束运行。
(2)FTP使用两个TCP连接两个不同的端口号
(a)当客户进程向服务器进程发出建立连接请求时,要寻找连接服务器进程的熟知端口(21),同时还要告诉服务器进程自己的另一个端口号码,用于建立数据传送连接。
(b)接着,服务器进程用自己传送数据的熟知端口(20)与客户进程所提供的端口号码建立数据传送连接。
(c)由于FTP使用了两个不同的端口号,所以数据连接与控制连接不会发生混乱。
(3)FTP客户端的命令
(a)?
说明:
显示ftp命令的说明。
后面可以加参数,是加需要解释的命令名,不加则显示包含所有命令列表。
(b)ascii
说明:
默认情况下,将文件传输类型设置为ASCII。
(c)binary
说明:
将文件传输类型设置为二进制。
(d)bye
说明:
结束和远程计算机的ftp会话,安全断开,退出ftp。
(e)cd
说明:
更改远程计算机上的工作目录。
如:
cddata
其中,data是要进入的远程计算机的目录。
(f)close
说明:
结束与远程服务器的ftp会话,并返回命令解释程序。
(g)dir
说明:
显示远程的文件以及子目录列表。
如:
dirdata
其中,data是指定要查看列表的目录,没指定的话就是当前目录。
(h)disconnnect
说明:
与远程计算机断开连接,但还保持着ftp命令提示符。
(i)get
说明:
使用当前文件传输类型,把远程的文件拷贝到本地计算机上。
如:
getremote-filelocal-file
其中,remote-file是指定要复制的文件,local-file是指定本地计算机上的文件名,没有指定则与remote-file同名。
(j)help
说明:
显示ftp命令的解释。
如:
helpcommmand
其中,command是要解释的命令,如果不加command参数则显示所有命令的列表。
(k)ls
说明:
显示远程目录的文件和子目录。
如:
lsremote-directory
其中,remote-directory是指要查看的列表的目录,不指定的话显示的是当前工作目录。
(l)mdelete
说明:
删除远程计算机上的文件。
如:
mdeleteremote-file...
(m)mget
说明:
使用当前文件传输类型将多个远程文件复制到本地计算机。
如:
mgetremote-files...
其中,remote-files可以指定多个,即指定要复制到本地计算机的远程文件。
(n)mkdir
说明:
创建远程目录。
如:
mkdirdirectory。
(o)mput
说明:
使用当前文件传输类型,将本地文件复制到远程计算机。
如:
mputlocal-files...
(p)open
说明:
连接到指定ftp服务器上。
如:
opencomputerport
其中,computer一般是远程计算机的IP地址,port是指定端口。
(q)prompt
说明:
转换提示,在多个文件传输的时候,FTP提示可以有选择的检索或保存文件,如果关闭提示,则mget和mput命令传输所有文件,在默认情况下是打开的。
(r)put
说明:
使用当前文件传输类型将本地文件复制到远程计算机中。
如:
putlocal-fileremote-file
其中,local-file是指定要复制的本地文件,remote-file是指定要复制的远程计算机上的文件名,未指定则和本地计算机上的文件名同名。
(s)pwd
说明:
显示远程FTP服务器上的当前目录。
(t)quit
说明:
结束与远程FTP服务器的会话,并退出ftp。
(u)recv
说明:
使用当前文件传输类型将远程文件复制到本地计算机,与get命令作用相同。
(v)rename
说明:
更改远程计算机上的文件名。
如:
renamefilenamenewfilename。
(w)rmdir
说明:
删除远程目录。
如:
rmdirdirectory。
(x)send
说明:
使用当前文件传输类型将本地文件复制到远程计算机。
send和put命令的功能一样。
如:
sendlocal-fileremote-file。
(y)user
说明:
指定连接到远程计算机的用户。
如:
useruser-name[passwd]
其中,user-name是用来登陆计算机的用户名,passwd指定user-name的密码,不指定的话ftp会提示输入密码。
4.3局域网抓包软件的设计与实现
应用可视化编程工具,设计开发局域网抓包软件,实现对局域网通信包的提取。
基本功能要求:
可实现对数据包的提取与显示,并对提取的数据包进行基本的解析,至少能解析出数据包的协议名称和源IP地址。
【提示】:
此题可利用第三方开发包,如jpcap、Winpcap等。
Winpcap是基于Win32平台的网络包截获和分析的系统,它是Libpcap的Windows版本,可从其官网下载其应用程序和开发包。
Winpcap包括三个部分:
内核级的包过滤驱动程序NPF(NetgroupPacketFilter),低级动态链接库packet.dll,在Win32平台上提供了与NPF的一个通用接口用户级的wpcap.dll,如图1所示。
图1Winpcap组成
(1)NPF驱动
网络数据包过滤器(NetgroupFilter,NPF)是Winpcap的核心部分。
它处理网络上传输的数据包,并且对用户级提供捕获、发送和分析等功能。
NPF是一个协议驱动,它包括NetworkTap和PacketFilter两个主要部件。
(2)packet.dll和wpcap.dll
抓包系统必须有用户级的接口函数库,Winpcap提供了两个不同的库:
packet.dll和wpcap.dll。
前者提供了一个底层API,这些API可以直接用来访问内核;后者提供一组更加友好、功能更强大的高层函数库。
图2Winpcap体系结构
(3)packet.dll的数据结构及接口函数
(a)typedefstruct_ADAPTER*LPADAPTER
描述一个网络适配器。
它包含了两个域:
HANDLEhFile和TCHARSymbolicLink。
hFile是一个指向驱动器句柄的指针。
SymbolicLink是一个字符串,它包含了当前打开的网络适配器的名称。
(b)typedefstruct_PACKET*LPPACKET
描述一组网络数据包的结构。
它包含了以下几个域:
OVERLAPPEDOverLapped
PVOIDBuffer
UINTLength
PVOIDulBytesReceived
BOOLEANbIoComplete
说明:
OverLapped是用来处理对驱动器的异步调用。
Buffer是用来指向缓存的指针,该缓存包含了数据包的数据。
Length是该缓存区的大小。
ulBytesReceived表明了该缓存中包含的有效数据的大小。
bIoComplete是在异步调用中用来表示该Packet是否包含有效的数据。
(c)structbpf_hdr
数据报头部。
它包含以下几个域:
structtimevalbh_tstamp
UNITbh_caplen
UNITbh_datalen
USHORTbh_hdrlen
说明:
bh_tstamp是一个时间戳,它包含两个域:
tv_sec和tv_usec,用来表示报文的捕获时间。
bh_caplen是报文的总长度。
bh_datalen是报文中的数据长度。
bh_hdrlen是报头长度。
(d)typedefstructNetType
描述网络类型和速度的数据结构,包含LinkSpeed(速度)和LinkType(类型)。
其中LinkType有以下几种情况:
NdisMedium802_3:
Ethernet
NdisMediumWan:
WAN
NdisMedium802_5:
TokenRing
NdisMediumFddi:
FDDI
NdisMediumAtm:
ATM
(e)typedefstructnpf_if_addr
描述一个网络适配器的地址信息,npf_ip_addr结构包含:
IPAddress:
IP地址
SubnetMask:
子网掩码
Broadcast:
广播地址
(f)structbpf_stat
当前捕获数据报的统计信息,bpf_stat结构包含:
bs_recv:
从网络适配器开始捕获数据报开始所接收到的所有数据报的数目。
bs_drop:
丢失的数据报数目。
ps_ifdrop:
被网卡丢弃的数据报数目。
bs_capt:
通过过滤器的数据报数目。
(g)LPPACKETPacketAllocatePacket(void)
如果运行成功,返回一个_PACKET结构的指针,否则返回NULL。
成功返回的结果将会传送到PacketReceivePacket()函数,接收来自驱动的网络数据报。
(h)VOIDPacketInitPacket(LPPACKETlpPacket,PVOIDBuffer,UINTLength)
初始化一个_PACKET结构。
(i)VOIDPacketFreePacket(LPPACKETlpPacket)
释放参数提供的_PACKET结构。
(j)VOIDPacketCloseAdapter(LPADAPTERlpAdapter)
关闭参数中提供的网络适配器,释放相关的ADAPTER结构。
(k)BOOLEANPacketGetAdapterNames(LPSTRpStr,PULONGBufferSize)
返回可以得到的网络适配器列表及描述。
(l)LPADAPTERPacketOpenAdapter(LPTSTRAdapterName)
打开一个网络适配器。
(m)BOOLEANPacketReceivePacket(LPADAPTERAdapterObject,LPPACKETlpPacket,BOOLEANSync)
从NPF驱动程序读取网络数据报及统计信息。
数据报封装结构:
|bpf_hdr|data|padding|
(n)BOOLEANPacketSetBuff(LPADAPTERAdapterObject,intdim)
设置捕获数据报的内核级缓冲区大小。
(o)BOOLEANPacketSetHwFilter(LPADAPTERAdapterObject,ULONGFilter)
为接收到的数据报设置硬件过滤规则。
(p)BOOLEANPacketSetReadTimeout(LPADAPTERAdapterObject,inttimeout)
设置读操作等待时间。
(q)BOOLEANPacketGetNetInfoEx(LPTSTRAdapterNames,npf_ip_addr*buff,PLONGNEntries)
返回某个网络适配器的地址信息。
(r)BOOLEANPacketGetNetType(LPADAPTERAdapterObject,NetType*type)
返回某个网络适配器的类型和速度。
(s)BOOLEANPacketGetStats(LPADAPTERAdapterObject,structbpf_stat*s)
返回关于当前捕获的统计信息。
(t)PCHARPacketGetVersion()
返回packet.dll的版本信息
(u)BOOLEANPacketSendPacket(LPADAPTERAdapterObject,LPPACKETlpPacket,BOOLEANSync)
发送一个或多个数据报的副本。
(v)BOOLEANPacketSetNumWrites(LPADAPTERAdapterObject,intnwrites)
设置调用PacketSendPacket()函数发送一个数据报副本的最大重发次数。
图3Packet.dll使用流程
(4)Wpcap.dll的数据结构及接口函数
Wpcap.dll为包捕获应用提供了一个高级的编程接口,它是从Libpcap发展而来并且相互兼容,所以wpcap.dll包含了Libpcap具有的函数。
Wpcap为了要与硬件接口,还直接调用了packet.dll提供的函数。
另外,在Libpcap提供的功能基础上还增加了数据包发送和统计等功能,为此增加了一些函数。
pcap_setbuff:
该函数用于设置包缓冲区的大小。
pcap_setmode:
该函数用于设置网络适配器接口的工作模式。
pcap_stats:
该函数用于获取包捕获过程的统计数据。
(a)接口地址
structpcap_addr{
structpcap_addr*next;
structsockaddr*addr;
structsockaddr*netmask;
structsockaddr*broadaddr;
structsockaddr*dstaddr;
};
(b)libpcapdump文件头结构
structpcap_file_header{
bpf_u_int32magic;
u_shortversion_major;
u_shortversion_minor;
bpf_int32thiszone;
bpf_u_int32sigfigs;
bpf_u_int32snaplen;
bpf_u_int32linktype;
};
(c)接口数据结构
structpcap_if{
structpcap_if*next;
char*name;
char*description;
structpcap_addr*addresses;
u_intflags;
};
(d)dumpfile中包的头结构
structpcap_pkthdr{
structtimevalts;/*时间戳*/
bpf_u_int32caplen;/*捕获长度*/
bpf_u_int32len;/*总长度*/
};
(e)统计数据结构
structpcap_stat{
u_intps_recv;/*网上已传送的包数*/
u_intps_drop;/*丢弃的包数*/
u_intps_ifdrop;/*接口拒绝的包数*/
#ifdefWIN32
/*Win32专用,捕获的包数*/
u_intbs_capt;
#endif
};
(f)intpcap_findalldevs(pcap_if_t**alldevsp,char*errbuf)
功能:
返回本机所有的网络接口设备。
当用户无法了解自己机器的接口设备时在程序的首部调用该函数。
输入参数:
两个参数全为空值
返回:
失败返回-1,errbuf中包含错误信息。
成功则alldevsp中包含全部网络接口设备。
(g)char*pcat_lookupdev(char*errbuf)
该函数用于返回可被pcap_open_live()或pcap_lookupnet()函数调用的网络设备名(一个字符串指针)。
如果函数出错,则返回NULL,同时errbuf中存放相关的错误消息。
(h)intpcap_lookupnet(char*device,bpf_u_int32*netp,bpf_u_int32*maskp,char*errbuf)
获得指定网络设备的IP地址和掩码。
netp参数和maskp参数都是bpf_u_int32指针。
如果函数出错,则返回-1,同时errbuf中存放相关的错误消息。
(i)pcap_dumper_t*pcap_dump_open(pcap_t*p,char*filename)
打开一个保存数据包的文件,其文件格式固定,和tcpdump等文件格式相兼容。
(j)Pcap_t*pcap_open_live(char*DeviceName,intsnaplen,intpromisc,intto_ms,char*errbuf)
功能:
打开一个捕获接口设备。
输入参数:
DeviceName:
设备名;
snaplen:
一个包中截取的字节数;
promisc:
1混杂模式,0正常模式;
to_ms:
时延(毫秒);
errbuf:
错误信息。
返回:
失败返回非正数,errbuf中包含错误信息。
成功则捕获句柄。
(k)intp