Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизFTP-сервер не открывает сокет Найти похожие ветки
← →
Владимир777 (2012-08-19 18:41) [0]1. Пишу простенький ftp-клиент c использованием компонента ClientSocket.
2. Тестирую в Filezilla Server, на локалке.
3. Последовательность действий:
открываю сокет для команд (порт -21).
отправляю логин, пароль. Получаю положительные ответы.
отправляю команду PORT (порт 20) для активного подключения.
получаю ответ: 200 Port command successful
отправляю команду LIST и в окне сервера получаю:
"150 Opening data channel for directory list.
425 Can"t open data connection."
Знаю тема частая, но общего и внятного решения я так и не нашёл
← →
Владимир777 (2012-08-19 18:57) [1]Если меняю номер порта для сокета данных на любой другой (кроме 20 и 21), то в окне Filezilla Server на короткое время в колонке transfer напротив моего подключения (на командном сокете) появляется рисунок папки (то есть сервер пытается что-то передать, но не может).
Если меняю номер порта для сокета данных на 21 (оба - 21), то сервер высылает список файлов, в оответе на команду LIST - вижу это в логе Filezill-ы, но каждый раз пересылка неудачно завершается:
"(000029)19.08.2012 17:57:20 - (not logged in) (127.0.0.1)> -r--r--r-- 1 ftp ftp 1800 Jul 05 2012 paral.asm
(000029)19.08.2012 17:57:20 - (not logged in) (127.0.0.1)> 500 Syntax error, command unrecognized.
(000029)19.08.2012 17:57:20 - (not logged in) (127.0.0.1)> disconnected.
"
← →
Сергей М. © (2012-08-19 19:07) [2]
> отправляю команду PORT (порт 20) для активного подключения
Для организации канала передачи данных в активном режиме TClientSocket совершенно не подходит - для этого нужен хотя бы TServerSocket
← →
Медвежонок Пятачок © (2012-08-19 19:20) [3]и в окне сервера получаю:
"150 Opening data channel for directory list.
425 Can"t open data connection."
Осталось только понять, что сервер тебе человеческим голосом говорит, что не может соединиться с тобой по указанному тобой же порту, так как пушкина убили на дуэли и порт он открыть за тебя не сможет.
← →
Владимир777 (2012-08-19 19:23) [4]А Вы ничего не путаете? Нигде ничего об этом не читал.
← →
Владимир777 (2012-08-19 19:24) [5]Медвежонок Пятачок, не надо умничать, подскажите лучше как сделать, что бы сервер порт открыл.
← →
Сергей М. © (2012-08-19 19:27) [6]
> Нигде ничего об этом не читал
О чем ты не читал ? И почему не читал ?)
← →
Медвежонок Пятачок © (2012-08-19 19:34) [7]чтобы сервер открыл дата-порт, нужно попросить сервер перейти в пассив режим.
а перед тем как писать своего фтп клиента, нехило было бы изучить сам фтп протокол
← →
Владимир777 (2012-08-19 19:34) [8]Сергей М. я не читал о том, что для подключения в активном режиме ftp-клиенту нужен компонент ServerSocket. А не читал, потому что нигде не встречал такой информации.
← →
Медвежонок Пятачок © (2012-08-19 19:35) [9]ну значит нехрен и браться
← →
Сергей М. © (2012-08-19 19:37) [10]
> Владимир777 (19.08.12 19:34) [8]
Ну тогда открой для себя америку:
http://asweb.ru/notes/miscellaneous/ftpmodes/
← →
Dennis I. Komarov © (2012-08-19 20:23) [11]RFC 959, 2577
← →
Владимир777 (2012-08-19 20:32) [12]Dennis I. Komarov, что это такое?
← →
Inovet © (2012-08-19 20:35) [13]> [12] Владимир777 (19.08.12 20:32)
> Dennis I. Komarov, что это такое?
http://www.google.ru/#hl=ru&gs_nf=1&cp=13&gs_id=b&xhr=t&q=RFC+959%2C+2577&pf=p&newwindow=1&output=search&sclient=psy-ab&oq=RFC+959,+2577&gs_l=&pbx=1&bav=on.2,or.r_gc.r_pw.r_qf.&fp=560735a0f168c942&biw=1153&bih=81 4
← →
Владимир777 (2012-08-19 20:38) [14]Переписал:
Последовательность действий:
открываю сокет для команд (порт -1025).
отправляю логин, пароль. Получаю положительные ответы.
отправляю команду PASV (порт 20) для пассивного подключения.
получаю ответ: 227 Entering Passive Mode (127,0,0,1,4,22)
открываю сокет для данных (порт 1046 (4*256+22))
отправляю команду LIST
в окне Filezilla Server на короткое время в колонке transfer напротив
моего подключения (на командном сокете) появляется рисунок папки
после её исчезновения в окне сервера получаю:
"425 Can"t open data connection."
← →
Медвежонок Пятачок © (2012-08-19 20:46) [15]отправляю команду PASV (порт 20) для пассивного подключения.
открываю сокет для данных (порт 1046 (4*256+22))
....дятел оборудован клювом.
← →
Владимир777 (2012-08-19 20:52) [16]Извините, описка: отправляю команду PASV для пассивного подключения.
Медвежонок Пятачок, не обязательно демонстрировать свой идиотизм на форуме. Моё незнание теории - дело другое.
← →
Медвежонок Пятачок © (2012-08-19 20:53) [17]..... может быть использован пассивный режим. В этом режиме клиент использует поток управления, чтобы послать серверу команду PASV, и затем получает от сервера его IP-адрес и номер порта, которые затем используются клиентом для открытия потока данных с произвольного клиентского порта к полученному адресу и порту.
http://ru.wikipedia.org/wiki/FTP
← →
Dennis I. Komarov © (2012-08-19 21:33) [18]
> Моё незнание теории - дело другое.
Хочешь писать протоколы вручную - учи спецификации...
← →
Владимир777 (2012-08-19 23:00) [19]"используются клиентом для открытия потока данных с произвольного клиентского порта к полученному адресу и порту." - а как это сделать?
получаю ответ: 227 Entering Passive Mode (127,0,0,1,4,22)
значит, полученный адрес - 127,0,0,1, порт - 1046 (4*256+22)
Теперь надо открыть сокет данных?
← →
Palladin © (2012-08-19 23:34) [20]ОНО: народ, я новый нюк нашел, ща всех поубиваю!!!
ОНО: дайте ай-пи какого-нить лоха!!!
Кто-то: 127.0.0.1
ОНО: пасиба!
ОНО: щас он подохнет
* ОНО вышло из чата
← →
Владимир777 (2012-08-20 06:38) [21]Palladin, а можно по-понятней?
← →
brother © (2012-08-20 07:26) [22][20] баян!
← →
Сергей М. © (2012-08-20 11:42) [23]Заметался, бедняга)
То
> отправляю команду PORT (порт 20) для активного подключения
то
> отправляю команду PASV (порт 20) для пассивного подключения
ты уж определись наконец какой режим тебе нужен) ..
← →
Dennis I. Komarov © (2012-08-20 21:08) [24]
> ты уж определись наконец какой режим тебе нужен) ..
хорошо бы еще знать, чем они отличаются...
← →
brother © (2012-08-20 21:22) [25]думаю автор с [10] уже ознакомился?
← →
Владимир777 (2012-08-20 22:41) [26]Последовательность действий:
открываю сокет для команд (порт -1025).
отправляю логин, пароль. Получаю положительные ответы.
отправляю команду PASV для пассивного подключения.
получаю ответ: 227 Entering Passive Mode (127,0,0,1,4,22)
открываю сокет для данных (порт 1026)
отправляю команду LIST
в окне Filezilla Server на короткое время в колонке transfer напротив
моего подключения (на командном сокете) появляется рисунок папки
после её исчезновения в окне сервера получаю:
"425 Can"t open data connection."
← →
Сергей М. © (2012-08-21 10:59) [27]
> открываю сокет для данных (порт 1026)
И где самый важный шаг на этапе создания канала данных в пассивном режиме - коннект клиента с порта 1026 к серверу на порт 22 ?
← →
Сергей М. © (2012-08-21 11:04) [28]
> на порт 22
Вру, не на 22, а на 1046 (4 shl 8 + 22)
← →
Anatoly Podgoretsky © (2012-08-21 11:53) [29]> Сергей М. (21.08.2012 11:04:28) [28]
Опять врешь, на 1058
← →
Сергей М. © (2012-08-21 12:09) [30]
> Anatoly Podgoretsky © (21.08.12 11:53) [29]
Не, теперь врешь ты - октеты номера порта сервер передает в десятичном виде.
А 1058 - это если бы 4,22 были в hex.
← →
Anatoly Podgoretsky © (2012-08-21 12:23) [31]> Сергей М. (21.08.2012 12:09:30) [30]
Тогда дело хуже, зачем применяешь хекс при умножение 4 на 256, инаече у тебя
бы не получилось 1024+, умножай тогда на 100/1000.
← →
Сергей М. © (2012-08-21 12:33) [32]
> Anatoly Podgoretsky © (21.08.12 12:23) [31]
Толя, ты не выспался что ли ?)
Где я "хекс" применяю ?
4 - дес. значение ст.байта 16-разрядного дв.слова номера порта.
Двигаем его влево на 8 двоичных разрядов, что эквивалентно умножению на 256 (dec) -> получаем 1024 (dec)
К 1024 (dec) прибавляем 22 (dec) (значение мл.байта 16-разрядного дв.слова номера порта) -> получаем 1046 (dec)
← →
Владимир777 (2012-08-21 18:19) [33]
> > открываю сокет для данных (порт 1026) И где самый важный
> шаг на этапе создания канала данных в пассивном режиме -
> коннект клиента с порта 1026 к серверу на порт 1046 ?
А как это сделать, Сергей М.?
Присваиваю:
сокет для данных (Port=1026), Host= 127.0.0.1
Открываю сокет и всё, или как-то изменить адрес, или host?
← →
Dennis I. Komarov © (2012-08-21 19:39) [34]
> Владимир777 (21.08.12 18:19) [33]
>
> А как это сделать, Сергей М.?
> Присваиваю:
> сокет для данных (Port=1026), Host= 127.0.0.1
> Открываю сокет и всё, или как-то изменить адрес, или host?
>
возьми готовое решение...
← →
Владимир777 (2012-08-21 21:50) [35]Dennis I. Komarov, если бы нашёл готовое решение (ftp-клиент на ClientSocket-е), то не просил бы помощи.
Как законнектится с одного порта на другой?
← →
Dennis I. Komarov © (2012-08-21 22:04) [36]
> Владимир777 (21.08.12 21:50) [35]
> Dennis I. Komarov, если бы нашёл готовое решение (ftp-клиент
> на ClientSocket-е), то не просил бы помощи.
> Как законнектится с одного порта на другой?
А чем обусловлено условие "ftp-клиент на ClientSocket-е"? Без обид, ну не хватает знаний...
← →
Владимир777 (2012-08-21 22:08) [37]Задание на лабу
← →
Dennis I. Komarov © (2012-08-21 22:46) [38]
> Задание на лабу
тогда, только грызть теорию...
← →
Владимир777 (2012-08-22 00:11) [39]CiientwinSocket.LocalPort=1046
← →
Сергей М. © (2012-08-22 10:08) [40]
> CiientwinSocket.LocalPort=1046
Какой же он Local, если этот порт открывает серверная сторона, которая по отношению к клиенту Remote ?
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.063 c