簡體   English   中英

當傳入代理的請求超過 http 時,如何從 ftp 代理返回 ftp 響應?

[英]How to return ftp response from ftp proxy, when request incoming to proxy is over http?

在開始時感謝大家的幫助,每一個提示都很棒,可以教會我很多東西,我感謝每一個評論。 在您回復之前,我知道有很多有效的解決方案和有效的 ftp 代理,但我問這個問題是為了學習,我試圖了解它是如何工作的。

我必須實現自己的 ftp 代理服務器來捕獲 ftp 命令。 The issue is that request incoming to proxy from client is over http protocol and when I return raw ftp response from ftp server through proxy to the client, then client browser is not able to handle this response as ftp response. 目前我正在嘗試對來自 ftp 代理的初始響應進行硬編碼,如下所示:

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

但是當客戶端瀏覽器收到此響應時,它會顯示以下框: https://imgur.com/XcIy7Rw

因為上面不起作用,所以我嘗試在 HttpResponse 中包含 ftp 響應,如下所示:

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 響應嗎? 如果不是,那么代理響應應該是什么樣子?

區分HTTP代理和FTP代理非常重要。 HTTP 代理通常能夠處理以http(s)://ftp://開頭的 URL。 對於以ftp://開頭的 URL,代理會進行協議轉換。

這意味着客戶端使用HTTP協議將 URL 傳輸到代理(在這種情況下從ftp://開始)。 由於 URL 以ftp://開頭,代理知道它必須使用FTP協議來連接服務器。 這被稱為FTP over HTTP ,因為客戶端正在使用 Z29DC869EA246FF789 客戶端連接到 FTP 服務器。

或者,客戶端可以使用本機 FTP 客戶端使用代理連接到服務器。 在這種情況下,客戶端使用FTP協議與代理通信,代理使用FTP協議與服務器通信。 這被稱為native FTP proxy

正如您已經注意到的,在FTPoverHTTP場景中,客戶端不會跟進任何FTP響應。 相反,您必須相應地在代理中實現協議轉換。 將用戶名和密碼從客戶端傳遞給代理,如下所示: ftp://username:password@server.com 您的代理必須從 URL 中提取憑據,連接到服務器,然后代表客戶端發出USERPASS命令。

提示:代理還需要從 URL 中提取目錄/文件名,以便使用FTP協議從服務器獲取目錄列表/文件內容,然后將其相應地呈現給客戶端,例如目錄列表為 ZFC335EZ83 頁面,其中包含指向 68 個 FC69D52 的鏈接目錄中的工件或在文件已被訪問的情況下,發送響應以觸發客戶端上的HTTP文件下載

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM