资源描述
网络协议分析
课题名称: 网络协议分析
指导教师: 赵红敏
专业班级:2014级计算机科学与技术2班
学 号: 20144591
姓 名: 孙晓阳
评语:
成绩:
目录
实验一 点到点协议PPP 4
实验目的 4
实验环境 4
实验步骤 4
实验二 地址转换协议ARP 10
实验目的 10
实验环境 10
实验步骤 10
实验三 Internet控制报文协议ICMP 16
实验目的 16
实验环境 16
实验步骤 16
实验四 实现”洞”的算法 20
实验目的 20
实验环境 20
实验要求 20
实验一 点到点协议PPP
实验目的
1. 理解PPP协议的工作原理及作用。
2. 练习PPP,CHAP的配置。
3. 验证PPP,CHAP的工作原理。
实验环境
1. 安装windows操作系统的PC计算机。
2. Boson NetSim模拟仿真软件。
实验步骤
1、 绘制实验拓扑图
利用Boson Network Designer绘制实验网络拓扑图如图1-1。
本实验选择两台4500型号的路由器。同时,采用Serial串行方式连接两台路由器,并选择点到点类型。其中DCE端可以任意选择,对于DCE端路由器的接口(Serial 0/0)需要配置时钟信号(这里用R1的Serial 0/0作为DCE端)。
2、 配置路由器基本参数
绘制完实验拓扑图后,可将其保存并装入Boson NetSim中开始试验配置。配置时点击Boson NetSim程序工具栏按钮eRouters,选择R1 并按下面的过程进行路由器1的基本参数配置:
Router>enable
Router#conf t
Router(config)#host R1
R1(config)#enable secret c1
R1(config)#line vty 0 4
R1(config-line)#password c2
R1(config-line)#interface serial 0/0
R1(config-if)#ip address 192.168.0.1 255.255.255.0
R1(config-if)#clock rate 64000
R1(config-if)#no shutdown
R1(config-if)#end
R1#copy running-config startup-config
点击工具栏按钮eRouters,选择R2并按下面过程进行路由器的基本参数配置:
Router>enable
Router#conf t
Router(config)#host R2
R2(config)#enable secret c1
R2(config)#line vty 0 4
R2(config-line)#password c2
R2(config-line)#interface serial 0/0
R2(config-if)#ip address 192.168.0.2 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#end
R2#copy running-config startup-config
3、 配置、测试PPP
选择路由器R1并配置PPP,如下所示:
R1#conf t
R1(config)#interface serial 0/0
R1(config-if)#encapsulation ppp
R1(config-if)#end
R1#copy running-config startup-config
选择路由器R2并配置PPP,如下所示:
R2#conf t
R2(config)#interface serial 0/0
R2(config-if)#encapsulation ppp
R2(config-if)#end
R2#copy running-config startup-config
选择路由器R1,按照下面的步骤测试并观察PPP诊断输出:
R1# ping 192.168.0.2
R1#debug ppp negotiation
R1#conf t
R1(config)#interface serial 0/0
R1(config-if)# shutdown
R1(config-if)#no shutdown
R1(config-if)#end
R1#undebug all
4、 配置、测试CHAP
选择路由器R1并配置CHAP,如下所示:
R1#conf t
R1(config)#username R2 password samepwd
R1(config)# interface serial 0/0
R1(config-if)#ppp authentication chap
R1(config-if)#end
R1#copy running-config startup-config
选择路由器R2并配置CHAP,如下所示:
R2#conf t
R2(config)#username R1 password samepwd
R2(config)# interface serial 0/0
R2(config-if)#ppp authentication chap
R2(config-if)#end
R2#copy running-config startup-config
选择路由器R1,按照下面步骤测试并观察CHAP配置:
R1#show ip interface brief
R1#ping 192.168.0.2
思考题
1、 两台路由器上所使用的串行口分别是什么?
Serial 0/0
2、 两台路由器的IP地址及子网掩码分别是多少?
R1:192.168.0.1 255.255.255.0
R2:192.168.0.2 255.255.255.0
3、 那台路由器上的串行接口为DCE端?使用R1#show cont
R1
4、 本串行链路所使用的时钟频率是多少?
64000
5、 在CHAP验证中,对所设置的用户名和密码是否存在什么特殊要求?
如果没有配置默认的CHAP密码,则被验证方根据主演正方的用户名在本端的用户表中查找该用户对应密码,并选用找到的密码。
密码必须相同,用户名是对方的
实验二 地址转换协议ARP
实验目的
1. 能够使用ARP命令对ARP选路表进行简单操作。
2. 学会使用Ethereal捕获ARP数据包并分析其格式。
3. 深入理解ARP工作原理和重要作用。
实验环境
1、 安装windows操作系统的PC计算机一台。
2、 每台PC具有一块网卡,通过双绞线与局域网相连。
3、 每台PC运行网络协议分析软件Ethereal。
实验步骤
1、 使用ARP命令
打开“命令提示符界面”,键入“arp -a”查看本机ARP表的内容。如图:
Type栏下dynamic字段表明该表项处于动态更新中。如果20分钟内没有其他访问网络的操作,ARP表会自动清空。
如果不想等待20分钟,可使用“arp -d”命令主动清空ARP表的内容。此时再执行“arp -a”命令,会发现ARP表已经清空。
还可使用“arp -s”命令手工设置ARP表项。如:
Arp –s 192.168.12.253 00-cd-0d-33-00-34
2、 分析ARP协议工作过程
具体操作步骤:
(1) 相邻两名同学为一组,清除ARP表中的所有项。
(2) 运行Ethereal程序,执行分组捕获操作。
(3) 向另一台机器发送ping包,稍后停止发ping包。
(4) 查看Ethereal捕获到的ARP包,分析ARP协议执行的全过程。
3、 用ARP命令查找IP地址冲突主机
原理:主机A在连接网络或者更改IP地址的时候,就会向网络发送ARP来广播自己的IP地址。如果网络中存在相同IP地址的主机B,那么B就会通过ARP来reply该地址,当A接收到这个reply后,A就会跳出IP地址冲突的警告,B也会有警告。
如果能同时观察到这些主机,那么通过修改其中一台主机的IP地址即可。如果仅能观察到其中一台PC提示“IP地址与网络上其他地址冲突”,那么应如何确定是哪两台主机设置了相同的IP地址呢?
(1) 将该报警主机的IP地址修改为一个未用的地址。如:192.168.12.251
(2) 在该机命令提示符界面接入“ping 192.168.12.251”.
(3) 执行“arp -a”命令。
思考题
1、 结合实验画出地址解析的流程图。
2、 根据ARP协议工作机制考虑是否存在地址欺骗的安全隐患?并找出可能的解决途径。
<1>存在地址欺骗的安全隐患,因为在以太局域网内数据包传输依靠的是MAC地址, IP地址与MAC对应的关系依靠ARP表,每台主机(包括网关)都有一个ARP缓存表。查;阅资料可知:在正常情况下,这个缓存表能够有效的保证数据传输的一对一性,也就是说主机A与主机C之间的通讯只通过网关1和网关2,像主机B之类的是无法截获A与C之间的通讯信息的。
但是在ARP缓存表的实现机制中存在一个不完善的地方,当主机收到一个ARP的应答包后,它并不会去验证自己是否发送过这个ARP请求,而是直接将应答包里的MAC地址与IP对应的关系替换掉原有的ARP缓存表里的相应信息。这就导致主机B截取主机A与主机C之间的数据通信成为可能。
由于局域网的网络流通不是根据IP地址进行,而是按照MAC地址进行传输。ARP协议并不只在发送了ARP请求才接收ARP应答。当计算机接收到ARP应答数据包的时候,就会对本地的ARP缓存进行更新,将应答中的IP和MAC地址存储在ARP缓存中。所以在网络中,有人发送一个自己伪造的ARP应答,那个伪造出来的MAC地址在A上被改变成一个不存在的MAC地址,这样就会造成网络不通,导致A不能Ping通C!
举一个例子加以说明,假设一个网络环境中,网内有三台主机,分别为主机A、B、C。主机详细信息如下描述:
A的地址为:IP:192.168.10.1 MAC: AA-AA-AA-AA-AA-AA B的地址为:IP:192.168.10.2 MAC: BB-BB-BB-BB-BB-BB C的地址为:IP:192.168.10.3 MAC: CC-CC-CC-CC-CC-CC
正常情况下A和C之间进行通讯,但是此时B向A发送一个自己伪造的ARP应答,而这个应答中的数据为发送方IP地址是192.168.10.3(C的IP地址),MAC地址是BB-BB-BB-BB-BB-BB(C的MAC地址本来应该是CC-CC-CC-CC-CC-CC,这里被伪造了)。当A接收到B伪造的ARP应答,就会更新本地的ARP缓存(A被欺骗了),这时B就伪装成C了。同时,B同样向C发送一个ARP应答,应答包中发送方IP地址四192.168.10.1(A的IP地址),MAC地址是BB-BB-BB-BB-BB-BB(A的MAC地址本来应该是AA-AA-AA-AA-AA-AA),当C收到B伪造的ARP应答,也会更新本地ARP缓存(C也被欺骗了),这时B就伪装成了A。这样主机A和C都被主机B欺骗,A和C之间通讯的数据都经过了B。主机B完全可以知道他们之间说的什么)。这就是典型的ARP欺骗过程。
ARP欺骗分为二种,一种是对路由器ARP表的欺骗;另一种是对内网PC的网关欺骗。第一种ARP欺骗的原理是——截获网关数据。它通知路由器一系列错误的内网MAC地址,并按照一定的频率不断进行,使真实的地址信息无法通过更新保存在路由器中,结果路由器的所有数据只能发送给错误的MAC地址,造成正常PC无法收到信息。第二种ARP欺骗的原理是——伪造网关。它的原理是建立假网关,让被它欺骗的PC向假网关发数据,而不是通过正常的路由器途径上网。在PC看来,就是上不了网了,“网络掉线了”。
<2>查阅资料可知目前有下面几种方法来控制ARP欺骗:
① 主机静态绑定网关MAC:使用ARP命令静态绑定网关MAC; ② 网关使用IP+MAC绑定模式:交换机启用静态ARP绑定功能,将用户的IP与MAC进行静态绑定,防止ARP欺骗发生;
③ 使用ARP服务器:在局域网内架设ARP服务器,替代主机应答ARP包;
④ 使用防ARP攻击的软件。
因为ARP欺骗利用的是ARP协议本身的缺陷,所以到目前为止,还没有一个十分有效的方法去控制这种攻击。
以下是我们根据资料自己总结出的一些解决ARP欺骗的方案。 方案A:IP-MAC绑定
通过双向IP-MAC绑定可以抵御ARP欺骗,解决由于ARP欺骗造成的网络掉线、IP冲突等问题,保证网络畅通。
1、客户机绑定网关IP-MAC
2、利用APC的软件分发功能给客户机分发IP-MAC绑定程序
3、网关绑定客户机IP-MAC:使用支持IP/MAC绑定的网关设备,在网关设备中设置客户机的静态IP-MAC列表。
注:方案A可以抵御ARP欺骗,保证网络正常运行,但不能定位及清除ARP攻击源。
方案B:利用ARP命令及nbtscan定位ARP攻击源
1、确定ARP攻击源MAC地址 2、定位ARP攻击源计算机
3、对ARP攻击源计算机进行全面杀毒。
方案C:利用Anti Arp Sniffer实时防护并检测ARP攻击源
1、运行Anti Arp Sniffer 3.6,输入网关IP及MAC地址,点击自动保护。Anti Arp Sniffer可以监控本机的ARP缓存,自动清除伪造的ARP条目;监控网内的ARP欺骗数据包,显示ARP攻击源的MAC地址及IP地址。
2、在只能检测到ARP攻击源的MAC地址,而检测不到其IP地址时,可以利用Anti Arp Sniffer 3.6附带的MAC扫描工具MacScan.exe,查找ARP攻击源MAC地址对应的IP地址,根据IP地址定位攻击源计算机。
3、对ARP攻击源计算机进行全面杀毒。
实验三 Internet控制报文协议ICMP
实验目的
1. 掌握使用Ethereal工具对ICMP协议进行抓包分析的方法。
2. 理解不同类型ICMP报文的具体意义。
3. 通过实验,进一步了解ICMP协议。
实验环境
1、 安装windows操作系统的PC计算机一台。
2、 每台PC具有一块网卡,通过双绞线与局域网相连。
3、 每台PC运行网络协议分析软件Ethereal。
实验步骤
1、 ping程序使用的ICMP信息包
启动Ethereal协议分析工具,选择“Capture”→”start”,开始数据包的抓取,接下来点击“开始”菜单,在运行中输入“cmd”,进入操作系统命令行模式,在该模式下输入“ping –n IP地址”,如图。
Ping结束后,停止Ethereal抓包程序,并在Ethereal中的Filter域中键入关键字“ICMP”,点击“Apply”按钮,将非ICMP过滤掉。
查看数据包内容窗口中的“ICMP”,可以看到该ICMP数据包的协议类型和代码,从而可以判断是一个ICMP什么数据包。
分析查看这些ICMP数据包,回答以下问题:
(1) 本机的IP地址是多少?目标主机的IP地址是多少?
本机:172.30.17.202,目标主机:172.30.17.203
(2) 为什么ICMP协议数据包没有源端口和目的端口号?
ICMP是网络层协议,端口号是应用层协议,所以ICMP没有端口号。
(3) 查看本机发送的每个request包,回答这些包的类型号和代码是多少?这些数据包中其他字段有哪些?checksum、sequence、identifier字段分别占多少字节?
Type:8、8、8、8,code:0、0、0、0,checksum:16字节,sequence:16字节,identifier:16字节。
(4) 查看回复的reply数据包,它们的类型号和代码是多少?这些包中还有哪些字段?checksum、sequence、identifier字段分别占多少字节?
Type:0、0、0、0,code:0、0、0、0,checksum:16字节,sequence:16字节,identifier:16字节。
2、 traceroute程序使用的ICMP信息包
启动Ethereal协议分析工具,选择“Capture”→”start”,开始数据包的抓取,接下来点击“开始”菜单,在运行中输入“cmd”,进入操作系统命令行模式,在该模式下输入“tracert ”,如图。
Tracert命令结束后,停止Ethereal抓包程序,并在Ethereal中的Filter域中键入关键字“ICMP”,点击“Apply”按钮,将非ICMP过滤掉。
分析查看这些ICMP数据包,回答以下问题:
(1) 本机的IP地址是多少?目标主机的IP地址是多少?
本机:172.22.43.115,目标主机:14.215.177.39。
(2) 查看echo数据包,与ping所使用的ICMP包比较一下,看有什么区别?
Data类型echo为64字节,ICMP为16字节。
(3) 查看本error(Time-to-live Exceeded)数据包,这些包比echo数据包多了哪些字段?这些字段的内容是什么?
多了IP和ICMP,内容与ICMP包的相同字段一样。
(4) 查看最后3个error数据包,这些包与其他error包有什么不同?
ICMP字段的ICMP中的checksum与sequence数值依次递减。
思考题
1、 ICMP用途是什么?
ICMP是“Internet Control Message Protocol”(Internet控制消息协议)的缩写。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
2、 为什么要限制由实效的ICMP差错报文再产生一个ICMP报文?
限制失效报文为了减少网络流量,再产生一个报文一般是报告错误状态,网络管理一般要得到这个参数。
3、 Ping程序和Tracert程序分别使用什么样的ICMP类型数据包?
ping 主要是用来查看到目的地址的时延和丢包情况,tracert是用来查看所经过的每一跳路由,可以具体判断时延变大或者丢包的点。
实验四 实现”洞”的算法
实验目的
1. 理解”洞”的算法。
2. 理解重组分片的具体意义。
3. 通过实验,进一步了解IP协议。
实验环境
1. 安装windows操作系统的PC计算机一台。
2. 安装任一面向对象的语言,例如:vc++, java
实验要求
利用任一所学语言实现洞的算法.
实验代码
#include<stdio.h>
#define DATA_LENGTH 500
#include <pcap.h>
void Packet_Analyser(u_char* user,const struct pcap_pkthdr* header,const u_char *pkt_data);
typedef struct ip_address
{
u_char byte1;
u_char byte2;
u_char byte3;
u_char byte4;
} ip_address;
typedef struct ip_header
{
u_char ver_ihl;
u_char tos;
u_short totallen;
u_short identification;
u_short flags_fo;
u_char ttl;
u_char proto;
u_short crc; /
ip_address saddr;
ip_address daddr;
u_int op_pad;
} ip_header;
static int COUNT=1;
ip_header *Pheader_Cache=(ip_header*)malloc(sizeof(ip_header)*COUNT);
void main()
{
pcap_if_t *alldevs;
pcap_if_t *d;
pcap_t *adhandle;
int index;
int i=0;
char errbuf[PCAP_ERRBUF_SIZE];
if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,&alldevs,errbuf)==-1)
{
fprintf(stderr,"Error in pcap_findalldevs_ex:%s\n",errbuf);
exit(1);
}
for(d=alldevs;d!=NULL;d=d->next)
{
printf("%d:\n%s",i++,d->name);
if(d->description)
printf("%s\n",d->description);
else
printf("No Description available");
}
if(i==0)
{
printf("\nNo interfaces found!Make sure WinpCap is installed.\n");
return;
}
printf("\n\nIf You Want Choose a Device To Capture The Data Please Input The Number Before The Device\n");
scanf("%d",&index);
if(index>i||index<0)
{
printf("You Choosed An Error Num");
exit(1);
}
for(d=alldevs,i=0;i<index;d=d->next,i++);
printf("You Choosed The Device It's Name Is:%s",d->name);
if((adhandle=pcap_open(d->name,65536,PCAP_OPENFLAG_PROMISCUOUS,1000,NULL,errbuf))==NULL)
{
fprintf(stderr,"\nUnable to Open the adapter.%s is Not support by WinPcap\n",d->name);
pcap_freealldevs(alldevs);
return;
}
printf("\nlisting on %s...\n",d->description);
//开始抓获数据包
pcap_loop(adhandle,0,Packet_Analyser,NULL);
pcap_freealldevs(alldevs);
}
void Packet_Analyser(u_char* user,const struct pcap_pkthdr* header,const u_char *pkt_data)
{
ip_header* pheader=(ip_header *) (pkt_data +14);
ntohs(pheader->flags_fo);
if (pheader->proto!=1)
{
return;
}
for (int i=0;i<COUNT;i++)
{
ntohs((Pheader_Cache+i)->flags_fo);
}
//重组IP数据包
if ((int)header->len<1500)
{
int Flag=0;
for (int i=0;i<COUNT;i++)
{
if (pheader->identification==(Pheader_Cache+i)->identification)
{
Flag=1;
}
}
if (Flag)
{
printf("以下分片属于同一个数据包:\n");
for (int i=0;i<COUNT;i++)
{
if(pheader->identification==(Pheader_Cache+i)->identification)
{
printf("Pheader_Cache[%d]标志字段:%d,地址:%d,TTL:%d,MF字段:%d,片偏移字段:%d\n",i,(Pheader_Cache+i)->identification,(Pheader_Cache+i)->daddr,(Pheader_Cache+i)->ttl,(Pheader_Cache+i)->flags_fo>>13&0x01,(Pheader_Cache+i)->flags_fo&0x1f);
}
}
printf("Pheader标志字段:%d,地址:%d,TTL:%dMF字段:%d,片偏移字段:%d\n",(pheader)->identification,(pheader)->daddr,(pheader)->ttl,(pheader)->flags_fo>>6&0x01,pheader->flags_fo&0x1f);
return;
}
else
printf("该数据包未被分片\n");
}
else
{
Pheader_Cache=(ip_header*)realloc(Pheader_Cache,sizeof(ip_header)*(COUNT+1));
if (Pheader_Cache!=NULL)
{
*(Pheader_Cache+COUNT-1)=*(pheader);
COUNT++;
pheader=NULL;
}
else
printf("Memory applay error!");
}
}
总结:
通过这次实验,我又一次学会了使用Boson思科的软件,是我的专业技能进一步熟悉提升,同时,通过路由器的设置,我深切的感受到了身边的路由器工作原理。通过亲手的配置,我深切的感受到路由器的工作模式和工作方式,同时还更深入的了解到了信息传输的方式。之前虽然知道路由器可以传输数据,这次真正的可以理解其中的奥秘。比如抓包时可以看到一个或者多个数据报的格式大小,还有就是转发机制。总之,这次学习很有必要。也很开心有这样的课程供我们学习。虽是简单的几个实验,对日后的学习和生活都有很大的帮助。其中专业理论知识内容包括:保安理论知识、消防业务知识、职业道德、法律常识、保安礼仪、救护知识。作技能训练内容包括:岗位操作指引、勤务技能、消防技能、军事技能。
二.培训的及要求培训目的
安全生产目标责任书
为了进一步落实安全生产责任制,做到“责、权、利”相结合,根据我公司2015年度安全生产目标的内容,现与财务部签订如下安全生产目标:
一、目标值:
1、全年人身死亡事故为零,重伤事故为零,轻伤人数为零。
2、现金安全保管,不发生盗窃事故。
3、每月足额提取安全生产费用,保障安全生产投入资金的到位。
4、安全培训合格率为100%。
二、本单位安全工作上必须做到以下内容:
1、对本单位的安全生产负直接领导责任,必须模范遵守公司的各项安全管理制度,不发布与公司安全管理制度相抵触的指令,严格履行本人的安全职责,确保安全责任制在本单位全面落实,并全力支持安全工作。
2、保证公司各项安全管理制度和管理办法在本单位内全面实施,并自觉接受公司安全部门的监督和管理。
3、在确保安全的前提下组织生产,始终把安全工作放在首位,当“安全与交货期、质量”发生矛盾时,坚持安全第一的原则。
4、参加生产碰头会时,首先汇报本单位的安全生产情况和安全问题落实情况;在安排本单位生产任务时,必须安排安全工作内容,并写入记录。
5、在公司及政府的安全检查中杜绝各类违章现象。
6、组织本部门积极参加安全检查,做到有检查、有整改,记录全。
7、以身作则,不违章指挥、不违章操作。对发现的各类违章现象负有查禁的责任,同时要予以查处。
8、虚心接受员工提出的问题,杜绝不接受或盲目指挥;
9、发生事故,应立即报告主管领导,按照“四不放过”的原则召开事故分析会,提出整改措施和对责任者的处理意见,并填写事故登记表,严禁隐瞒不报或降低对责任者的处罚标准。
10、必须按规定对单位员工进行培训和新员工上岗教育;
11、严格执行公司安全生产十六项禁令,保证本单位所有人员不违章作业。
三、 安全奖惩:
1、对于全年实现安全目标的按照公司生产现场管理规定和工作说明书进行考核奖励;对于未实现安全目标的按照公司规定进行处罚。
2、每月接受主管领导指派人员对安全生产责任状的落
24 / 24
展开阅读全文