【问题标题】:File upload to ftp and sftp文件上传到 ftp 和 sftp
【发布时间】:2013-05-07 21:10:12
【问题描述】:

我陷入了一个问题。根据我的最新要求,我必须将文件上传到 ftp 或 sftp 服务器。问题是我不知道服务器是 ftp 还是 sftp。在运行时客户端将提供我必须上传文件的服务器的 ip 和其他详细信息。因此,在运行时我必须了解服务器是 ftp 还是 sftp,然后需要采取相应的行动。那么,有什么出路吗?

【问题讨论】:

  • 获取 ftp 和 sftp 客户端,尝试连接任何一种方式,看看会发生什么?这不是火箭科学……如果前门 (ftp) 被锁住,请绕回去尝试 sftp。
  • 在研究这个问题的时候,一定要搞清楚是不是真的是sftp而不是ftps或者ftp over ssh

标签: java ftp sftp


【解决方案1】:

SFTP(SSH 文件传输协议)默认使用端口 22。

有些人使用“SFTP”来表示 FTPS(FTP-over-TLS)。在这种情况下,您有两个选择:显式 TLS 和隐式 TLS。默认情况下,隐式 TLS 使用端口 990。在显式模式下,客户端默认连接到端口 21,然后告诉服务器通过现有连接启动 TLS 握手。

普通 FTP 使用端口 21。

现在,用户可以明确指定要使用的协议。

最后你可以尝试连接,从socket中抓取第一行数据并分析。在 FTP/FTPS 中,第一行应该以 220SP 开头(SP 代表空格,字符代码为 0x20)。也可以给出其他响应代码。在 SSH/SFTP 中,该行以 "SSH-2.0-" 开头。

【讨论】:

  • ftp 和 sftp 将使用不同的端口(分别为 21 和 22)。这应该是“服务器的 ip 和其他详细信息”的一部分。那么,如何从那里获取代码呢?可以举个例子吗?
  • @Souvik 我不确定我是否理解您的问题。你想从哪里得到哪个代码?
  • 我的客户端只会在运行时向我提供 IP(不是端口,如果 FTP 我必须将其设为 21,否则为 22)用户名和密码,但没有关于服务器的信息是 ftp 或 sftp。我必须连接到服务器,并且需要确定服务器是 FTP 服务器还是 SFT 服务器。所以,有没有可以用 java 编写的程序来识别它。
  • @Souvik 你必须有一个用户指定的(端口或协议)。如果没有其中任何一个,您将无法知道连接到哪里。
【解决方案2】:

ftp 和 sftp 将使用不同的端口(分别为 21 和 22)。这应该是“服务器的 ip 和其他详细信息”的一部分。

【讨论】:

  • 我的程序会根据服务器来确定端口。那么有什么方法可以识别服务器中的FTP或SFTP
猜你喜欢
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
  • 2012-06-09
  • 2012-03-12
  • 2013-09-26
  • 2014-07-26
  • 1970-01-01
相关资源
最近更新 更多