在显示目录列表时,WinSCP如何知道符号链接的链接?

时间:2015-07-14 16:58:39

标签: sftp putty winscp

当您将WinSCP连接到包含符号链接的目录时,它会通过使用稍微不同的图标向您显示它是符号链接。例如。它不是一个文件夹,而是一个带箭头或其他文件夹的文件夹。

我的问题是...... WinSCP如何知道符号链接是文件夹的符号链接?

当SFTP进入目录时,客户端会发送SSH_FXP_READDIR数据包。服务器以SSH_FXP_NAME数据包响应。在我的测试中,似乎这个数据包中的数据对应于lstat - 而不是stat。即。如果您和权限属性1111 0000 0000 0000,则获得1010 0000 0000 0000(符号链接)而不是0100 0000 0000 0000(目录)。

我的猜测是,WinSCP然后为每个符号链接发送SSH_FXP_STAT,但也许它正在执行SSH_FXP_READLINK。如果后者服务器将以SSH_FXP_NAME响应 - 如果前者服务器将以SSH_FXP_ATTRS响应(对于一个文件而不是x文件几乎是SSH_FXP_NAME)。但话说回来,也许它完全在做其他事情。

记住WinSCP使用PuTTY我试图通过创建一个具有" Session logging"的PuTTY会话来查看它正在做什么。设置为" SSH数据包"。然后我尝试使用WinSCP连接到该会话,但没有创建putty.log文件。我没有在我最初运行PuTTY来更新会话的目录中看到它,也没有在C:\Program Files (x86)\WinSCP中看到它。所以我不知道它在哪里。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

WinSCP同时发送SSH_FXP_STATSSH_FXP_READLINK

如果符号链接指向文件或目录,则SSH_FXP_STAT查找。

SSH_FXP_READLINK找出链接目标。

请参阅WinSCP log

. 2015-07-20 11:00:15.837 Listing directory "...".
> 2015-07-20 11:00:15.837 Type: SSH_FXP_OPENDIR, Size: 53, Number: 11275
< 2015-07-20 11:00:15.894 Type: SSH_FXP_HANDLE, Size: 13, Number: 11275
> 2015-07-20 11:00:15.894 Type: SSH_FXP_READDIR, Size: 13, Number: 11532
< 2015-07-20 11:00:15.950 Type: SSH_FXP_NAME, Size: 431, Number: 11532
> 2015-07-20 11:00:15.950 Type: SSH_FXP_READDIR, Size: 13, Number: 11788
. 2015-07-20 11:00:15.950 Reading symlink "link".
> 2015-07-20 11:00:15.950 Type: SSH_FXP_READLINK, Size: 58, Number: 12051
> 2015-07-20 11:00:15.950 Type: SSH_FXP_STAT, Size: 58, Number: 12305
< 2015-07-20 11:00:16.005 Type: SSH_FXP_STATUS, Size: 28, Number: 11788
. 2015-07-20 11:00:16.005 Storing reserved response
< 2015-07-20 11:00:16.062 Type: SSH_FXP_NAME, Size: 41, Number: 12051
. 2015-07-20 11:00:16.062 Link resolved to "target.txt".
< 2015-07-20 11:00:16.062 Type: SSH_FXP_ATTRS, Size: 37, Number: 12305
< 2015-07-20 11:00:16.063 Status code: 1
> 2015-07-20 11:00:16.063 Type: SSH_FXP_CLOSE, Size: 13, Number: 12548