2013-05-13 160 views
1

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

+0

获取ftp和sftp客户端,尝试以任一方式连接,并查看所发生的事情?这不是火箭科学......如果前门(ftp)被锁定,请回过头去尝试sftp。 – 2013-05-13 18:33:17

+0

在研究这个问题时,一定要确定它是否真的是'sftp',而不是'ftps'或'ftp over ssh'。 – BLuFeNiX 2013-05-13 18:47:58

回答

2

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

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

平原FTP使用端口21

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

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

+0

ftp中的FTP或SFTP,并且sftp将使用不同的端口(分别为21和22)。这应该是“服务器的ip和其他细节”的一部分。那么,如何从那里获取代码?你能举个例子吗? – Souvik 2013-05-14 06:14:29

+0

@Souvik我不知道我理解你的问题。你想从哪里得到哪些代码? – 2013-05-14 06:15:39

+0

我的客户端只会在运行时为我提供IP(不是端口,如果是FTP,我必须使其为21或22)用户名和密码,但没有关于服务器的信息是ftp或sftp。我必须连接到服务器,并且需要确定服务器是FTP服务器还是SFT服务器。那么,是否有任何可以用java编写的程序来识别它。 – Souvik 2013-05-14 12:21:26

0

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

+0

我的程序将根据服务器确定端口。那么是否有任何方法来识别服务器 – Souvik 2013-05-14 06:15:30