计算机网络课程设计.docx
- 文档编号:11244731
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:49
- 大小:1.44MB
计算机网络课程设计.docx
《计算机网络课程设计.docx》由会员分享,可在线阅读,更多相关《计算机网络课程设计.docx(49页珍藏版)》请在冰豆网上搜索。
计算机网络课程设计
计算机网络课程设计
实验报告
实验一数据包的捕获与分析
1.1实验目的
数据包捕获技术是网络管理系统的关键技术。
本实验通过Wireshark软件的安装使用,监控局域网的状态,捕获在局域网中传输的数据包,并结合在计算机网络课程中学习到的理论知识,对常用网络协议的数据包做出分析,加深网络课程知识的理解和掌握。
1.2实验内容
Wireshark是一种开源的网络数据包的捕获和分析软件,本实验通过Wireshark软件的安装使用,监控局域网的状态,捕获在局域网中传输的数据包,并结合在计算机网络课程中学习到的理论知识,对常用网络协议的数据包做出分析,加深网络课程知识的理解和掌握。
具体内容及要求如下:
●Wireshark软件的安装;
●Wireshark软件的启动,并设置网卡的状态为混杂状态,使得Wireshark可以监控局域网的状态;
●启动数据包的捕获,跟踪PC之间的报文,并存入文件以备重新查;
●设置过滤器过滤网络报文以检测特定数据流;
●对常用协议的数据包的报文格式进行分析,利用协议分析软件的统计工具显示网络报文的各种统计信息。
1.3实验环境
Wirshark1.1.1
1.4实验抓包情况
EthernetⅡ数据链路层:
设置过滤方式是捕获后过滤,过滤条件为udp
Destination:
IPv4mcast_00:
00:
fc(01:
00:
5e:
00:
00:
fc)目的:
厂名_序号(网卡地址)
Source:
4c:
80:
93:
25:
d0:
1e(4c:
80:
93:
25:
d0:
1e) 源:
厂名_序号(网卡地址)
Type:
IP(0x0800) 帧内封装的上层协议类型为IP(十六进制码0800)
以下为网络层IP包头信息
Version:
4 互联网协议IPv4
Headerlength:
20bytes IP包头部长度
DifferentiatedServicesField:
0x00(DSCP0x00:
Default;ECN:
0x00)差分服务字段
TotalLength:
52 IP包的总长度
Identification:
0x6992(27062) 标志字段
Flags:
0x00 标记字段(在路由传输时,是否允许将此IP包分段)
Fragmentoffset:
0 分段偏移量(将一个IP包分段后传输时,本段的标识)
Timetolive:
1 生存期TTL
Protocol:
TCP(0x11) 此包内封装的上层协议为TCP
Headerchecksum:
0x64ba[correct] 头部数据的校验和
Source:
10.27.0.86(10.27.0.86) 源IP地址
Destination:
224.0.0.252(224.0.0.252) 目的IP地址
以下为传输层UDP包头
Sourceport:
65167(65167)源端口名称
Destinationport:
llmnr(5355)目的端口名称
Length:
32头部长度
Checksum:
0xd065[validationdisabled]UDP数据段的校验和
以下是网络层的icmp包头
Type:
8(Echo(ping)request)类型为8(ping),响应请求信号
Code:
0()代码
Checksum:
0x4d3e[correct]校验和
Identifier:
0x0001标识code=0,identifier用来匹配echo和echoreply消息
Sequencenumber:
29(0x001d)顺序号
以下为传输层TCP数据段头部信息
Sourceport:
http(80)源端口名称(端口号)
Destinationport:
52449(52449) 目的端口名
Sequencenumber:
1 (relativesequencenumber) 序列号(相对序列号)
Headerlength:
20bytes 头部长度
Flags:
0x14(RST,ACK) TCP标记字段(本字段是RST,ACK,置位表示复位TCP连接,置位表
示确认号字段有效)
Windowsize:
0 流量控制的窗口大小
Checksum:
0xd47e[validationdisabled] TCP数据段的校验和
以下为数据链路层IEEE802.3报文格式
注意:
IEEE802.3是有线以太网的协议,所以要想得到IEEE802.3的报文就必须要叉网线。
DSTADDR
SRCADDR
LEN
DSAP
SSAP
CONTROL
INFO
6字节
6字节
2字节
1字节
1字节
1/2字节
信息
最大长度1518字节
Destination:
Spanning-tree-(for-bridges)_00(01:
80:
c2:
00:
00:
00)目的:
厂名_序号(网卡地址)
Source:
Hangzhou_07:
f2:
e0(00:
0f:
e2:
07:
f2:
e0) 源:
厂名_序号(网卡地址)
Length:
132长度
1.4总结
Wireshark是一款基于winpcap的抓包软件,它的界面是友好的,功能是强大的,上手是容易的,掌握是困难的。
通过短暂的学习研究,我发现Wireshark之于我么学生的主要功能便是帮助我们更好地学习和理解协议。
正如你知道西瓜是甜的,但只有当你吃过了西瓜,你才能体会到西瓜特有的味道。
而Wirkshark就给我们提供了吃西瓜所需的西瓜刀。
Wireshark是一款网络嗅探器,它以明文的方式显示捕获的包信息,这对于分析协议格式和内容是非常有帮助的。
而且Wireshark的显示比较人性化。
过滤器方式可以是捕获前过滤也可以是捕获后过滤,可以根据自己的需要自行选择。
本次实验,让我深刻地去了解了网络各协议栈的协议,以及对应的包头格式及内容,尤其是对IP包头和ICMP包头的了解又更上一层楼了,这对于理解网络通信的原理特别有帮助,理解了各协议栈的任务以及基本原理。
实验二网络层实验—Ping程序的设计与实现
一、实验内容和要求
本实验为ICMP实验。
实验内容:
Ping命令实现的扩充,在给定的Ping程序的基础上做如下功能扩充:
●-h显示帮助信息
●-b允许ping一个广播地址,只用于IPv4
●-t设置ttl值,只用于IPv4
●-q安静模式。
不显示每个收到的包的分析结果,只在结束时,显示汇总结果
Ping命令的基本描述
Ping的操作是向某些IP地址发送一个ICMPEcho消息,接着该节点返回一个ICMPEchoreply消息。
ICMP消息使用IP头作为基本控制。
IP头的格式如下
0123
01234567890123456789012345678901
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|IHL|TypeofService|TotalLength|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Identification|Flags|FragmentOffset|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|TimetoLive|Protocol|HeaderChecksum|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|SourceAddress|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|DestinationAddress|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Version=4
IHLInternet头长
TypeofService=0
TotalLengthIP包的总长度
Identification,Flags,FragmentOffset用于IP包分段
TimetoLiveIP包的存活时长
ProtocolICMP=1
Addresses发送Echo消息的源地址是发送Echoreply消息的目的地址,相反,发送Echo消息的目的地址是发送Echoreply消息的源地址。
Ping实际上是使用ICMP中的ECHO报文来实现的。
Echo或EchoReply消息格式如下:
0123
01234567890123456789012345678901
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Type|Code|Checksum|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Identifier|SequenceNumber|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Data...
+-+-+-+-+-
Type
echo消息的类型为8
echoreply的消息类型为0。
Code=0
Checksum为从TYPE开始到IP包结束的校验和
Identifier
如果code=0,identifier用来匹配echo和echoreply消息
SequenceNumber
如果code=0,identifier用来匹配echo和echoreply消息
功能描述:
收到echo消息必须回应echoreply消息。
identifier和sequencenumber可能被发送echo的主机用来匹配返回的
echoreply消息。
例如:
identifier可能用于类似于TCP或UDP的port
用来标示一个会话,而sequencenumber会在每次发送echo请求后递增。
收到echo的主机或路由器返回同一个值与之匹配
1、数据结构的描述
1)IP包格式
structip{
BYTEVer_ihl;//版本号与包头长度
BYTETOS;//服务类型
WORDLeng;//IP包长度
WORDId;//IP包标示,用于辅助IP包的拆装,本实验不用,置零
WORDFlg_offset;//偏移量,也是用于IP包的拆装,本实验不用,置零
BYTETTL;//IP包的存活时间
BYTEProtocol;//上一层协议,本实验置ICMP
WORDChecksum;//包头校验和,最初置零,等所有包头都填写正确后,计算并替换。
BYTESaddr[4];//源端IP地址
BYTEDaddr[4];//目的端IP地址
BYTEData[1];//IP包数据
};
2)ICMP包格式
structicmp{
BYTEType;//ICMP类型,本实验用8:
ECHO0:
ECHOREPLY
BYTECode;//本实验置零
WORDChecksum;//ICMP包校验和,从TYPE开始,直到最后一位用户数据,如果为
字节数为奇数则补充一位
WORDID;//用于匹配ECHO和ECHOREPLY包
WORDSeq;//用于标记ECHO报文顺序
BYTEData[1];//用户数据
};
二、实验环境
Windows平台+Linux平台
三、程序的需求分析与逻辑框图
需求分析
允许ping广播地址
打印要获取包的数量
显示使用帮组信息
设置时间间隔
设置安静模式,不显示每个收到的包的分析结果,只在结束时,显示汇总结果
设置数据的长度
设置ttl(生存时间)值
除了打印ECHO-RESPONSE数据包之外,还打印其它所有返回的ICMP数据包
逻辑框图
ping程序函数概貌
1)main函数
2)readloop函数
3)proc函数
4)send函数
四、程序核心功能的实现机制
程序分为两大部分:
一部分读取收到的所有消息,并输出ICMPEchoreplay消息,另一部分每隔一秒钟发送一个Echo消息。
另一部分由SIGALARM信号每秒驱动一次。
首先需要在main()函数里面的循环getopt()的参数里面增加参数,本次实验加的是b,c,h,i,q,s,t,v.然后不同的分支执行不同的操作。
在主函数的最后也就是readloop()函数之后再加一个statistics()数据统计函数,目的是在readloop()中返回时直接执行这个函数。
五、程序源代码(核心部分)
黑体字部分是修改部分
intmain(intargc,char**argv)
{
externchar*optarg;
intc;
structaddrinfo*ai;
char*e;
opterr=0;/*don'twantgetopt()writingtostderr*/
while((c=getopt(argc,argv,"bc:
hi:
qs:
t:
v"))!
=-1){
switch(c){
case'b':
options|=F_BROADCAST;break;
case'c':
npackets=strtol(optarg,&e,10);
if(npackets<=0||*optarg=='\0'||*e!
='\0')
errx(1,"illegalnumberofpackets--%s",optarg);
break;
case'h':
usage();
exit
(1);
break;
case'i':
/*waitbetweensendingpackets*/
interval=strtol(optarg,&e,10);
if(interval<=0||*optarg=='\0'||*e!
='\0')
errx(1,"illegaltiminginterval--%s",optarg);
options|=F_INTERVAL;
break;
case'q':
options|=F_QUIET;break;
case's':
/*sizeofpackettosend*/
datalen=strtol(optarg,&e,10);
if(datalen<=0||*optarg=='\0'||*e!
='\0')
errx(1,"illegaldatalenvalue--%s",optarg);
if(datalen>MAXPACKET)
errx(1,"datalenvaluetoolarge,maximumis%d",MAXPACKET);
break;
case't':
ttl=strtol(optarg,&e,10);
if(datalen<=0||*optarg=='\0'||*e!
='\0')
errx(1,"illegalttlvalue--%s",optarg);
options|=F_TTL;
break;
case'v':
options|=F_VERBOSE;break;
//case'?
':
//err_quit("unrecognizedoption:
%c",c);
default:
usage();
}
}
if(optind!
=argc-1)usage();
host=argv[optind];
pid=getpid();
signal(SIGALRM,sig_alrm);
ai=host_serv(host,NULL,0,0);
if(options&F_BROADCAST)
printf("WARNING:
pingingbroadcastaddress\n");
printf("ping%s(%s):
%ddatabytes\n",ai->ai_canonname,
Sock_ntop_host(ai->ai_addr,ai->ai_addrlen),datalen);
/*4initializeaccordingtoprotocol*/
if(ai->ai_family==AF_INET){
pr=&proto_v4;
#ifdefIPV6
}elseif(ai->ai_family==AF_INET6){
pr=&proto_v6;
if(IN6_IS_ADDR_V4MAPPED(&(((structsockaddr_in6*)
ai->ai_addr)->sin6_addr)))
err_quit("cannotpingIPv4-mappedIPv6address");
#endif
}else
err_quit("unknownaddressfamily%d",ai->ai_family);
(void)signal(SIGINT,onint);
pr->sasend=ai->ai_addr;
pr->sarecv=calloc(1,ai->ai_addrlen);
pr->salen=ai->ai_addrlen;
readloop();
statistics();
exit(0);
}
//////////////////////////////////////////////////////////////
voidreadloop(void)
{
intsize;
charrecvbuf[BUFSIZE];
socklen_tlen;
ssize_tn;
structtimevaltval;
intyes=1;
sockfd=socket(pr->sasend->sa_family,SOCK_RAW,pr->icmpproto);
setuid(getuid());/*don'tneedspecialpermissionsanymore*/
size=60*1024;/*OKifsetsockoptfails*/
setsockopt(sockfd,SOL_SOCKET,SO_RCVBUF,&size,sizeof(size));
if(options&F_TTL)
setsockopt(sockfd,IPPROTO_IP,IP_TTL,&ttl,sizeof(ttl));
if(options&F_BROADCAST)
setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&yes,sizeof(yes));
sig_alrm(SIGALRM);/*sendfirstpacket*/
for(;;){
len=pr->salen;
n=recvfrom(sockfd,recvbuf,sizeof(recvbuf),0,pr->sarecv,&len);
if(n<0){
if(errno==EINTR)
continue;
else
err_sys("recvfromerror");
}
gettimeofday(&tval,NULL);
(*pr->fproc)(recvbuf,n,&tval);
if(npackets&&nreceived>=npackets)
break;
}
}
/////////////////////////////////////////////////////////////
voidusage()
{
err_quit("Usage:
ping[-ccount][-iinterval]\n\
[-b][-q][-spacketsize]\n\
[-tttl][-v][-h]
}
/////////////////////////////////////////////////////////////
voidstatistics()
{printf("\n---%spingstatistics---\n",host);
printf("%ldpacketstransmitted,%ldreceived,%%%dlost\n",nsend,nreceived,(nsend-nreceived)/nsend*100);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 课程设计