本节我们看看ftp协议的数据包格式,同时使用代码加以实现。首先我们现在机器上安装ftp服务器,我在自己的机器上安装了QuickFTP Server,它是我随便找来的一款Mac ftp服务器,如下图所示,我将连接端口设置为2100,同时设置了用户名和密码,如此我们就可以通过抓包的方式了解协议的数据包格式:
然后打开wireshark,在过滤条件中输入tcp.port==2100,接着开始监听,如此就能抓取相应ftp数据包。接着我从手机上使用ftp客户端连接到服务器,同时使用设置好的用户名密码登陆,在wireshark上抓包结果如下:
注意到前3条是tcp连接的三次握手,第四条是双方沟通tcp数据传输一些参数可以忽略,真正属于ftp协议数据的是第5条服务器发送给客户端的信息,点击查看内如如下:
我们注意看它的数据部分,那才是ftp协议的专有内如,首先开始对应回复码220,上一节我们描述过回复码三位数字的作用,该数值表示服务器已经准备好接收客户端的请求,接下来的字符串时服务器对该回复码的文字解释,在协议实现是不用关心。这里要注意的是,所有包含协议数据的数据包都对应[PSH,ACK],如果仅仅含有[ACK]那就是对上一次接收到数据包的应答而已,所以点击下一条[PSH,ACK]就可以看ftp协议的下一个数据包内容,于是我们点击查看下一条包含ftp数据的协议