您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 计算机网络第三次实验
实验三使用Wireshark分析FTP协议一、实验目的分析FTP协议二、实验环境与因特网连接的计算机,操作系统为Windows,安装有Wireshark、IE等软件。三、实验步骤HTTP和FTP都可以用来通过网络传输对象和文件,但它们的工作方式截然不同。HTTP侧重于传送立即浏览的文件或供暂时高速缓存于客户端的文件。HTTP还侧重于表达那些包含了用于规定文件格式的首部信息,以便让浏览器能正确解释内容。而FTP却更侧重于专门进行数据传输,让用户自己去决定文件在本机上的存储时间和如何处理数据。FTP是一种有状态的协议。FTP客户端与服务器建立一个持续的会话,并通过这个会话发送多个请求。启动会话要输入用户名和密码,然而许多FTP服务器允许公开访问,即客户端可以使用匿名登录(anonymous)及随意设置的密码连接。一旦建立连接,对FTP会话的操作类似命令行下的操作,用户在提示符下操作,并能浏览一些文件和目录。用户在浏览目录时,FTP服务器保持对用户目录位置的跟踪。用户还可以请求从服务器获取文件或向服务器存储文件,对这些请求的解释与当前工作的目录有关。FTP总是为正在进行的控制通道维持一个TCP连接,然后建立一个独立的用于数据传输的TCP连接。控制通道通常建立在从客户端到FTP服务器端口21的连接,它用于描述每一个使用中的数据通道的属性,包括客户端或服务器是否启动传输,以及用什么IP地址和端口连接。用RFC-Editor搜索功能找到定义FTP协议的RFC文档。搜索结果表明该RFC文档在URL找到。如果你在浏览器窗口中输入以ftp://开头的URL,那么它将作为FTP客户端来获取想要的文件。1、俘获FTP分组(1)启动Wireshark嗅探器。(2)使用FTP工具或浏览器进入:,点击文件下载(3)在停止分组俘获。如图8.1所示:图8.1俘获的FTP分组2、查看FTP控制通道(1)本地客户端首先为控制通道初始化了一个到服务器上FTP端口(端口21)的TCP连接。(2)一旦控制通道建立,服务器首先通过该通道发送信息,表示已经为服务请求做好了准备。(3)在获取数据之前,FTP客户端必须发送一个用户名到服务器。这一步由FTP命令USER来完成。FTP服务器响应一个报文,并通知客户端发送完整的电子邮件地址作为密码(但许多客户端代之发送一个标识客户端软件的字符串作为密码,一些FTP服务器检查密码是否是电子邮件格式,但大部分不会这么做。)(4)选择TCP流中的一个分组,然后选择Analyze菜单下的“FollowTCPStream”,你就会看到控制通道的所有内容。(注意客户端命令带有深暗的背景,以与服务器响应区别)。如图2所示:图8.2FTP控制通道(5)用户名和密码交换完成,FTP客户端就会发送命令“PWD”来指定当前工作的目录。上图中显示服务器以当前工作的目录是根目录“/”作为响应,客户端也用发出命令“SYST”请求关于FTP服务器的信息。(6)“PASV”通知服务器准备第一个即将到来的数据连接。服务器响应“227EnteringPassingMode”,这表示服务器自动打开一个套接字来接受来自客户端的数据连接。3、查看FTP数据通道数据通道用于列出当前工作目录的内容。当建立了数据通道后,客户端通过控制通道发送LIST命令,请求列出当前工作目录的内容。当目录列表发送完毕后,数据通道也被关闭。(1)在目录信息传送之后,FTP客户端将传过来的目录信息显示给我们。在本实验中选择进入XXX目录,这个动作被解释为CWDXXX命令在控制通道中传送。在进入目录XXX后,目录的内容在第二个数据通道中显示出来,过程与根目录的相同。(2)在文件传送之前,还有一个额外的命令“TYPEI”。FTP支持多种不同的文件数据表示格式,比如用I表示图像,用A表示ASCII,E表示EBCDIC。(3)test.txt文件在第三个数据通道以类似传送目录列表的方式传送。总之,在本机与FTP服务器之间的这个跟踪记录中,建立了4个TCP连接---一个控制通道、两个列举目录的数据通道和一个文件传输的数据通道。如图所示,我们通过使用Analyze菜单下的工具来观察每个连接的一些概要信息。选择Statisics-ConversationList-TCP(IPv4IPv6).图8.3TCP会话列表注意,在出现的TCP对话中,连接不是以它们出现的顺序列出来的。4、请同学们利用校园网FTP服务器重做此实验。四、实验报告1、传送该文件花费了多长时间?全部FTP会话过程呢?只用来传送文件的连接呢?传送文件用了用了7.2s,全部Ftp会话过程用了8.1s,只用来传送文件用了5.7s2、使用FollowTCPStream检查控制通道,服务器发送多少数据到客户端?客户端发送多少数据到服务器?服务器发送11条数据到客户端(蓝字)客户端发送9条数据到服务器(黄字)3、使用FollowTCPStream检查每一个数据通道,在每个数据通道中,服务器发送了数据到客户端?客户端发送多少数据到服务器?哪个请求的数据最多,传送TXT文件还是目录列表信息?服务器发送了332byte数据到客户端客户端发送107byte数据到服务器传送txt文件请求的数据为3132byte传送txt目录列表信息请求的数据为3065byte所以传送txt文件请求的数据最多基于UDP的Socket编程本次实验要求自己动手实现一个能够在局域网中进行点对点聊天的实用程序,在本实验中要求使用UDP实现。目的:1.熟悉C++或JAVA等高级语言网络编程的基本操作。2.基本了解基于对话框的Windows应用程序的编写过程。3.实现UDP套接字编程(1人1组)。实验步骤数据报套接字使用UDP协议进行数据的传输,是一种无连接的数据传输模型,采用客户/服务器(C/S)结构进行设计。数据报套接字的服务进程和客户进程不需要在通信前建立连接,仅需要创建各自的套接字,简述如下:接收端:(1)、创建数据报套接字;(2)、绑定本机地址和端口;(3)、等候接收数据;(4)、使用完成后关闭套接字。发送端:(1)、创建数据报套接字;(2)、向指定地址和端口发送数据;(3)、使用完成后关闭套接字。客户端代码为:#includestdio.h#includewinsock.h#includeiostream#pragmacomment(lib,wsock32.lib)usingnamespacestd;intmain(){WSADATAwsaData;//存放socket的初始化信息WSAStartup(MAKEWORD(2,2),&wsaData);//调用Socket的函数之前必须调用WSAStartup完成对Winsock服务的初始化//创建套节字SOCKETs=::socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);if(s==INVALID_SOCKET)//无效套接字{printf(Failedsocket()%d\n,::WSAGetLastError());//获得错误代码return0;}//也可以在这里调用bind函数绑定一个本地地址,否则系统将会自动安排//填写远程地址信息sockaddr_inaddr;sockaddr_inaddr;addr.sin_family=AF_INET;addr.sin_port=htons(4567);intnLen=sizeof(addr);//注意,这里要填写服务器程序所在机器的IP地址,如果你的计算机没有联网,直接使用127.0.0.1即可addr.sin_addr.S_un.S_addr=inet_addr(127.0.0.1);//发送数据charreceivebuff[1024];charsendbuffer[1024];printf(-----------------我是客户端-------------------------:\n);while(TRUE){intnRecv=::recvfrom(s,receivebuff,1024,0,(sockaddr*)&addr,&nLen);if(nRecv0){//接收数据receivebuff[nRecv]='\0';printf(从服务器接收到信息:%s\n,receivebuff);if(strcmp(receivebuff,bye)==0){::closesocket(s);return0;}}//发送数据//scanf(%s,sendbuffer);gets_s(sendbuffer);::sendto(s,sendbuffer,strlen(sendbuffer),0,(sockaddr*)&addr,sizeof(addr));system(color0F);printf(客户端发送信息:%s\n,sendbuffer);if(strcmp(sendbuffer,bye)==0){::closesocket(s);return0;}}return0;}服务器端代码为:#includestdio.h#includewinsock.h#includestring.h#includeiostream#pragmacomment(lib,wsock32.lib)usingnamespacestd;intmain(){WSADATAwsaData;WSAStartup(MAKEWORD(2,2),&wsaData);//创建套节字SOCKETs=::socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);if(s==INVALID_SOCKET){printf(Failedsocket()\n);return0;}//填充sockaddr_in结构sockaddr_insin;sin.sin_family=AF_INET;sin.sin_port=htons(4567);sin.sin_addr.S_un.S_addr=INADDR_ANY;//绑定这个套节字到一个本地地址if(::bind(s,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR){printf(Failedbind()\n);return0;}//接收数据charreceivebuff[1024];charsendbuff[1024];sockaddr_inaddr;intnLen=sizeof(addr);printf(-----------------我是服务器-------------------------:\n);while(TRUE){intnRecv=::recvfrom(s,receivebuff,1024,0,(sockaddr*)&addr,&nLen);if(nRecv0){//接收数据receivebuff[nRecv]='\0';printf(从客户端接收到信息:%s\n,receivebuff);if(strcmp(receivebuff,bye)==0){::closesocket(s);return0;}//发送数据//scanf(%s,sendbuff);}gets_s(sendbuff);::sendto(s,sendbuff,strlen(sendbuff),0,(sockaddr*)&addr,sizeof(addr));system(color0F);printf(服务器发送信息:%s\n,sendbuff);if(strcmp(sendbuff,bye)==0){::closesocket(s);return0;}}return0;}
三七文档所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
本文标题:计算机网络第三次实验
链接地址:https://www.777doc.com/doc-5604066 .html