WinInet FTP交换机在连接时被动到活动模式?

时间:2017-06-07 13:55:27

标签: ftp wininet passive-mode

我使用WinInet连接到FTP服务器。我使用FtpCommand()发送" PASV"命令从活动模式切换到被动模式。我现在正在搜索相反的命令,从Passive切换到Active模式。有谁知道怎么做?

1 个答案:

答案 0 :(得分:2)

通过发送PORT(或EPRT)命令而不是发送PASV(或EPSV)命令来启用活动模式。 PORT / EPRT告诉服务器它需要在您的系统上主动连接哪个IP /端口。

如果您想了解FTP协议的工作原理,建议您阅读FTP规范RFC 959及其各种扩展,尤其是RFC 2428RFC 3659

在WinInet中,当您致电InternetConnect()InternetOpenUrl()时,通常会在会话开始时建立传输模式。如果指定INTERNET_FLAG_PASSIVE标志,则会强制执行被动模式。如果未指定标志,则模式由用户的默认Internet选项确定。此模式允许FtpGetFile() / FtpPutFile()FtpFindFirstFile() / InternetFindNextFile()函数在其自己的数据连接上运行。为会话建立模式后,无法更改AFAIK。

但是,您可以使用FtpCommand()手动发送任何FTP命令,包括PASV / EPSVPORT / EPRT。如果将fExpectResponse参数设置为TRUE,则phFtpCommand输出参数将在创建数据套接字时为您提供新的HINTERNET句柄。您可以使用InternetReadFile()InternetWriteFile()的句柄通过该数据连接传输文件和目录列表。