gpt4 book ai didi

c++ - FTP NLST 仅在某些客户端计算机上导致 '425: Can' t 打开数据连接以进行传输

转载 作者:行者123 更新时间:2023-12-02 10:19:28 24 4
gpt4 key购买 nike

我目前正在网络上运行 FileZilla FTP 服务器。我的问题是,在看似随机的机器上,当用户导航到一个目录(他们能够做到)并尝试 ls(即数据传输)时,他们的终端挂起等待响应,而服务器报告这个 425: Can't open data connection for transfer上文提到的。此结果因所使用的客户端机器而异,其中一些(本地或远程)能够继续,而另一些则卡在此处。我知道这是因为简单的 FTP 命令,如 CWD ing 在 20/21 端口上运行,而 FTP 数据传输在某个其他端口号上运行,而这些端口号又可能被链上某处的防火墙阻止。我的问题是,我如何解释这些不同的端口(如果这确实是问题所在),据我所知,它们可能高于 1024?

我对这个项目的最终目标是实现一个非常简单的 FTP 解决方案,最好使用 WinINet,但是,到目前为止,我遇到了同样的问题:

BOOL CWebFileFinder::FindFile(const CString& URL)
{
CString ServerName;
CString strObject;
INTERNET_PORT nPort;
DWORD dwServiceType = AFX_INET_SERVICE_FTP;
if (AfxParseURL(URL, dwServiceType, ServerName, strObject, nPort))
{
m_Connection = m_Session.GetFtpConnection(ServerName, m_Username, m_Password, nPort/*, true*/); // results in findfile still failing
if (m_Connection)
{
m_Connection->SetCurrentDirectory("sms"); // CDs into this dir
m_Finder = new CFtpFileFind(m_Connection);
if (m_Finder)
{
More = m_Finder->FindFile(_T("*.*")); // hangs here
}
}
}
catch (CException* pEx)
{
CString str;
LPTSTR error = str.GetBuffer(255);
pEx->GetErrorMessage(error, 255);
pEx->Delete();
str.ReleaseBuffer();
}
return More;
}

据我所见,要么我需要在 LIST 之前调用以打开此数据端口,或者找到阻止这些端口的防火墙并创建规则来防止这种情况( What ports does Wininet listen on for Active FTP data connection?)。当然,我也可以完全脱离基础——任何见解都将是 大大赞赏!

最佳答案

您的 FTP 服务器似乎需要加密连接 (TLS/SSL)。

WinInet 不支持加密的 FTP。
C++/Win32 The basics of FTP security and using SSL .

关于c++ - FTP NLST 仅在某些客户端计算机上导致 '425: Can' t 打开数据连接以进行传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60867740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com