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

时间:2015-01-28 08:17:23

标签: c# networking proxy ftp

(与FTP directory listing returned as HTML instead of simple Linux ls output相关)

如何强制C#程序(FtpWebRequest)使用直接IP进入Internet而不是通过HTTP代理? (我对IT网络和相关术语的了解很少。事先道歉。)

要从内部公司网络中脱颖而出

  1. 通过(HTTP)代理服务器的IP间接方式。
  2. 互联网服务的直接IP(不是代理服务器)。
  3. 我知道这是因为,当在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)?

1 个答案:

答案 0 :(得分:1)

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

127.0.0.1       localhost