- 论坛徽章:
- 1
|
这是代码的一部分:
static struct {
char *name;
int index;
} ftp_cmds[] = {
//RFC959
{"USER", 0}, //[00]USER username\r\n
{"PASS", 1}, //[01]PASS password\r\n
{"ACCT", 2}, //[02]ACCT account-information\r\n
{"CWD", 3}, //[03]CWD pathname\r\n
{"CDUP", 4}, //[04]CDUP\r\n
{"SMNT", 5}, //[05]SMNT pathname\r\n
{"QUIT", 6}, //[06]QUIT\r\n
{"REIN", 7}, //[07]REIN\r\n
{"PORT", 8}, //[08]PORT h1,h2,h3,h4,h5,h6\r\n
{"PASV", 9}, //[09]PASV\r\n
{"TYPE", 10}, //[10]TYPE type-code\r\n
{"STRU", 11}, //[11]STRU structure-code\r\n
{"MODE", 12}, //[12]MODE mode-code\r\n
{"RETR", 13}, //[13]RETR pathname\r\n
{"STOR", 14}, //[14]STOR pathname\r\n
{"STOU", 15}, //[15]STOU\r\n
{"APPE", 16}, //[16]APPE pathname\r\n
{"ALLO", 17}, //[17]ALLO decimal-integer R decimal-integer\r\n或ALLO decimal-integer\r\n
{"REST", 18}, //[18]REST marker\r\n
{"RNFR", 19}, //[19]RNFR pathname\r\n
{"RNTO", 20}, //[20]RNTO pathname\r\n
{"ABOR", 21}, //[21]ABOR\r\n
{"DELE", 22}, //[22]DELE pathname\r\n
{"RMD", 23}, //[23]RMD pathname\r\n
{"MKD", 24}, //[24]MKD pathname\r\n
{"PWD", 25}, //[25]PWD\r\n
{"LIST", 26}, //[26]LIST pathname\r\n或LIST\r\n
{"NLST", 27}, //[27]NLST pathname\r\n或NLST\r\n
{"SITE", 28}, //[28]SITE stringr\r\n
{"SYST", 29}, //[29]SYST\r\n
{"STAT", 30}, //[30]STAT pathname\r\n或STAT\r\n
{"HELP", 31}, //[31]HELP string\r\n或HELP\r\n
{"NOOP", 32}, //[32]NOOP\r\n
//扩展
{"SIZE", 33}, //[33]SIZE pathname\r\n
{"MDTM", 34}, //[33]MDTM pathname\r\n
//别名
{"XCUP", 4}, //[04]CDUP
{"XCWD", 3}, //[03]CWD
{"XMKD", 24}, //[24]MKD
{"XPWD", 25}, //[25]PWD
{"XRMD", 23}, //[23]RMD
{NULL, -1}
};
2年前写代码时,主要参考了RFC959和VSFTPD的HELP命令输出以及Server-U最常用的SIZE和MDTM两个扩展命令的介绍
使用过程中发现没有支持IIS的OPTS命令造成一些混合字符集的困扰
SMNT命令由于安全问题没有实现
一时间心血来潮,感觉有必要改写一下,变成一个比较通用的FTP服务程序,
前一阵子看了下Server-U的介绍,加入HOST命令扩展用于多个主机域
我则倾向于常见MTA的多域处理方式,用user@host.domain作为用户名实现同一IP地址下FTP虚拟主机
(HTTP协议利用Host: 头域定位虚拟主机,我想Server-U用HOST的命令应该是这么来的)
当然,FTP协议实现的代码远没有管理界面来的多(如果HTTP管理界面也用C语言写的话)
就想到这么多,欢迎拍砖。。。。。 |
|