Я пытаюсь создать клиент ftp на основе терминала в python 2.7. Я установил сервер (FileZilla Server версии 0.9.41 beta) и попытался выполнить скрипт, который общается с этим сервером.FTP-сервер не реагирует на USER requst
Мои Client.py:
import socket
import time
host = raw_input("ip ->")
port = 21
s = socket.socket()
s.connect((host, port))
print s.recv(8192)
print s.recv(8192)
s.send("USER user")
print "sent"
print s.recv(512)
s.close()
Client.py выход:
ip ->localhost
220-FileZilla Server version 0.9.41 beta
220-written by Tim Kosse ([email protected])
220 Please visit http://sourceforge.net/projects/file
sent
421 Login time exceeded. Closing control connection.
выход Сервер:
(000010)02.01.2017 03:45:22 - (not logged in) (127.0.0.1)> Connected, sending welcome message...
(000010)02.01.2017 03:45:22 - (not logged in) (127.0.0.1)> 220-FileZilla Server version 0.9.41 beta
(000010)02.01.2017 03:45:22 - (not logged in) (127.0.0.1)> 220-written by Tim Kosse ([email protected])
(000010)02.01.2017 03:45:22 - (not logged in) (127.0.0.1)> 220 Please visit http://sourceforge.net/projects/filezilla/
(000010)02.01.2017 03:46:22 - (not logged in) (127.0.0.1)> 421 Login time exceeded. Closing control connection.
(000010)02.01.2017 03:46:22 - (not logged in) (127.0.0.1)> disconnected.
почему сервер игнорировать мой "пользователя USER" запрос? (я хотел бы закодировать это без помощи других библиотек/модулей, чем «сокет», (я знаю о существовании ftplib, но я не хочу его использовать :)))
Это сделало трюк, большое спасибо :) Но почему это сработало? –
FTP-серверу нужен разделитель (т. Е. Разрыв строки), чтобы узнать, когда закончится команда. В вашем случае пользователь 'USER user '- это команда, и вам нужно завершить' \ n', чтобы завершить свою команду. –
@HansWuast: что касается «почему»: есть стандарты, которые необходимо соблюдать при реализации протокола, а FTP определен в [RFC 959] (https://www.ietf.org/rfc/rfc959.txt), поэтому, пожалуйста, посмотрите там, почему вам нужен конец строки. И фактически добавление '\ n' только неверно, хотя оно работает со многими серверами. Правильный конец команды будет не '\ n', а' \ r \ n'. –