簡體   English   中英

如何強制C#FtpWebRequest使用直接IP而不是通過HTTP代理進入Internet?

[英]How can I force a C# FtpWebRequest to use a direct IP to get onto the Internet instead of going through an HTTP proxy?

(有關: FTP目錄列表以HTML而不是簡單的Linux ls輸出返回

如何強制C#程序(FtpWebRequest)使用直接IP進入Internet而不是通過HTTP代理? (我對IT網絡和相關術語的了解很少。事先致歉。)

要從內部公司網絡中脫穎而出

  1. 通過(HTTP)代理服務器IP的間接方式。
  2. 互聯網服務(不是代理服務器)的直接IP。

我知道這是因為,當在Internet Explorer中將FileZilla與/不設置代理一起使用時,然后在遠程FTP服務器上,日志要么顯示代理的IP,要么顯示直接IP。

使用C#FtpWebRequest的代碼連接到公司外部的FTP服務器。

FtpWebRequest request = WebRequest.Create(uri) as FtpWebRequest;
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = server.Credential;
request.KeepAlive = true;
request.UsePassive = true;
request.EnableSsl = false;

//proxy options
//1. 
// do nothing

//2. 
request.Proxy = null;

//3. setup HTTP proxy
request.Proxy = new WebProxy(proxyuri, true);
request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
request.Proxy.Credentials = new NetworkCredential("Username", "Password");

Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
while (!reader.EndOfStream)
       { ... }

設置代理后,C#程序(顯然)將使用代理服務器訪問FTP服務器。 但是,因為這是HTTP代理,所以目錄列表以HTML格式返回,因此無法刪除,上載和創建目錄。 該程序需要刪除文件,在FTP上創建文件夾。

同樣,當不設置代理時,程序將使用Internet Explorer中設置代理的位置,然后再使用HTTP代理。

在代碼中,將代理設置為null( request.Proxy = nullWebRequest.DefaultWebProxyGlobalProxySelection.GetEmptyWebProxy()new WebProxy(); )導致異常“遠程服務器返回錯誤:(550)文件不可用(例如, ,找不到文件,無法訪問。”

僅對於一個特定的外部FTP服務器(恰好正在運行vsftpd),就會出現此問題。 我使用其他外部FTP進行了測試,並且代理和非代理/直接連接都可以工作。

問題 1.似乎C#程序只能使用代理進行突破。 為什么在未設置代理的情況下程序不使用直接IP? 2.如何強制程序使用直接IP? 3.問題可能是由於FTP服務器(vsftpd)引起的嗎?

Windows主機文件(%systemroot%\\ system32 \\ drivers \\ etc)輸入錯誤。 我不確定是哪個條目出了問題,但是文件現在只包含一行

127.0.0.1       localhost

暫無
暫無

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

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