问题标签 [net-ftp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
2394 浏览

c# - 对 SSPI 的调用失败,请参阅使用 FileZilla Server 和 System.Net.FtpClient 的内部异常

我正在设置一个 FTP 服务器( FileZilla)netftp codeplex project System.Net.FtpClient并使用.SSLTLSX509Certificate2

我想我已经隔离了这个问题,但也许有人对根本原因有一些额外的想法。本文底部提供了一种解决方法。

client.GetListing()调用时发生异常client.GetNameListing(),但是,上传 ( OpenWrite) 和下载 ( OpenRead) 都可以正常工作。我已经测试了许多版本FileZilla来隔离它开始破坏的版本。

  • 0.9.42作品(2013-12-16)
  • 0.9.43 坏 (2014-01-02)
  • 0.9.46 坏 (2014-08-03)
  • 0.9.50 坏 (2015-03-19) - 当前

发生的异常是:

  • 外部消息: A call to SSPI failed, see inner exception.
  • 内心讯息: The message received was unexpected or badly formatted

导致错误的 C# 代码示例:

Codeplex 文档页面上,jptrosclair写道:

您不使用 pem 证书,而是使用 p12。有关更多信息,请参阅此 Stack Overflow 线程。如果您收到 SPPI 异常以及有关意外或格式错误的消息的内部异常,则您可能使用了错误类型的证书。

链接是指asp.net,不是FileZilla。我的猜测是IIS不支持PEM并且很可能通过流发送一堆乱码。但是,如果您使用您的服务器支持的证书格式,那么应该没有问题。据我所知,FileZilla仅支持PEM格式(或CRT/CER仍然是PEM格式)。

此外,这并不能解释为什么OpenReadOpenWrite成功,而是GetListingGetNameListing失败。

无论如何,我仍然测试了多种不同的证书生成工具,包括FileZilla's内置生成器C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\makecert.exeOpenSSL (windows). 问题仍然存在。

skovachev 这是来自https://netftp.codeplex.com/discussions/535815的类似讨论的链接。 他的解决方法是在获取列表之前克隆连接。

解决方法:

FileZilla我已经使用上面列出的所有版本测试了以下内容。修复方法是System.Net.FtpClient从类中下载源代码codeplex并在FtpSocketStream.cs类中编辑以下方法:

public void ActivateEncryption(string targethost, X509CertificateCollection clientCerts)

改变:

m_sslStream.AuthenticateAsClient(targethost, clientCerts, SslProtocols.Tls | SslProtocols.Ssl3 | SslProtocols.Ssl2, true);

至:

m_sslStream.AuthenticateAsClient(targethost, clientCerts, SslProtocols.Tls | SslProtocols.Ssl3, true);

(基本上只是删除Ssl2标志)。

我的猜测是在连接到服务器时设置标志FileZilla v0.9.43时发生了一些变化。Ssl2奇怪的是,第一次AuthenticateAsClient调用会成功,第二次会失败。

至于上传和下载是否成功,默认EnableThreadSafeDataConnections为true,这会导致客户端被克隆并重新连接到服务器。但是,GetListing不要GetNameListing克隆连接。ActivateEncryption在方法中放置断点,AuthenticateAsClient将被多次调用。也许在SslStream课堂上发生了一些连接池,并且多个连接池AuthenticateAsClient导致了问题。值得注意的是,FtpClient.ValidateCertificate即使AuthenticateAsClient调用了两次,该事件也只调用了一次。这提供了一些缓存正在发生的证据。

0 投票
0 回答
89 浏览

ruby - Net::FTP 文件删除有时会卡住

我曾经Net::FTP在我的服务器上上传和删除文件。当我尝试删除文件时,它有时会卡住。谁能解释我为什么会这样。

0 投票
2 回答
72 浏览

perl - 使用 Perls Net::FTP 从 Windows 主机获取文件

我们公司的笔记本电脑通过LAN(工作场所)或WLAN(会议室)上网。根据他们上网的方式,他们从 DHCP 获得不同的 IP。
服务器上的某些 Perl 应用程序使用 Net::FTP 从客户端(例如上面的笔记本电脑)复制文件。这段代码如下所示:

有时上面的代码不起作用:Net::Ping::External() 返回“alive”,但 Net::FTP->new() 得到“超时”。

显然,“FTP”和“ping”解析主机名的方式不同。
在 OS ping reslove 上如下:

但是,“nslookup”返回 2 种可能性:

不活动的 IP 地址首先从 nslookup 传递回来。
我想 Net::FTP 也使用这个地址连接到客户端。

如何“说服” FTP 使用活动的 DNS 条目进行连接?

==================================================== ===========

感谢您的回答。我听从了你的建议。该解决方案基于:http ://code.activestate.com/lists/perl-win32-users/32624/

尽管如此,我相信一个广泛使用的 Perl 库不应该给用户带来这样的惊喜。

0 投票
0 回答
312 浏览

ruby - Ruby Net/sftp gem - 建立并创建文件,但上传 0 字节

我正在尝试在 Ruby 中制作一个脚本,该脚本可以使用 sftp 连接将本地文件上传到 ftp 服务器。

该脚本建立与服务器的连接并很好地创建文件。问题是它没有正确上传的文件。文件大小继续为 0 字节。

这是脚本:

当我使用 Filezilla 时,它可以正常工作。

我目前正在使用Net/sftp gem - Net/sftp - github 站点

我已经在服务器上打开了端口 21 和 22,并授予用户读/写权限。

我错过了什么吗?我没有看到任何错误。请告诉我是否可以为您提供任何其他信息,以帮助您回答我的问题。

0 投票
1 回答
158 浏览

perl - Perl:文件和目录测试是否不适用于 Net::FTP

如果它们是文件或目录,我想测试我用 ftp 下载的文件和目录。使用下面的代码,我总是得到 else 语句 ( 2,4,6 ) 曾经$x是什么 (文件或目录)。这段代码有什么问题?

0 投票
1 回答
140 浏览

c# - System.Net.FtpClient.FileExists 的零星故障

我正在尝试改用System.Net.FtpClient,但事情并没有按预期工作。

运行下面的代码,看起来即使IsConnected返回 true,也是对调用的直接FileExists()调用Connect()(这意味着调用之间的连接完全丢失了?)。但是,由于Connect()时不时会失败,这也会导致失败FileExists()(失败意味着它会抛出Connection refused)。

我的代码有什么问题吗?这是意料之中的事情吗,即我是否应该准备好重试我对FtpClient实例所做的一切?是否有任何标志设置为自动重试?

其中 GetClient() 被实现为使用我的自定义“重试循环”来处理零星的连接失败。

这是偶尔出现的异常:

0 投票
1 回答
168 浏览

perl - 不能在没有包或对象引用的情况下调用方法“文件名”

我想从 ftp 服务器 (host1) 下载一堆包含内容的目录。为此,我使用库Net::FTP::Recursive。当我运行代码时,文件夹和文件已下载。尽管如此,我还是收到了这条消息:

我想知道为什么会发生这种情况,它有什么影响以及如何避免这种情况。

这是要下载的代码:

我在 Windows 7 上使用 perl 版本:

这是从 /Net/FTP/Recursive.pm 到消息第 86 行的代码:

0 投票
1 回答
281 浏览

perl - Perl Net::FTP::Recursive:无法下载文件夹但子文件夹的文件

我成功地从 ftp-server 的子文件夹下载文件。但是,如果我想从上层下载文件夹,它就不起作用。

这是文件夹结构:

  • 文件夹 rwx rx rx
    • 子文件夹1 rwx rx rx
      • file1 rw- r-- r--
      • file2 rw- r-- r--
    • 子文件夹2 rxx rx rx
      • file3 rw- r-- r--
      • file4 rw- r-- r--

如果我使用这个:

文件 file1 和 file2 将被下载。

如果我使用这个:

由于超时,不会下载任何内容并且程序完成。我预计它将下载 subfolder1 和 subfolder2 以及子文​​件夹的内容。对此有什么解释吗?如何以下载子文件夹和文件的方式解决它?

代码的详细描述在这里

更新 1:调试

调试

给出以下内容:

更新 2: C:/Strawberry/perl/lib/Net/FTP.pm 第 1107 行超时。

_list_cmd是调试输出中提到的行的功能。我还添加了_list_cmd使用的行和换行的行,以使其更易读,保留行号。

0 投票
1 回答
241 浏览

perl - 不完整的 FTP 传输

当我运行上面连接到远程主机的 FTP 服务器的代码时,它试图在downloads目录中获取一个 PDF 文件,但是传输的 PDF 文件比原始文件小 8 个字节,所以它没有打开正确地在 PDF 阅读器中。

有什么我做的不对吗?FTP 服务器是 Ubuntu 上的 vsftpd。

0 投票
0 回答
13 浏览

ruby-on-rails - 使用 Net::FTP 强制执行简单的 FTP

我正在尝试在 Ruby 1.8、Rails 2.3 环境中通过 FTP 获取文件(我知道,古老的......)

当应用程序尝试连接到 FTP 时,它会遇到错误。当我通过 FileZilla 使用相同的凭据时,如果我强制使用普通 FTP,它就可以工作。当我使用 TLS 时,它会打嗝(要么给出“服务器发送了带有不可路由地址的被动回复。”或者不喜欢我密码中的非 ASCII 字符。)

有没有办法在我的应用程序中强制使用普通的 FTP?

这是功能:

我尝试了几种变体,例如ftp.open_ssl = falseftp.ssl = falsestoptls(ftp),但它们甚至使传输失败,即使是到无问题的站点。

知道我该怎么做(不打扰其他公司)吗?