(相关: FTP目录列表返回HTML而不是简单的Linux LS输出 )
我如何强制C#程序(的FtpWebRequest)使用直接IP获取到互联网,而不是通过HTTP代理走向何方? (我的IT网络和相关术语的知识是有限的。道歉提前。)
从公司内部网络有突破
- 通过(HTTP)代理服务器的IP间接的方式。
- 互联网服务的直接IP(而不是代理服务器)。
我知道这是因为,使用FileZilla中有/无时,该代理在Internet Explorer设置,则远程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代理服务器的设置。
在代码中,设置所述代理为空( request.Proxy = null
OR WebRequest.DefaultWebProxy
OR GlobalProxySelection.GetEmptyWebProxy()
OR new WebProxy();
)导致异常“的远程服务器返回错误:(550)文件不可用(例如,未找到文件,没有访问)“。
此问题只发生了一个特定的外部FTP服务器(即恰好是运行vsftpd的)。 我测试了使用不同的外部FTP和双方代理和非代理/直接连接工作。
问题 1.看来C#程序只能使用代理突围。 为什么,当没有设置代理,程序不使用直接IP? 2.如何强制程序使用直接IP? 3.请问问题是由于FTP服务器(vsftpd的)?