zoukankan      html  css  js  c++  java
  • FTP协议的粗浅学习--利用wireshark抓包分析相关tcp连接

    FTP相关文章:

    Linux上的ftp服务器 vsftpd 之配置满天飞--设置匿名用户访问(不弹出用户名密码框)以及其他用户可正常上传

    一、为什么写这个

    昨天遇到个ftp相关的问题,关于ftp匿名访问的。花费了大量的脑细胞后,终于搞定了服务端的配置,现在客户端可以像下图一样,直接在浏览器输入url,即可直接访问。

    期间不会弹出输入用户名密码来登录的窗口。

    今天我主要是有点好奇,在此过程中,究竟是否是用匿名账户“anonymous”该账户登录了,还是根本不需要登录呢?

    于是用wireshark抓包了一下。

    二、抓包过程

    我这边直接用了捕获过滤器抓本机和ftp之间的包。抓包后直接ctrl+F进行文本查找。

    果然发现是发送了USER anonymous命令的。

    三、ftp的基础知识

    来源于:https://blog.csdn.net/iloli/article/details/5805262

    FTP是File Transfer Protocol(文件传输协议)的缩写,用来在两台计算机之间互相传送文件。相比于HTTP,FTP协议要复杂得多。复杂的原因,是因为FTP协议要用到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。

    FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。

    PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。

    PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。

    总结来说,主动模式时,由客户端提供数据传输端口。。被动时,由服务器端提供数据传输的端口。

    四、ftp基础的几个命令进行抓包分析

    1、操作记录

    在windows的cmd里面,一般默认就是有ftp命令的。

    操作步骤很简单,只是匿名用户登录,查看目录下文件,然后退出登录。

    2、抓包分析

    2.1建立连接

    前面几个抓包为建立连接。

    然后是服务端发回的响应:(请求的包没看到,不知道是不是对应我上面的ftp 10.10.20.2操作)

    2.2登录操作:

    然后是登录成功的响应:

    2.3 ls命令请求包

    接下来是ls命令触发的一个包:

    该包主要是客户端向服务端发起的一个请求。

    当 PORT 命令被提交时,它指定了客户端(10.15.4.46)上的一个端口而不是服务器的。

    该端口号的计算规则就是:211*256 + 220 = 54236,211与220也就是下面红框标识出来的数字的最后两位.

    下面是服务器端的响应,表示连接已建立。再下面一条是客户端发送的ls命令,查看目录下的文档。

    2.4 服务端建立单独连接来发送ls的返回数据

     再下来是服务端要返回数据了,于是主动向客户端的54236端口请求建立tcp连接。(就是上面计算出来的那个)

     

    见下图,这期间,夹杂了原有的21端口与客户端的连接的响应消息。

    2.5 ls的数据传输及连接断开

    连接断开分了两部分,一部分是ftp层面的。一部分是tcp层面的连接断开。

    其中tcp连接断开由服务器端发起。

    五、个人一点感悟

    以前面试腾讯时,被问过tcp粘包相关的问题。问到说ftp是怎么解决粘包的。

    当时没答上来。后来才知,ftp的每个包都在包的结尾用了 进行标识。

    如下:

    其中的0d、0a在asicc中就是回车、换行的意思。

     六、一些参考资料

    Wireshark数据抓包分析之FTP协议

     ftp两种模式详解

  • 相关阅读:
    按照鬼哥学so变化,四,第一章的例子
    浏览器发送总共下载文件2第二个请求,如何“下载”仅仅记录1次要?
    hdu 3371 Connect the Cities
    自己写RTPserver——大约RTP协议
    cocos2d-x3.2中将XCode发展project转移到VS2010可能会发生错误
    apache kafkac系列lient发展-java
    大约++和--了解运营商
    socket计划——一个简单的例子
    PhotoShop基本工具 -- 移动工具
    ZA7783:MIPI转LVDS/MIPI转RGB888/RGB转LVDS
  • 原文地址:https://www.cnblogs.com/grey-wolf/p/9882125.html
Copyright © 2011-2022 走看看