(Связано с: список каталогов FTP, возвращаемый как HTML вместо простого вывода Linux ls)
Как заставить программу С# (FtpWebRequest) использовать прямой IP-адрес для доступа в Интернет, а не через HTTP-прокси? (Мои знания об ИТ-сетях и связанной с ними терминологии скудны. Извиняйтесь заранее.)
Чтобы выйти из внутренней сети компании, существует
Я знаю это, потому что, используя FileZilla с/без прокси-сервера, установленного в Internet Explorer, затем на удаленном FTP-сервере журналы показывают IP-адрес прокси-сервера или прямой IP-адрес.
Код с использованием С# 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)
{ ... }
Когда я устанавливаю прокси-сервер, программа С# (очевидно) использует прокси-сервер для доступа к FTP-серверу. Однако, поскольку это HTTP-прокси, список каталогов возвращается как HTML, а удаление, загрузка и создание каталогов невозможно. Программа должна удалять файлы, создавать папки на FTP.
Аналогично, если не устанавливать прокси-сервер, то программа использует настройки в Internet Explorer, где установлен прокси-сервер, который затем снова использует прокси-сервер HTTP.
В коде устанавливается прокси для null (request.Proxy = null
ИЛИ WebRequest.DefaultWebProxy
ИЛИ GlobalProxySelection.GetEmptyWebProxy()
или new WebProxy();
) вызывает исключение "Удаленный сервер возвратил ошибку: (550) Файл недоступен (например,, файл не найден, нет доступа). "
Эта проблема возникает только для одного конкретного внешнего FTP-сервера (на котором выполняется vsftpd). Я тестировал с использованием другого внешнего FTP и прокси-сервера, а также без прокси-сервера.
Вопросы 1. Кажется, программа С# может только прорываться с использованием прокси. Почему, когда прокси-сервер не установлен, программа не использует прямой IP-адрес? 2. Как заставить программу использовать прямой IP-адрес? 3. Может ли проблема возникнуть из-за FTP-сервера (vsftpd)?
Файл Windows (% systemroot%\system32\drivers\etc) имеет ошибочные записи. Я не совсем уверен, какая запись была проблемой, но файл теперь содержит только одну строку
127.0.0.1 localhost