Как мне обрабатывать команду LIST на моем FTP-сервере?

Я пишу FTP-сервер с Java, и теперь я хочу ответить на команду LIST. Достаточно отправить только имена файлов, и мне не нужно отправлять размер файла, владельца, разрешение и т. д. Кажется, что просто отправить некоторые строки, как имена файлов, не удовлетворяют клиента (я пробовал и ASCII, и бинарные форматы). Как я могу узнать, что FTP-клиент ожидает в качестве ответа?

Я тестирую свой сервер, используя FireFTP и FileZilla


person Pedram    schedule 27.05.2011    source источник
comment
Как насчет того, чтобы вместо этого просто прочитать один абзац о команде LIST в RFC? Если вам нужна конкретная поддержка для разных программ, вам придется прочитать их документацию, но я сомневаюсь, что они ожидают определенного формата от команды LIST - это не сработает.   -  person Voo    schedule 27.05.2011
comment
Я не смог найти ничего о стандарте ответа LIST в RFC.   -  person Pedram    schedule 27.05.2011
comment
Так что либо ваш ключ поиска сломан, либо вы не искали. Потому что в противном случае первый поиск по СПИСКУ покажет хороший аккуратный абзац на стр. 32.   -  person Voo    schedule 27.05.2011
comment
Как я сказал в вопросе, я отправил имена файлов, за которыми следует \r\n, но клиенты ничего не показывают. Он работает с командой ftp в Linux, но не с FireFTP и FileZilla.   -  person Pedram    schedule 27.05.2011


Ответы (2)


Если вы хотите создать совместимый FTP-сервер, вам необходимо обрабатывать LIST и NLST (стандартные команды), а также команды расширения MLST и MLSD.

Формат для команды LIST нигде не определен, и в мире встречается около 400 форматов. Использование формата Unix ls или формата Windows DIR будет работать с большинством клиентов, поскольку эти форматы довольно широко распространены и хорошо поддерживаются клиентами.

NLST — это только список имен файлов.

MLST и MLSD используют машинно-разборный формат (это то, что означает буква M), который описан в RFC 3659. Клиентам проще работать, и его поддержка очень приветствуются.

person Eugene Mayevski 'Callback    schedule 27.05.2011
comment
Спасибо. Теперь о СПИСОК, где я могу найти определенный формат для FireFTP или Filezilla? - person Pedram; 28.05.2011
comment
И как я могу заставить клиента отправлять MLST вместо LIST? Достаточно ли отправить его в ответе FEAT? - person Pedram; 28.05.2011
comment
Клиенты @Pedram обычно понимают множество форматов, и все они понимают общий формат Unix ls. Так что, если вы придерживаетесь формата unix, вы почти гарантированно получите положительные результаты с клиентом. Что касается MLST/MLSD — наш клиент предпочитает поддержку MLSD обычному списку, поэтому, если MLSD поддерживается, он будет использоваться. Это зависит от клиента. - person Eugene Mayevski 'Callback; 28.05.2011

Каноническим местом для поиска является соответствующий документ RFC: http://www.ietf.org/rfc/rfc959.txt

К сожалению, в данном конкретном случае RFC довольно расплывчат:

        Since the information on a file may vary widely from system
        to system, this information may be hard to use automatically
        in a program, but may be quite useful to a human user.

Чтобы обеспечить совместимость с существующими FTP-клиентами, лучше всего взглянуть на какое-нибудь широко распространенное программное обеспечение FTP-сервера и эмулировать формат его вывода.

person NPE    schedule 27.05.2011