如何强制 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网络和相关术语的了解不足。提前致歉。)
要从公司内部网络中突围出来,有
- 通过 (HTTP) 代理服务器 IP 的间接方式。
- 互联网服务的直接 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
(相关:FTP directory listing returned as HTML instead of simple Linux ls output)
如何强制 C# 程序 (FtpWebRequest) 使用直接 IP 访问 Internet 而不是通过 HTTP 代理? (我对IT网络和相关术语的了解不足。提前致歉。)
要从公司内部网络中突围出来,有
- 通过 (HTTP) 代理服务器 IP 的间接方式。
- 互联网服务的直接 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