关于FTP,有被动模式和主动模式两种,有人说是验证模式,我不太认同,但懒得查资料,不想咬文嚼字,纠结这种事情。下面简单从自己理解的角度来记录一下两种模式的学习笔记。

1、被动模式

代码流程:
客户端:发PASV\r\n命令到21端口
服务器:通过21端口向客户端发数据通道端口(数据通道端口由服务器生产)
客户端:使用数据通道端口重新连接服务器,connect会创建新的socket,之后数据通道使用该socket

PASV客户端实例:

latelee@localhost:~$ ftp 192.168.18.88
Connected to 192.168.18.88.
220 Serv-U FTP Server v6.0 for WinSock ready...
Name (192.168.18.88:latelee): latelee
331 User name okay, need password.
Password:
230 User logged in, proceed.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> passive // pasv模式
Passive mode on.
ftp> ls
227 Entering Passive Mode (192,168,18,88,25,172)
150 Opening ASCII mode data connection for /bin/ls.
drw-rw-rw-   1 user     group           0 May  4 18:04 .
drw-rw-rw-   1 user     group           0 May  4 18:04 ..
drw-rw-rw-   1 user     group           0 May  4 18:22 test
226 Transfer complete.
ftp> LIST // 无此命令
?Invalid command
ftp> list // 无此命令
?Invalid command

服务器对应命令:

Connected to 192.168.18.111 (Local address 192.168.18.88)
220 Serv-U FTP Server v6.0 for WinSock ready...
USER latelee
331 User name okay, need password.
PASS xxxxx
User LATELEE logged in
230 User logged in, proceed.
SYST
215 UNIX Type: L8
PASV
227 Entering Passive Mode (192,168,18,88,44,213)
LIST
150 Opening ASCII mode data connection for /bin/ls.
226 Transfer complete.
QUIT
221 Goodbye!
Closing connection for user LATELEE (00:00:15 connected)

二、主动模式

代码流程:
客户端:生成随机的大于1024的端口NUM,发PORT A,B,C,D,n,m\r\n命令到21端口(其中A,B,C,D为本机IP,n=NUM/256,m=NUM%256)
服务器:通过21端口向客户端发送是否成功的信息(成功:200 PORT Command successful.)
客户端:监听上面生成的NUM端口,如有连接,则Accept得到新的socket,数据通道即使用该socket。
注:资料2的文章说在监听NUM+1的端口,但我实际测试使用NUM也可以。另外,“PORT A,B,C,D,n,m\r\n”最后的回车换行和之前的字符是不能有空格的!因为写代码时是用sprintf组装字段的,习惯性多带个空格。正确的是示例如下:

sprintf(buffer, "PORT %d,%d,%d,%d,%d,%d\r\n", ip1, ip2, ip3, ip4, port>>8, port&0xFF);

这个问题搞了差不多半个钟头才意识到。

实然想起上个月搞网络问题打印PHY寄存器,就是因为没有使能网络设备直接访问寄存器挂掉,当时是晚上7点,大多数人都回家吃饭了,心又急,脑子一时短路,来回验证超过半小时后才发现是这样原因。程序员对细节不能不注意。我相信有很多工程会因为将“==”误写为“=”或者因为某些括号等等问题导致debug花费大量时间。

主动模式客户端实例

latelee@localhost:~$ ftp 192.168.18.88
Connected to 192.168.18.88.
220 Serv-U FTP Server v6.0 for WinSock ready...
Name (192.168.18.88:latelee): latelee
331 User name okay, need password.
Password:
230 User logged in, proceed.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT Command successful.
150 Opening ASCII mode data connection for /bin/ls.
drw-rw-rw-   1 user     group           0 May  4 18:04 .
drw-rw-rw-   1 user     group           0 May  4 18:04 ..
drw-rw-rw-   1 user     group           0 May  6 11:24 test
226 Transfer complete.
ftp> LIST
?Invalid command
ftp> list
?Invalid command
ftp> 

服务器对应命令:

Connected to 192.168.18.111 (Local address 192.168.18.88)
220 Serv-U FTP Server v6.0 for WinSock ready...
USER latelee
331 User name okay, need password.
PASS xxxxx
User LATELEE logged in
230 User logged in, proceed.
SYST
215 UNIX Type: L8
PORT 192,168,18,111,175,229
200 PORT Command successful.
LIST
150 Opening ASCII mode data connection for /bin/ls.
226 Transfer complete.
QUIT
221 Goodbye!

三、命令一览

下面命令是从网上一个开源工程头文件找到的,我觉得很简洁,记录于此。其中<CRLF>对应代码“\r\n”,<SP>表示有空格,其它没有出现<SP>说明是没有空格的。一般FTP命令由实际命令字符和回车换行组成,这两部分是没有空格的。但以前搞的时候,发现PASV命令与“\r\n”有无空格都能正常执行,不过为了不出意外,最好不带空格。

FTP commands - Overviewsimple commandsCDUP <CRLF>QUIT <CRLF>REIN <CRLF>PASV <CRLF>STOU <CRLF>ABOR <CRLF>PWD  <CRLF>SYST <CRLF>NOOP <CRLF>PORT <SP> <host-port> <CRLF>TYPE <SP> <type-code> <CRLF>CWD  <SP> <pathname> <CRLF>MKD  <SP> <pathname> <CRLF>SITE <SP> <string> <CRLF>HELP [<SP> <string>] <CRLF>DELE <SP> <pathname> <CRLF>RMD  <SP> <pathname> <CRLF>STRU <SP> <structure-code> <CRLF>MODE <SP> <mode-code> <CRLF>STAT [<SP> <pathname>] <CRLF>ALLO <SP> <decimal-integer>[<SP> R <SP> <decimal-integer>] <CRLF>SMNT <SP> <pathname> <CRLF>commands for logon sequenceUSER <SP> <username> <CRLF>PASS <SP> <> password <CRLF>ACCT <SP> <account-information> <CRLF>commands for renamingRNFR <SP> <pathname> <CRLF>RNTO <SP> <pathname> <CRLF>RETR <SP> <pathname> <CRLF>STOR <SP> <pathname> <CRLF>APPE <SP> <pathname> <CRLF>REST <SP> <marker> <CRLF>LIST [<SP> <pathname>] <CRLF>NLST [<SP> <pathname>] <CRLF>non RFC-CommandsSIZE <SP> <pathname> <CRLF>MDTM <SP> <pathname> <CRLF>

FTP命令注解可参考:http://www.nsftools.com/tips/RawFTP.htm

参考资料:

1、http://slacksite.com/other/ftp.html
2、http://securitywing.com/active-vs-passive-ftp-mode/
3、http://www.nsftools.com/tips/RawFTP.htm
李迟 5.7

FTP主动模式和被动模式学习笔记相关推荐

  1. FTP笔记-FTP主动模式和被动模式

    FTP的全称为:File Transfer Protocol,也就是传文件的,分为主动模式和被动模式,具体看下面的图: 这里有个要注意的地方:大部分情况下都是用的被动模式,主动模式基本上不推荐用. 因 ...

  2. FTP主动模式及被动模式

    FTP的特殊性: 大多数的TCP服务是使用单个的连接,一般是客户向服务器的一个周知端口发起连接,然后使用这个连接进行通讯.但是,FTP协议却有所不同,它使用双向的多个连接,而且使用的端口很难预计.一般 ...

  3. java ftp主动模式和被动模式_什么是ftp主动模式和被动模式

    FTP是文件传输协议的简称,ftp传输协议有着众多的优点所以传输文件时使用ftp协议的软件很多,ftp协议使用的端口是21(也称为控制端口),其实还有一个数据端口20,根据FTP工作方式的不同,数据端 ...

  4. FTP主动模式和被动模式!

    FTP简介 FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一.FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端.其中FTP服 ...

  5. FTP主动模式和被动模式讲解

    主动模式FTP与被动模式FTP该如何选择 无论是主动模式还是被动模式,其要进行文件传输都必须依次建立两个连接,分别为命令连接与数据连结.而主动模式与被动模式的差异主要体现在数据连结通道上.为了说明两者 ...

  6. ftp主动模式和被动模式的区别

    一.FTP是什么 FTP的中文名称是"文件传输协议",是File Transfer Protocol三个英文单词的缩写.FTP:是TCP/IP协议组中的协议之一,其传输效率非常高, ...

  7. 【FTP】FTP主动模式与被动模式

    主动模式 客户机与服务器之间建立连接时,客户机是大于1024的端口上,服务器是20端口. 客户机的端口是大于1024的,而服务器的端口是21端口接收请求,而是20端口给客户机回应. 允许FTP客户机从 ...

  8. 关于FTP主动模式与被动模式的一点理解

    又一次面试的时候,面试像这样问我:请简述FTP的主动模式与被动模式的区别?FTP这玩意不是天天都要用到的么,看起来这么简单的问题我居然回答不上来,好尴尬!经过几天的思考与理解,终于有点眉目,拙见让诸位 ...

  9. FTP 主动模式、被动模式

    哈喽,大家好!我是艺博东 ,一个思科出身专注于华为的网工:好了,话不多说,我们直接进入正题. 文章目录 拓扑 FTP主动模式 FTP被动模式 FTP主动模式.FTP被动模式是针对服务器来说的,服务器主 ...

最新文章

  1. R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(分组颜色配置、位置配置)实战
  2. C语言合理字符的代码,改善C语言程序代码的125个建议,第62到89个建议!
  3. Spring配置多数据源错误总结
  4. 菜鸟级三层框架(EF+MVC)项目实战之 系列一 EF零基础创建领域模型
  5. Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(LabelFrame/Checkbutton/Radiobutton)
  6. notebook中kiil进程从而释放显存的方法
  7. 【译】Privacy and machine learning: two unexpected allies
  8. SAP BSP同本地硬件的集成
  9. 20220130---CTF WEB方向刷题WP-----网页初始index.php/robots.txt
  10. 读书印记 - 《沟通的艺术:一本手把手教你社交沟通的书》
  11. 离散数学之集合论 【上】
  12. sqoop-import 并行抽数及数据倾斜解决
  13. Dr.COM 宽带认证客户端频繁掉线问题解决方案
  14. miui主题编辑器和java jdk_MIUI主题编辑器手机版下载|MIUI主题编辑器安卓版下载 v1.0.8 - 跑跑车安卓网...
  15. 大华GigE工业相机VS2022+GigeVison SDK配置
  16. 如何把pdf转换成ezd_怎么把pdf文档转换成word
  17. RK3399外设驱动之RTC驱动(一)
  18. 软件工程——2021软科中国大学专业排名
  19. 文化人类学课后习题答案
  20. python获取文件夹下指定后缀名文件列表(可手工设定是否遍历子文件夹)cmd复制文件命令使用

热门文章

  1. 得物:两款问题商品系标识标注方式不符合最新规定 已先行下架商品
  2. 特斯拉推出儿童版电动四轮越野摩托车
  3. iPhone 13临近发布,富士康需要在9月底前再招聘20万名工人
  4. 消息称京东方通过苹果认证 本月开始向iPhone 12供货OLED面板
  5. 一加将于10月14日推出新款Buds系列真无线耳塞
  6. 阿里巴巴港股股价创历史新高 市值超6.1万亿港元
  7. 华为Mate 40 Pro屏幕贴膜曝光:双孔曲面屏实锤?
  8. 滴滴货运首批试点城市揭晓 23日起在成都、杭州上线
  9. 中国女排代言作业帮直播课,作业帮累计用户已超8亿
  10. 持续狂奔的拼多多快追上阿里了