[英]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網絡和相關術語的了解很少。事先致歉。)
要從內部公司網絡中脫穎而出
我知道這是因為,當在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 = null
或WebRequest.DefaultWebProxy
或GlobalProxySelection.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.