题目
在windows上搭建一个FTP应用,从客户端上传两个文件,并用wireshark抓包分析控制连接和数据连接的过程。
FTP
FTP— —协议中的活化石(从1971)
- 文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。
- FTP是TCP/IP提供的标准机制,用来从一个主机把文件复制到另一个主机。
- FTP使用两个TCP连接,一个连接用于传送数据(20),另一个连接用于传送控制信息(命令和响应,21)。
- 工作模式有主动模式和被动模式两种
步骤1:新建站点
Win+R打开运行对话框输入optionalfeatures
在启用或关闭Windows功能中选中Internet Information Services中FTP服务两项以及IIS6管理兼容性,确定 然后,找到IIS管理器,添加FTP站点
这里遇到第一个问题:关于IP选择 解决方法: 打开cmd,ipconfig一下,选择本地IP
继续
步骤2:测试连接
用浏览器测试连接,在浏览器网址地方输入ftp://和自己设置的IP 这里遇到了第二个问题
浏览器默认工作在被动模式,可能你的环境无法让ftp服务器工作在主动模式,这个很容易测试,你在IE浏览器的工具-internet选项-高级中取消使用被动ftp的设置,看看浏览器是否还可以访问ftp服务器,如果访问不了,那就是被动模式的问题。可能命令行是工作在主动模式下的,但当前环境不允许主动模式。
但是由于主机更新成Win11了,换到了虚拟机win10里面,然后就可以了(在虚拟机里IP只能选择一个,其余步骤和上面一样) (这里的text和1.txt是提前放到那个内容物理路径里的)
也可以用另一种方法测试连接,不需要关闭被动模式
在IIS里点基本设置 然后点测试设置 身份验证通过了,但是授权没有通过,看来这个测试也是挺重要的
现在解决**第三个问题:**无法验证对路径的访问
这个需要回到上一步,点击连接为 选中特定用户设置 填上自己电脑的用户名密码点确定 然后就可以授权了
步骤3:wireshark抓包
打开wireshark抓包,浏览器在这期间访问ftp,然后wireshark过滤ftp报文 额,没有抓到
wireshark是捕获网卡的数据包,本地访问本地必然没有经过无线网卡。
终于想起来一开始的题目了,要从另一台机器(客户端)向主机发送数据包
补充知识点
文件传输过程
- 服务器的数据传输进程从它的文件系统中找到客户进程请求传输的文件。
- 服务器的数据传输进程通过数据连接把该文件发送到用户数据传输进程。
- 用户数据传输进程把该文件将交给客户端文件系统进行存储。
- 文件传输完成后,由服务器端发出主动关闭数据连接的请求,关闭该数据连接。
数据连接
下列3种情况要在客户和服务器之间自动建立数据连接:
- 从客户向服务器发送一个文件;
- 从服务器向客户发送一个文件;
- 从服务器向客户发送文件目录列表。
控制连接和数据连接可以分别表示为:
- 控制连接:<客户端IP地址:控制连接端口,服务器端 IP地址:端口21>
- 数据连接:<客户端IP地址:数据连接端口,服务器端 IP地址:数据连接端口20>
将控制连接和数据连接分开的优点:
- 简化协议的设计和实现
- 控制连接在文件传输过程中一直可用
- 使用数据连接的关闭通知文件传输结束,允许动态创 建文件。
windows下常用命令
- mkdir:在服务器上建立指定目录; //MKD
- send(put):上传文件; //STOR
- get:下载文件; //RETR
- mget:下载多个文件;
- cd:切换目录; //CWD
- dir:查看当前目录下的文件;//LIST
- del:删除文件; //DELE
- bye:中断与服务器的连接;//QUIT
- ? 查看常用命令 //HELP
因为我上面是在虚拟机里搞的,所以客户端就选为主机了 但是 遇到第四个问题了:150 Opening ASCII mode data connection. 到这就不动了
这是因为:
服务端FTP的主动模式:客户端通过21端口PORT即主动模式连接服务端,连接并登录成功后,执行dir时,服务端会主动连接客户端的指定端口,如果客户端有防火墙或没有固定IP(也没做路由器映射),就会出现上述问题。 被动模式:客户端通过21端口连接服务端,连接并登录成功后,执行dir时,客户端会通过指定端口连接到服务端,此时服务端是处于被动连接状态。同样,如果服务端没有开放此端口的访问权限(路由映射),也会出现上述问题。 解决方案:在服务端FTP软件上开启被动模式,设置好被动模式的端口(如10021),并做好路由端口映射访问,客户端连接时就会使用被动模式,并连接成功。
额,上面把被动模式关了是吧, 看了一下服务端开着被动的,客户端原本没开,开了依旧150 将服务器换成关闭依旧150 开来问题不是出在这
尝试关闭服务器端防火墙,依旧显示150
搜到一个这样的解决办法:打开客户端防火墙设置,在“允许windows Defender防火墙通过应该程序或功能”中选允许文件传输 尝试
终于
数据包分析
根据上述步骤传输的文件抓到了ftp包 Frame1-3,客户端使用55247端口向服务器端21端口发哦是那个控制指定,建立三次握手
Frame4,服务端收到请求后响应客户端,表示控制连接建立
Frame5-12,客户端用用户名密码登录。6:服务端response8传输了用户名,11传输了密码,12服务端回复登陆成功
Frame13客户端发送TCP请求数据连接;13、19、21TCP三次握手,22:数据连接建立成功;18:客户端发送PORT请求并通知服务器自己接受命令的端口61752;20:服务端确认为主动模式
Frame23-27数据传输。23:客户端请求上传文件text1.txt;24:服务器端确认数据连接传输开始;25:客户端上传文件text1.txt并且为PORT主动模式,数据包打开可以看到内容。26、27客户端与服务端互相确认
Frame28-31:TCP四次挥手,32:FTP确认数据传输断开,回到控制连接
Frame33-47传输第二个文件与13-32一样,34中显示这次数据连接依旧请求的是主动模式,自己的端口号为61754
Frame48-55控制连接断开。48、49客户端与服务端对上一报文的互相确认;50:客户端向服务端发送结束连接申请;51:服务端确认;52-55:TCP四次挥手,连接结束。
|