问题标签 [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.
c# - 对 SSPI 的调用失败,请参阅使用 FileZilla Server 和 System.Net.FtpClient 的内部异常
我正在设置一个 FTP 服务器( FileZilla
)netftp codeplex project
System.Net.FtpClient
并使用.SSL
TLS
X509Certificate2
- 我已经
FileZilla Server
从 sourceforge下载了。 - 我已经
System.Net.FtpClient v14.06.17
从 codeplex下载了。
我想我已经隔离了这个问题,但也许有人对根本原因有一些额外的想法。本文底部提供了一种解决方法。
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
格式)。
此外,这并不能解释为什么OpenRead
会OpenWrite
成功,而是GetListing
会GetNameListing
失败。
无论如何,我仍然测试了多种不同的证书生成工具,包括FileZilla's
内置生成器C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\makecert.exe
、OpenSSL (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
调用了两次,该事件也只调用了一次。这提供了一些缓存正在发生的证据。
ruby - Net::FTP 文件删除有时会卡住
我曾经Net::FTP
在我的服务器上上传和删除文件。当我尝试删除文件时,它有时会卡住。谁能解释我为什么会这样。
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 库不应该给用户带来这样的惊喜。
ruby - Ruby Net/sftp gem - 建立并创建文件,但上传 0 字节
我正在尝试在 Ruby 中制作一个脚本,该脚本可以使用 sftp 连接将本地文件上传到 ftp 服务器。
该脚本建立与服务器的连接并很好地创建文件。问题是它没有正确上传的文件。文件大小继续为 0 字节。
这是脚本:
当我使用 Filezilla 时,它可以正常工作。
我目前正在使用Net/sftp gem - Net/sftp - github 站点
我已经在服务器上打开了端口 21 和 22,并授予用户读/写权限。
我错过了什么吗?我没有看到任何错误。请告诉我是否可以为您提供任何其他信息,以帮助您回答我的问题。
perl - Perl:文件和目录测试是否不适用于 Net::FTP
如果它们是文件或目录,我想测试我用 ftp 下载的文件和目录。使用下面的代码,我总是得到 else 语句 ( 2,4,6 ) 曾经$x
是什么 (文件或目录)。这段代码有什么问题?
c# - System.Net.FtpClient.FileExists 的零星故障
我正在尝试改用System.Net.FtpClient,但事情并没有按预期工作。
运行下面的代码,看起来即使IsConnected
返回 true,也是对调用的直接FileExists()
调用Connect()
(这意味着调用之间的连接完全丢失了?)。但是,由于Connect()
时不时会失败,这也会导致失败FileExists()
(失败意味着它会抛出Connection refused
)。
我的代码有什么问题吗?这是意料之中的事情吗,即我是否应该准备好重试我对FtpClient
实例所做的一切?是否有任何标志设置为自动重试?
其中 GetClient() 被实现为使用我的自定义“重试循环”来处理零星的连接失败。
这是偶尔出现的异常:
perl - 不能在没有包或对象引用的情况下调用方法“文件名”
我想从 ftp 服务器 (host1) 下载一堆包含内容的目录。为此,我使用库Net::FTP::Recursive。当我运行代码时,文件夹和文件已下载。尽管如此,我还是收到了这条消息:
我想知道为什么会发生这种情况,它有什么影响以及如何避免这种情况。
这是要下载的代码:
我在 Windows 7 上使用 perl 版本:
这是从 /Net/FTP/Recursive.pm 到消息第 86 行的代码:
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--
- 子文件夹1 rwx rx rx
如果我使用这个:
文件 file1 和 file2 将被下载。
如果我使用这个:
由于超时,不会下载任何内容并且程序完成。我预计它将下载 subfolder1 和 subfolder2 以及子文件夹的内容。对此有什么解释吗?如何以下载子文件夹和文件的方式解决它?
代码的详细描述在这里
更新 1:调试
调试
给出以下内容:
更新 2: C:/Strawberry/perl/lib/Net/FTP.pm 第 1107 行超时。
_list_cmd
是调试输出中提到的行的功能。我还添加了_list_cmd
使用的行和换行的行,以使其更易读,保留行号。
perl - 不完整的 FTP 传输
当我运行上面连接到远程主机的 FTP 服务器的代码时,它试图在downloads
目录中获取一个 PDF 文件,但是传输的 PDF 文件比原始文件小 8 个字节,所以它没有打开正确地在 PDF 阅读器中。
有什么我做的不对吗?FTP 服务器是 Ubuntu 上的 vsftpd。
ruby-on-rails - 使用 Net::FTP 强制执行简单的 FTP
我正在尝试在 Ruby 1.8、Rails 2.3 环境中通过 FTP 获取文件(我知道,古老的......)
当应用程序尝试连接到 FTP 时,它会遇到错误。当我通过 FileZilla 使用相同的凭据时,如果我强制使用普通 FTP,它就可以工作。当我使用 TLS 时,它会打嗝(要么给出“服务器发送了带有不可路由地址的被动回复。”或者不喜欢我密码中的非 ASCII 字符。)
有没有办法在我的应用程序中强制使用普通的 FTP?
这是功能:
我尝试了几种变体,例如ftp.open_ssl = false
、ftp.ssl = false
和stoptls(ftp)
,但它们甚至使传输失败,即使是到无问题的站点。
知道我该怎么做(不打扰其他公司)吗?