FTP 目录列表以 HTML 形式返回,而不是简单的 Linux ls 输出

2024-01-07

(相关如何强制 C# FtpWebRequest 使用直接 IP 访问 Internet,而不是通过 HTTP 代理? https://stackoverflow.com/questions/28187521/how-can-i-force-a-c-sharp-ftpwebrequest-to-use-a-direct-ip-to-get-onto-the-inter/28189013#28189013)

使用 C# 从 FTP 服务器获取目录列表。输出格式为 HTML。必需的是未格式化的列表(由 Linux ls 命令返回)。 (尝试避免解析 HTML 来获取文件列表。)

观察结果:

  • FTP服务器是客户端运行的vsftpd。

  • 当列出例如目录时,不会出现此问题。 Filezilla FTP 服务器。

  • Filezilla 客户端连接到 vsftpd 服务器在获取目录列表时超时

    Error: Connection timed out Error: Failed to retrieve directory listing

参考下面的代码,会发生以下行为/错误:

  1. 什么时候 代码中设置代理服务器 然后 服务器返回 HTML 格式的列表,而不是简单的 ls 输出。

  2. 什么时候 代理服务器设置为 null 或WebRequest.DefaultWebProxy OR GlobalProxySelection.GetEmptyWebProxy() OR new WebProxy(); THEN: The remote server returned an error: (550) File unavailable (e.g., file not found, no access).

  3. 什么时候: 代码中未指定代理服务器并且代理未设置为空。 然后The remote server returned an error: (407) Proxy Authentication Required.

问题

  • 如何设置 C# 代码来获取 ls 目录列表而不是 HTML? 或者
  • 是否可以在 vsftpd(服务器)端执行任何操作来阻止 HTML 目录列表?

Details:

代码摘录

  FtpWebRequest request = WebRequest.Create(uri) as FtpWebRequest;
  request.Method = WebRequestMethods.Ftp.ListDirectory;

  //1. Works but returns HTML
  request.Proxy = new WebProxy("http://xxx.xxx.xxx.xxx:8080",true); 
  request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials; 

  //2. Does not work
  //request.Proxy = null;// WebRequest.DefaultWebProxy;// GlobalProxySelection.GetEmptyWebProxy(); // null; //new WebProxy();

  request.Credentials = server.Credential;
  request.KeepAlive = true;
  request.UsePassive = true;

   FtpWebResponse response = (FtpWebResponse)request.GetResponse();
    Stream responseStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(responseStream);

    Regex filter = FileUtils.GetRegex(clientSource.FileFilter);

    while (!reader.EndOfStream)
    {
      ProcessFileLine(reader.ReadLine(), filter, files);
    }
    reader.Close();
    response.Close();

HTML 格式的目录列表

<HTML>
<meta http-equiv="Content-Type" content="text-html; charset=UTF-8">
<HEAD>
<TITLE>FTP root at ftp-jhb.saicomvoice.co.za. </TITLE>
</HEAD>
<BODY>
<H1>FTP root at ftp-jhb.saicomvoice.co.za. </H1>
<HR>
<PRE>
12/11/15 04:36PM [GMT]                      &lt;DIR&gt; <A     HREF="/bin/">bin</A>
12/11/15 12:56PM [GMT]                      &lt;DIR&gt; <A HREF="/boot/">boot</A>
02/22/13 12:00AM [GMT]                      &lt;DIR&gt; <A     HREF="/cgroup/">cgroup</A>
12/11/15 03:36PM [GMT]                      &lt;DIR&gt; <A HREF="/dev/">dev</A>
01/19/15 01:32PM [GMT]                      &lt;DIR&gt; <A HREF="/etc/">etc</A>
12/12/15 11:45AM [GMT]                      &lt;DIR&gt; <A HREF="/home/">home</A>
12/11/15 12:51PM [GMT]                      &lt;DIR&gt; <A </PRE>
<HR>
</BODY>
</HTML>

从描述来看,您需要使用 HTTP 代理来访问 FTP 服务器。代理不会通过 FTP 协议访问,仅转发命令,而是通过 HTTP 协议访问。然后,代理将为您执行必要的 FTP 命令,并在 HTTP 响应中返回结果。结果如何完全取决于代理。由于大多数用户将使用浏览器访问 HTTP 代理,因此 HTTP 代理通常会返回包含结果的 HTML 页面,以便用户只需单击即可从那里获取相关文件。

总之:由于结果完全取决于代理,因此只要您需要使用此特定代理,就无法以不同的方式获取结果。因此,最好咨询您的管理员是否有其他方法可以使用 FTP,即无需此 HTTP 代理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FTP 目录列表以 HTML 形式返回,而不是简单的 Linux ls 输出 的相关文章

  • 在 C# 中使用“using”关键字避免多次处置的最佳实践

    当变量是 IDisposable 时 我们有using关键字来管理处置 但是如果我们在方法中返回值怎么办 using twice StringContent stringToStringContent string str using St
  • 锁定 ASP.NET 应用程序变量

    我在 ASP NET 应用程序中使用第三方 Web 服务 对第 3 方 Web 服务的调用必须同步 但 ASP NET 显然是多线程的 并且可能会发出多个页面请求 从而导致对第 3 方 Web 服务的同时调用 对 Web 服务的调用封装在自
  • 叮当错误?命名空间模板类的朋友

    以下代码在 clang 下无法编译 但在 gcc 和 VS 下可以编译 template
  • 如何以编程方式播放 16 位 pcm 数组 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含 16 位 pcm 值的短 数组 我希望能够在不添加任何标题 也不将任何文件保存到内存的情况下播放它 我知道我可能需要一个提供
  • 将下拉列表与字典绑定

    我将字典绑定到下拉列表 举例来说 我的字典中有以下项目 Test1 123 Test2 321 我希望下拉文本采用以下格式 Test1 Count 123 Test2 Count 321 我沿着以下路径走 但没有运气 MyDropDown
  • 为什么需要数字后缀?

    C 语言 我确信还有其他语言 需要在数字文字末尾添加后缀 这些后缀指示文字的类型 例如 5m是一个小数 5f是一个浮点数 我的问题是 这些后缀真的有必要吗 或者是否可以从上下文中推断出文字的类型 例如 代码decimal d 5 0应该推断
  • 将日期时间转换为指定格式

    我有这个日期格式yy MM dd HH mm ss ex 12 02 21 10 56 09 问题是 当我尝试使用以下代码将其转换为不同格式时 CDate 12 02 21 10 56 09 ToString MMM dd yyyy HH
  • C# 编译器数字文字

    有谁知道 C 编译器数字文字修饰符的完整列表 默认情况下 声明 0 使其成为 Int32 声明 0 0 使其成为 Double 我可以在末尾使用文字修饰符 f 来确保某些内容被视为 Single 例如像这样 var x 0 x is Int
  • 有什么方法可以重载 C# 中的扩展方法吗?

    我有以下模型模式 public abstract class PARENTCLASS public class CHILD A CLASS PARENTCLASS public static class EXTENSION public s
  • 通过 C# Mailkit / Mimekit 发送电子邮件,但出现服务器证书错误

    Visual Studio 2015 中的 0 代码 1 我正在使用 Mailkit 最新版本 1 18 1 1 从我自己的电子邮件服务器发送电子邮件 2 电子邮件服务器具有不受信任的自签名证书 3 我在代码中添加了以下两行 以忽略服务器证
  • Xamarin - SignalR 挂在连接上

    我正在尝试将我的 Xamarin 应用程序连接到托管在 Azure 上的 SignalR 后端 我遇到的问题是每次我在 HubConnection 上调用 StartAsync 时 它都会挂起客户端并且请求永远不会完成 我尝试通过应用程序进
  • Resharper:IEnumerable 的可能多重枚举

    我正在使用新的 Resharper 版本 6 在我的代码中的几个地方 它给一些文本加了下划线 并警告我可能存在IEnumerable 可能的多重枚举 我理解这意味着什么 并在适当的情况下采纳了建议 但在某些情况下 我不确定这实际上是一个大问
  • 为什么不能调用带有 auto& 参数的 const mutable lambda?

    include
  • 使用 OleDbCommandBuilder 时访问 SQL 语法错误

    我要在 C 中使用 OleDbDataAdapter 在 Access 数据库中插入数据 但收到错误消息INSERT INTO 命令中的语法错误 BackgroundWorker worker new BackgroundWorker Ol
  • C++ 到 C# 事件处理

    所以我有我的C WinForm 应用程序 我从中调用我的C CLI MFC dll图书馆 但也有一些events在我的 C 库上 甚至此事件也发生在该库的本机 非 CLI 部分 我需要从我的 C 应用程序调用一些代码 并获取一些有关此事件的
  • ALTER TABLE ... ADD CONSTRAINT 失败时将事务回滚到保存点

    有没有办法在事务中添加检查约束and如果失败回滚到以前的保存点 而不是回滚整个事务 就我而言 当 ALTER TABLE ADD CONSTRAINT 命令失败时 事务无法回滚到保存点 尝试这样做会引发 InvalidOperationEx
  • EnumDisplayDevices 与 WMI Win32_DesktopMonitor,如何检测活动监视器?

    对于我当前的 C 项目 我需要为在大量计算机上连接并处于活动状态的每个监视器检测一个唯一的字符串 研究指出了两种选择 使用 WMI 并查询 Win32 DesktopMonitor 以获取所有活动监视器 使用 PNPDeviceID 来唯一
  • 无法在 C# 中为 EventArgs 分配使用派生类型的事件处理程序

    所以我有一个事件声明如下 public event EventHandler OnChangeDetected 然后我有以下处理程序被分配给该事件 myObject OnChangeDetected OnTableChanged 我的理解是
  • 如果“嵌入式”SQL 2008 数据库文件不存在,如何创建它?

    我使用 C ADO Net 和在 Server Management Studio 中创建的嵌入式 MS SQL 2008 数据库文件 附加到 MS SQL 2008 Express 创建了一个数据库应用程序 有人可以向我指出一个资源 该资
  • 这种尺寸对齐是如何工作的

    对于所提供的评论 我无法理解以下代码 这段代码的作用是什么 以及等效的代码是什么8 aligned segment size must be 4 aligned attr gt options ssize 3 Here ssize is o

随机推荐