(与FTP directory listing returned as HTML instead of simple Linux ls output相关)
如何强制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
OR WebRequest.DefaultWebProxy
OR GlobalProxySelection.GetEmptyWebProxy()
OR new WebProxy();
)会导致异常“远程服务器返回错误:(550 )文件不可用(例如,找不到文件,没有访问权限。)
此问题仅发生在一个特定的外部FTP服务器上(恰好运行vsftpd)。我使用不同的外部FTP以及代理和非代理/直接连接进行了测试。
问题 似乎C#程序只能使用代理突破。为什么,当没有设置代理时,程序不使用直接IP? 2.如何强制程序使用直接IP? 3.问题可能是由于FTP服务器(vsftpd)?
答案 0 :(得分:1)
Windows主机文件(%systemroot%\ system32 \ drivers \ etc)有错误的条目。我不确定哪个条目是问题,但文件现在只包含一行
127.0.0.1 localhost