我如何强制C#的FtpWebRequest使用直接IP获取到互联网,而不是通过HTTP代理走向何方?

2019-10-21 16:37发布

(相关: FTP目录列表返回HTML而不是简单的Linux LS输出 )

我如何强制C#程序(的FtpWebRequest)使用直接IP获取到互联网,而不是通过HTTP代理走向何方? (我的IT网络和相关术语的知识是有限的。道歉提前。)

从公司内部网络有突破

  1. 通过(HTTP)代理服务器的IP间接的方式。
  2. 互联网服务的直接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的)?

Answer 1:

Windows主机文件(%SYSTEMROOT%\ SYSTEM32 \ drivers \ etc下)有错误的条目。 我并不完全相信这是进入的问题,但现在,该文件只包含一行

127.0.0.1       localhost


文章来源: How can I force a C# FtpWebRequest to use a direct IP to get onto the Internet instead of going through an HTTP proxy?