В начале спасибо всем за помощь! Каждый намек замечательный и может многому меня научить, я ценю каждый комментарий! Прежде чем ответить, я знаю, что есть много работающих решений и работающих 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-ответа? Если нет, то как должен выглядеть ответ прокси?