Как вернуть ответ ftp с FTP-прокси, когда входящий запрос на прокси закончен через http? - PullRequest
0 голосов
/ 17 мая 2019

В начале спасибо всем за помощь! Каждый намек замечательный и может многому меня научить, я ценю каждый комментарий! Прежде чем ответить, я знаю, что есть много работающих решений и работающих FTP-прокси, но я задаю этот вопрос в целях обучения и пытаюсь понять, как это работает.

Я должен реализовать свой собственный прокси-сервер ftp для захвата команд ftp. Проблема заключается в том, что запрос, поступающий на прокси-сервер от клиента, осуществляется по протоколу http, и когда я возвращаю клиенту необработанный ответ ftp с сервера ftp через прокси-сервер, тогда клиентский браузер не может обработать этот ответ как ответ ftp. В настоящее время я пытаюсь жестко закодировать начальный ответ от FTP-прокси следующим образом:

var clientWriter = new BinaryWriter(clientNetStream);
clientWriter.Write("220 (vsFTPd 3.0.3)\r\n");

Но когда клиентский браузер получил этот ответ, он показывает следующее поле: https://imgur.com/XcIy7Rw

Поскольку приведенное выше не работает, я попытался включить ответ ftp в HttpResponse следующим образом:

var clientWriter = new BinaryWriter(clientNetStream);
                        clientWriter.Write(
                            "HTTP/1.1 200 OK\r\n" +
                            "Date: Mon, 19 Jul 2004 16:18:20 GMT\r\n" +
                            "Server: Apache\r\n" +
                            "Last-Modified: Sat, 10 Jul 2004 17:29:19 GMT\r\n" +
                            "Accept-Ranges: bytes\r\n" +
                            "Content-Length: 9328\r\n" +
                            "Connection: keep-alive\r\n" +
                            "Content-Type: text/html\r\n" +
                            "\r\n" +
                            "220 (vsFTPd 3.0.3))\r\n");

Но тогда браузер обрабатывает это следующим образом: https://imgur.com/JuFTjs7

То, что я пытаюсь сделать, это вернуть ответ «220 (vsFTPd 3.0.3) \ r \ n» с сервера на клиент, а затем я ожидаю, что клиент отправит команду «USER anonymous \ r \ n» для входа в систему, но с обоими решениями этого не происходит. Я пытаюсь автоматически выполнить следующую последовательность действий (см. Скриншот Wireshark). https://imgur.com/yT3dRxW

Кто-нибудь знает, как вернуть ответ от сервера клиенту, чтобы заставить клиента общаться с ftp-сервером?

Если клиент отправляет http-запрос на прокси, тогда я могу вернуть Ftp-ответ вместо http-ответа? Если нет, то как должен выглядеть ответ прокси?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...