开始时,谢谢大家的帮助!每个提示都很棒,可以教给我很多东西,我感谢每条评论!在您回复之前,我知道有很多可行的解决方案和有效的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匿名\ r \ n”命令登录,但是使用这两种解决方案都不会发生。我尝试自动按照以下顺序工作(请参阅Wireshark屏幕截图)。 https://imgur.com/yT3dRxW
有人知道如何将服务器的响应返回给客户端,以使客户端与ftp服务器通信吗?
如果客户端向代理发送http请求,那么我可以返回Ftp响应而不是http响应吗?如果没有,那么代理响应应该如何?