实验手册.docx
- 文档编号:27617118
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:22
- 大小:25.67KB
实验手册.docx
《实验手册.docx》由会员分享,可在线阅读,更多相关《实验手册.docx(22页珍藏版)》请在冰豆网上搜索。
实验手册
实验一利用分组嗅探器俘获协议报文
一、实验目的及任务
1、熟悉并掌握sniffer的基本操作。
2、了解网络协议实体间进行交互以及报文交换的情况。
二、实验环境
与因特网连接的计算机网络系统;
主机操作系统为windows;
sniffer、IE等软件。
三、预备知识
一个人要深入理解网络协议,需要:
观察它们的工作并使用它们,即观察两个协议实体之间交换的报文序列,探究协议操作的细节,使协议实体执行某些动作,观察这些动作及其影响。
这些任务可以在仿真环境下或在如因特网这样的真实网络环境中完成。
观察在正在运行协议实体间交换报文的基本工具被称为分组嗅探器(packetsniffer)。
顾名思义,一个分组嗅探器俘获(嗅探)由你的计算机发送和接收的报文。
一般情况下,分组嗅探器将存储和显示出被俘获报文的各协议字段的内容。
图1显示了一个分组嗅探器的结构。
图1右边是计算机上正常运行的协议(在这里是因特网协议)和应用程序(如:
web浏览器和ftp客户端)。
分组嗅探器(虚线框中的部分)是附加计算机普通软件上的,主要有两部分组成。
分组俘获库(packetcapturelibrary)接收计算机发送和接收的每一个链路层帧的拷贝。
高层协议(如:
HTTP、FTP、TCP、UDP、DNS、IP等)交换的报文都被封装在链路层帧中,并沿着物理媒体(如以太网的电缆)传输。
图1假设所使用的物理媒体是以太网,并且上层协议的报文最终封装在以太网帧中。
分组嗅探器的第二个组成部分是分组分析器。
分组分析器用来显示协议报文所有字段的内容。
为此,分组分析器必须能够理解协议所交换的所有报文的结构。
例如:
我们要显示图1中HTTP协议所交换的报文的各个字段。
分组分析器理解以太网帧格式,能够识别包含在帧中的IP数据报。
分组分析器也要理解IP数据报的格式,并能从IP数据报中提取出TCP报文段。
然后,它需要理解TCP报文段,并能够从中提取出HTTP消息。
最后,它需要理解HTTP消息。
四、实验步骤
分别安装WinPcap和Ethereal(软件在Ethereal目录中),或安装Sniffer软件。
使用Sniffer(或Ethereal)分析协议(下图为Sniffer运行状态),点击“>”按钮开始抓包,点击“停止按钮”停止抓包。
1.启动主机上的web浏览器。
2.启动sniffer。
开始分组俘获:
选择“capture”下拉菜单中的“Start”命令,开始抓包,点击“停止按钮”停止抓包。
可以使用filter设置分组俘获的选项。
3.在运行分组俘获的同时,在浏览器地址栏中输入某网页的URL,如:
为显示该网页,浏览器需要连接的服务器,并与之交换HTTP报文,以下载该网页。
包含这些HTTP报文的以太网帧将被Ethereal俘获。
4.当完整的页面下载完成后,单击sniffer俘获窗口中的stop按钮,停止分组俘获。
此时,分组俘获窗口关闭。
sniffer主窗口显示已俘获的你的计算机与其他网络实体交换的所有协议报文,其中一部分就是与服务器交换的HTTP报文。
5.在显示筛选规则中选择“http”,分组列表窗口将只显示HTTP协议报文。
6.选择分组列表窗口中的第一条http报文。
它应该是你的计算机发向服务器的HTTPGET报文。
当你选择该报文后,以太网帧、IP数据报、TCP报文段、以及HTTP报文首部信息都将显示在分组首部子窗口中。
单击分组首部详细信息子窗口中向右和向下箭头,可以最小化帧、以太网、IP、TCP信息显示量,可以最大化HTTP协议相关信息的显示量。
其结果与图5相似。
7.退出sniffer。
五、思考题
在实验基础上,回答以下问题:
(1)列出在第5步中分组列表子窗口所显示的所有协议类型。
(2)从发出HTTPGET报文到接收到HTTPOK响应报文共需要多长时间?
(你主机的IP地址是什么?
你所访问的主页所在服务器的IP地址是什么?
(3)写出两个第6步所显示的HTTP报文头部行信息。
实验二利用分组嗅探器分析网络流量、故障
一、实验目的及任务
3、了解镜像端口的配置。
4、根据sniffer对网络流量、收发数据包情况判断网络故障。
二、实验环境
与因特网连接的计算机网络系统;
主机操作系统为windowsxp;
交换机三台
三、预备知识
当使用Sniffer捕获数据时,可以使用它的监控功能查看当前网络中的数据传输情况。
Sniffer具有7大监控功能,包括:
Dashboard(仪表)、HostTable(主机列表)、Matrix(矩阵)、ART(ApplicationResponseTime,应用响应时间)、HistorySample(历史采样)、ProtocolDistribution(协议分类)和GlobalStatistics(球状统计)。
这些功能可以实时显示当前网络中传输的数据,便于网络管理员及时发现故障并解决。
如果局域网使用交换机或路由器与外部网络进行连接,若欲使用Sniffer实现对端口流量的监控,就必须配置端口镜像,并将安装Sniffer的计算机连接至该镜像目的端口。
若欲实现对整个网络的监控,那么,就应当将总出口(即连接路由器或代理服务器的端口)设置为目的端口。
所谓端口镜像,是指把交换机一个或多个端口(或VLAN)的数据镜像到一个或多个端口的方法。
端口镜像简单地说,就是把交换机一个(数个)端口(源端口)的流量完全复制一份,从另外一个端口(目的端口)发出去,以便网络管理人员从目的端口通过分析源端口的流量来找出网络存在问题的原因。
四、实验步骤
一、设置镜像端口
基于端口的镜像是把被镜像端口的进出数据报文完全拷贝一份到镜像端口,这样来进行流量观测或者故障定位。
在华为交换机s3100上配置镜像端口
1.配置镜像(观测)端口
[SwitchA]monitor-porte0/8
2.配置被镜像端口
[SwitchA]portmirrorEthernet0/1toEthernet0/2
拓扑说明:
Vlan连接S3100交换机的F0/1端口,即来源端口,需要分析的端口,sniffer分析主机连接在S3100交换机的F0/2端口,即目标端口。
二、从sniffer下手揪出ARP病毒
一判断ARP欺骗病毒发作迹象
一般来说ARP欺骗病毒发作主要有以下几个特点,首先网络速度变得非常缓慢,部分计算机能够正常上网,但是会出现偶尔丢包的现象。
例如ping网关丢包。
而其他大部分计算机是不能够正常上网的,掉包现象严重。
但是这些不能上网的计算机过一段时间又能够自动连上。
ping网关地址会发现延迟波动比较大。
另外即使可以正常上网,象诸如邮箱,论坛等功能的使用依然出现无法正常登录的问题。
二确认ARP欺骗病毒发作
当我们企业网络中出现了和上面描述类似的现象时就需要我们在本机通过arp显示指令来确认病毒的发作了。
第一步:
通过“开始->运行”,输入CMD指令后回车。
这样我们将进入命令提示窗口。
00-10-5C-AC-3D-0A-5c-ac-31-b6。
网关地址MAC信息错误或变化确认是ARP病毒造成的。
第三步:
我们用笔将错误的MAC地址记录下来,为日后通过sniffer排查做准备。
三使用sniffer下手揪出ARP病毒
一般来说最好的办法是找一台没有感染病毒的计算机连接到企业核心路由交换设备的镜像端口来抓取数据包。
考试大提示如果没有镜像端口直接连接到网络中抓取也可以,只是所抓数据会不全,分析问题的周期比较长。
第一步:
我们按照实际需要将用来分析故障的笔记本连接到交换机的镜像端口上。
运行sniffer,在sniffer软件中打开dashboard面板,这个面板主要是扫描当前网络中数据包的宏观信息,即什么样的数据包有多少个。
一般来说病毒都是以广播数据包来传播的,所以只需要查看每秒网络内的广播数据包数量就可以判断病毒危害的严重与否。
在dashboard面板中我们可以看到broadcasts/s处显示的信息为26个,也就是说对当前网络抓取结果是一秒钟有26个广播数据包。
和平常比要多一些。
第二步:
接下来我们在sniffer软件中切换到hosttable主机列表中,具体查看到底哪个计算机发送的广播数据包最多。
一般来说如果网络内有蠕虫病毒,那么这台主机的广播量要远远大于其他主机。
例如本例中就会看到有一台计算机的广播数据包为14344个,是其他正常计算机发送包的1000倍还多。
这样就可以判断该计算机有问题。
第三步:
我们在sniffer软件中切换到协议分析标签(protocoldistribution,看到网络内ARP数据包占用的比例比较大,达到了12%以上,这也是不正常的。
一般来说一个正常的网络应该99%以上数据包都是IP数据包,ARP数据包小于1%。
第五步:
了解到出现问题计算机的MAC地址后我们通过查询sniffer监控的数据,特别是查看该MAC和真正网关地址通讯时数据包的内容就可以找到他的IP地址了。
当然如果企业有DHCP服务器的话,也可以到DHCP服务器的地址租约池中查看该MAC地址对应的IP地址信息。
总之我们可以通过多种方法来通过MAC找到IP地址,从而最终确定病毒的根源。
第六步:
找到了这个有问题的MAC地址和IP地址后我们就可以针对该计算机进行断网隔离杀毒了。
杀毒完毕连接到网络中问题全部解决,网络恢复正常。
五、思考题
搜索sniffer监测网络故障的其他应用
实验三SOCKET编程基础实验
一、实验目的
●基于TCP协议进行网络编程,并通过实验对结果进行验证,加深对TCP协议以及其他网络基本概念理解。
●了解和掌握《基于TCP-面向连接的应用程序》的运行机制和编程方法;
●编写一个网络通信应用程序:
客户机发出数据请求命令,服务器根据其命令提供数据
二、实验环境
运行Windws2000/XP/2003操作系统的PC一台。
每台PC具有一块以太网卡,通过双绞线与局域网相连。
TCP/IP协议
三、实验内容
双人搭配实验,两人选择不同的操作系统环境,各编写一个程序,使用TCP/IP协议进行相互之间的发送和接收,两人实现简单的talk。
四、实验步骤
1、需求分析:
(1)服务器可以接收任何客户连接.。
(2)服务器在同一时刻只与一个客户通信,直到该客户退出才可以接收下一个客户。
(3)客户端程序使用参数输入服务器地址进行连接,随后接收服务器信息。
(4)服务器端以客户端IP地址向请求的客户发送信息,发送正确则显示发送字节数。
所以该程序包含两个独立程序的开发:
客户端和服务器端,且服务器端是单客户循环服务器模式。
2、编写服务器的程序:
包括编写启动服务器、处理客户连接、与客户端通信等代码。
(附上核心代码)
3、客户端的程序:
主要包括连接到服务器以及与服务器通信过程。
(附上核心代码)
4、编译执行程序。
5进行功能测试,记录测试步骤
6给出程序主要部分流程图。
五、思考题:
解释connect()、bind()等函数中structsockaddr*addr参数各个部分的含义,并用具体的数据举例说明。
实验总结:
通过设计和实现具有一定的功能的TCP应用程序,加深对TCP协议的理解逐步提高网络编程的能力。
实验四Socket重叠I/O模型编程实验
一、实验目的
初步掌握重叠I/O模型的应用方法;
掌握重叠套接口的编程方法及WSARECV等函数的使用。
二、实验环境
运行Windws2000/XP/2003操作系统的PC一台。
每台PC具有一块以太网卡,通过双绞线与局域网相连。
TCP/IP协议
三、实验内容
双人搭配实验,两人选择不同的操作系统环境,各编写一个程序,使用TCP/IP协议进行相互之间的发送和接收,客户端发送信息,服务器端应用重叠I/O操作接收信息并回送信息(ECHO)。
四、实验步骤
重叠I/O中,服务器端如何实现与多个客户同时通信?
五、思考题
实验五Socket实现ping命令实验
一、实验目的
●加深对ICMP协议的理解
●掌握原始套接字进行网络程序设计的方法
二、实验环境
运行Windws2000/XP/2003操作系统的PC一台。
每台PC具有一块以太网卡,通过双绞线与局域网相连。
TCP/IP协议
三、实验内容
按照拓扑结构图连接网络,使用拓扑验证检查连接的正确性。
本练习双人搭配实验作为一组,各编写一个ping程序,使用TCP/IP协议进行相互之间的发送和接收。
说明:
IP地址分配规则为主机使用原有IP,保证所有主机在同一网段内。
四、实验步骤
1、需求分析:
使用原始套接字实现ping命令的功能。
∙可以指定发送报文数。
∙可以指定发送报文长度。
∙可以指定发送报文的TTL值。
程序基本流程如下:
1)以AF_INET、SOCK_RAW和IPPROTO_ICMP为参数创建原始套接口。
2)启用IP_HDRINCL选项。
3)构造自己的IP头及ICMP报文,需要注意的是ICMP报文的校验和必须由应用进程计算并提供。
4)发送ICMPEcho报文,并解析、显示返回的ICMPEchoReply报文
2、编写服务器的程序:
包括编写启动服务器、处理客户连接、与客户端通信等代码。
(附上核心代码)
/*
*文件:
ping.cpp
*描述:
ping示例程序,控制台应用程序
*
#include
usingnamespacestd;
#pragmacomment(lib,"ws2_32.lib")
voidUsage(void)//用法
{
cout<<"**************************************"< cout<<"----------用法------------------------"< cout<<"程序名目标IP(主机名)[包大小][生存期][包个数]"< 28"< cout<<"**************************************"< } int_tmain(intargc,_TCHAR*argv[]) { intnNumber=4;//默认发送报文数 intnSize=32;//报文长度 intnTTL=128;//生存时间 intnRecvNum=0;//接受报文数 hostent*hp=NULL; sockaddr_insockSend; intuAddr=0; CICMPMyIcmp; //初始化Winsock MyIcmp.Initialize(); //解析主机 hp=gethostbyname(argv[1]);//是否输入主机名 if(hp==NULL) { uAddr=inet_addr(argv[1]);//输入IP地址 sockSend.sin_addr.S_un.S_addr=uAddr; } if((hp==NULL)&&(uAddr==INADDR_NONE)) { cout<<"Unknowhost"< return2; } if(hp! =NULL) { memcpy(&(sockSend.sin_addr),hp->h_addr,hp->h_length); uAddr=sockSend.sin_addr.S_un.S_addr; } for(inti=0;i { MyIcmp.SendICMP(ICMP_ECHO,uAddr); MyIcmp.RecvICMP(); cout< Sleep(1000);//延迟1秒钟 } return0; } ICMP类 /* *文件: icmp.h *描述: CICMPclass structIP_Header { unsignedintHeaderLength: 4;//IP首部长度 unsignedintVersion: 4;//协议版本 unsignedcharTOS;//服务类型 unsignedshortTotalLength;//数据长度 unsignedshortID;//标识 unsignedshortmflag;//其它标记 unsignedcharTTL;//生命期 unsignedcharProtocal;//协议 unsignedshortCheckSum;//检验和 unsignedintSourceIPAddress;//源IP地址 unsignedintDestIPAddress;//目的IP地址 }; //ICMP数据结构 structICMP_Header { unsignedchartype;//类型 unsignedcharcode;//编码 unsignedshortcksum;//检查和 unsignedshortID;//标识 unsignedshortnumber;//计数值 unsignedinttime;//时间 }; //ICMP类 classCICMP { public: CICMP(UINTuPacSize=DEF_PACKET_SIZE, intnTTL=DEF_TTL); BOOLInitialize(void);//初始化 USHORTCheckSum(USHORT*pBuffer,intnSize);//检查和 BOOLSendICMP(intnMsg,char*pAddr);//发送报文 BOOLSendICMP(intnMsg,SOCKADDR_IN*pAddr);//发送报文 BOOLRecvICMP(void);//接收报文 //设置包大小和生存期 private: char*m_pSendBuffer;//发送内存数据区 char*m_pRecvBuffer; IP_Header*m_pIPHeader;//IP数据头(接收) ICMP_Header*m_pIcmp;//ICMP数据头(发送或接收) SOCKETm_Sock;//套接字标识 SOCKADDR_INm_SockAddr; UINTm_uPacketSize;//指定发送报文长度 }; //***************************************************************** //Icmp.cpp //ping类的实现文件 //Winsock初始化 BOOLCICMP: : Initialize(void) { intnLen=m_uPacketSize+sizeof(ICMP_Header); m_pSendBuffer=(char*)xmalloc(nLen);//申请发送内存空间 m_pRecvBuffer=(char*)xmalloc(MAX_PACKET_SIZE);//申请接收内存空间 //初始化Socket2.1 WORDwVersionRequested; WSADATAwsaData; interr; intnTimeOut=TIMEOUT;//设置超时时间 wVersionRequested=MAKEWORD(2,1); //初始化Winsock err=WSAStartup(wVersionRequested,&wsaData); //建立原始套接字 m_Sock=WSASocket(AF_INET, SOCK_RAW, IPPROTO_ICMP, NULL, 0, 0); //设置超时时间 setsockopt(m_Sock,SOL_SOCKET,SO_RCVTIMEO,(char*)&nTimeOut,sizeof(nTimeOut)); setsockopt(m_Sock,SOL_SOCKET,SO_SNDTIMEO,(char*)&nTimeOut,sizeof(nTimeOut)); } //*********************************** //计算校验和 USHORTCICMP: : CheckSum(USHORT*pBuffer,intnSize) { unsignedlongcksum=0; while(nSize>1) { cksum+=*(pBuffer++); nSize-=sizeof(USHORT); } if(nSize>0) { cksum+=*(UCHAR*)pBuffer; } cksum=(cksum>>16)+(cksum&0xffff); cksum+=(cksum>>16); return(USHORT)(~cksum); } //发送ICMP数据包 BOOLCICMP: : SendICMP(intnMsg,sockaddr_in*pAddr) { char*p_data; intstate;//发送数据状态 pAddr->sin_family=AF_INET; pAddr->sin_port=0; intnICMPLen=sizeof(ICMP_Header);//ICMP头长度 memset(m_pSendBuffer,0,m_uPacketSize+nICMPLen);//用0填充内存区 //填充ICMP数据各项 m_pIcmp=(ICMP_Header*)m_pSendBuffer; m_pIcmp->type=nMsg; m_pIcmp->code=0; m_pIcmp->ID=(USHORT)GetCurrentProcessId();//获取进程ID m_pIcmp->number=AddNum(); m_pIcmp->time=GetTickCount(); m_pIcmp->cksum=0; //填充数据区 p_data=((char*)m_pIcmp+nICMPLen);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 手册
![提示](https://static.bdocx.com/images/bang_tan.gif)