通过解读数据包内容对FTP协议的分析

    准备好两台局域网内的电脑,一台配置为FTP服务器,另一台进行登录,并使用Wireshark抓包。

    此时两台电脑的基本状态为:两台电脑(Win7系统)直接通过网线相连,其中FTP服务器的IP设为192.168.1.1,客户端的IP为192.168.1.2。FTP工具为Filezilla(由xampp附带)。

    

    抓取的包相当杂乱,于是使用过滤器(Filter)对其进行过滤。

    

    当过滤出这些FTP包后猛地一惊,大片的黑底红字,即Bad TCP。相应显示的错误信息为“Header checksum:0x0000 [incorrect, should be 0xb2d1 (maybe cause by 'IP Checksum Offload'?)]”。网上搜索后才知道,其实,这是由于网卡中关于“硬件校验和(Offload checksum)”的选项所致。

    

    我的电脑中该项值为“Rx & Tx 开启”,即Windows的传输层将随机填充TCP校验和,因此在本机上抓取的数据包是Bad CheckSum。但网卡会自动计算正确的校验码然后发送,因此对方收到的仍然是正确的TCP包。

    下面对FTP包做简要分析:

    

    上图是前几个FTP包。具体的“对话内容”有:

        [客户端通过浏览器访问FTP服务器]

        服务器(S):220(服务就绪,执行新用户请求),并发送了一个欢迎页面。

        客户端(C):USER anonymous。

        S:331(用户名正确,需要密码)。

        C:PASS chrome@example.com。

        S:530(未登录),not log in, user account has been disabled(账户无效)。

        C:quit(退出)。

    以上内容应该为浏览器自动执行,以试图以匿名用户身份登录服务器,但我在FTP服务期设置时Disabled掉了用户anonymous的使用权,所以登录失效了。浏览器出现了登录的对话框。

        S:220(服务就绪,执行新用户请求),并发送了一个欢迎页面。

        C:USER test。

        S:331(用户名正确,需要密码)。

        C:PASS test。

        S:230用户已登录,继续进行。),log on。

        C:SYST(获取FTP服务器的操作系统)。

        S:215(回复系统类型),UNIX emulated by Filezilla(由Filezilla仿真了一个Unix的系统)。

        C:PWD(获取当前目录)。

        S:257(创建pathname),返回了“/”根目录。

        C:TYPE I(设置二进制流数据传输。TYPE A为ASCII码,默认。)。

        S:200(确定命令), Type set to I。

        C:EPSV(针对IPV6的被动模式。IPV4的主、被动模式分别为PORT、PASV,IPV6分别为EPRT、EPSV。)。

        S:229,Entering Extended Passive Mode(这是一个报错,在DOS环境下需Ctrl+C然后键入EPSV4 OFF,但浏览器下未进行操作)。

        C:SIZE /...(获取服务器上相应文件的大小)。

        S:213(文件状态),...。

        C:CWD /...(更换文件目录,Change working directory)。

        S:550(请求拒绝),CWD Failed(这里是因为上面我选中的是exe文件,仍处于根目录中,不能进行更换路径操作)。

        C:RETR /...(文件传输,File Transfer)。

        S:150(文件状态正常,准备打开数据连接),Connection accept。

        [数据传输]

        S:226(关闭数据连接,请求操作成功),Transfer OK。

        C:quit

        S:221(关闭控制连接),Goodbye。

    以上便是通过抓包,对一次FTP服务器访问过程的解读。接下来,我将着手整理出FTP的状态码和命令。

posted @ 2012-03-09 19:51  任琦磊  阅读(4034)  评论(6编辑  收藏  举报