如何强制 C# FtpWebRequest 使用直接 IP 访问 Internet 而不是通过 HTTP 代理?

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 directory listing returned as HTML instead of simple Linux ls output

如何强制 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 代理。

在代码中,将代理设置为空(request.Proxy = null OR WebRequest.DefaultWebProxy OR GlobalProxySelection.GetEmptyWebProxy() OR new WebProxy(); )导致异常"The remote server returned an error: (550) File unavailable (e.g., file not found, no access)."

这个问题只发生在一个特定的外部 FTP 服务器上(恰好是 运行 vsftpd)。我使用不同的外部 FTP 进行了测试,代理和非代理/直接连接都有效。

问题 1、C#程序好像只能使用代理打通。为什么在没有设置代理的情况下,程序不直接使用IP? 2.如何强制程序使用直连IP? 3. 问题可能是由于 FTP 服务器 (vsftpd)?

windows 主机文件 (%systemroot%\system32\drivers\etc) 有错误条目。我不确定是哪个条目出了问题,但文件现在只包含一行

127.0.0.1       localhost