FTP协议的粗浅学习--利用wireshark抓包分析相关tcp连接
一、为什么写这个
昨天遇到个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的每个包都在包的结尾用了\r\n进行标识。
如下:

其中的0d、0a在asicc中就是回车、换行的意思。
六、一些参考资料
FTP协议的粗浅学习--利用wireshark抓包分析相关tcp连接的更多相关文章
- Wireshark抓包实例诊断TCP连接问题
转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese 介绍 前文论述了TCP基础知识,从本节开始,通过TCP抓包实例来诊断TCP常见问 ...
- 利用tcpdump抓包工具监控TCP连接的三次握手和断开连接的四次挥手
TCP传输控制协议是面向连接的可靠的传输层协议,在进行数据传输之前,需要在传输数据的两端(客户端和服务器端)创建一个连接,这个连接由一对插口地址唯一标识,即是在IP报文首部的源IP地址.目的IP地址, ...
- wireshark 抓包分析 TCPIP协议的握手
wireshark 抓包分析 TCPIP协议的握手 原网址:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html 之前写过一篇 ...
- wireshark抓包分析——TCP/IP协议
本文来自网易云社区 当我们需要跟踪网络有关的信息时,经常会说"抓包".这里抓包究竟是什么?抓到的包又能分析出什么?在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及如何通 ...
- TCP\IP协议实践:wireshark抓包分析之链路层与网络层
目录 TCP\IP协议实践:wireshark抓包分析之链路层与网络层 从ping开始 链路层之以太网封装 ip首部 开启ping程序,开始抓包 由一个ping的结果引出来的两个协议ARP ICMP ...
- Wireshark抓包分析/TCP/Http/Https及代理IP的识别
前言 坦白讲,没想好怎样的开头.辗转三年过去了.一切已经变化了许多,一切似乎从没有改变. 前段时间调研了一次代理相关的知识,简单整理一下分享之.如有错误,欢迎指正. 涉及 Proxy IP应用 原理/ ...
- http2 技术整理 nginx 搭建 http2 wireshark 抓包分析 server push 服务端推送
使用 nginx 搭建一个 http2 的站点,准备所需: 1,域名 .com .net 均可(国内域名需要 icp 备案) 2,云主机一个,可以自由的安装配置软件的服务器 3,https 证书 ht ...
- Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析
Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析 一.介绍计算机网络体系结构 1.计算机的网络体系结构 在抓包分析TCP建立链接之前首先了解下计算机的网络通信的模型,我相信学习过计 ...
- 【计算机网络】wireshark抓包分析1
学习计算机网络很久了,但总是局限于书本知识,感觉get不到重点.经师兄建议用wireshark抓包分析看看. 我自己以前并没有做过抓包分析,所以这篇博文可能会有很多错误,只是我自己的一个记录,路过的亲 ...
随机推荐
- 安卓开发笔记——TabHost组件(二)(实现底部菜单导航)
上面文章<安卓开发复习笔记——TabHost组件(一)(实现底部菜单导航)>中提到了利用自定义View(ImageView+TextView)来设置一个底部菜单的样式 这边再补充一种更为灵 ...
- EasyUI的功能树之扁平化
上篇博客主要介绍了异步加载树的方法,通过前台传给后台一个节点的id值,然后当单击节点加号时,查询并显示其子节点的数据.其实如果不是很大的数据,我们本可以次把树中所有节点都加载上来的.也就是说,我的Ac ...
- 近阶段学习总结(EasyUI的使用)
最近阶段正在学习Js框架的使用,目前正在详细了解JQuery EasyUI 的使用. jQuery EasyUI 框架帮助我们轻松建立站点: easyui是一个基于jquery的集成了各种用户界面的插 ...
- 【中文分词】DAG、DP、HMM、Viterbi
http://blog.sina.com.cn/s/blog_8267db980102wq41.html http://www.cnblogs.com/leeshine/p/5804679.html ...
- 在AD的环境下,更改计算机名导致TFS,无法连接解决办法
D:\vs2015>tf workspaces /collection:http://10.1.0.104:8080/tfs/dahua.adrms /updateComputerName:WI ...
- Go中error类型的nil值和nil
https://my.oschina.net/chai2010/blog/117923
- 关于解决emoji表情的存储
近段时间处理,由于工作需求,需要使得用户插入的emoji表情能够正常显示及使用,所以做个总结,以备后用. 说明:本方法只在mysql环境中测试 1.首先程序在连接数据库时,要指定数据库字符集的设置 c ...
- 【scala】 scala xml 处理(⑨)
1.scala 处理xml 2. 获取属性 3.修改节点 4.遍历 5.模式匹配 6.命名空间 7.文件加载 import scala.xml._ /** * @author xwolf * @sin ...
- 记安装ubuntu server和一些程序
1. 安装ubuntu server 按照流程走了一遍,一切画面都正常,就是重启后界面只有一个光标闪啊闪,我不知道应该再装一遍还是找老大来解决,想了下,以前电脑就是因为出错才重装的,现在这个情况有可能 ...
- Git Step by Step – (7) Git远程仓库(续)
上一篇文章介绍了Git远程仓库的一些使用,但是还是有些东西需要补充一下,所以有了这个续篇. .gitignore 前一篇中,我们介绍了Git的patch功能,当我们生成patch之后,"gi ...