终于有时间写点东西了,上次写东西已经是三个月之前了。自从出现了觉得一个月写一篇文章也没关系的想法之后就已经完全忘记有这回事儿了。一直觉得没有足够的时间,但是又想写出质量比较好的文章,所以就一直没有动笔(键盘)。

Kconnect 远程文件管理

最开始知道这个软件是在manjaro上面,是和KDE桌面属于一个软件套件的软件。当时只是简单的使用之后觉得用处并不大,尤其是里面很多的功能完全用不到,也就是文件传输,还有同步剪切板这两个功能对我来说比较有用。可是就发送文件这样的功能也会有问题,比如说电脑不能一次给手机发送多个文件。而且经常手机收不到文件,不过好在手机给电脑发送并没有问题。而且支持跨平台,电脑切换系统之后并不影响kconnect的连接。

KDE Connect | KDE Connect: A project that enables all your devices to communicate with each other.

里面有一个叫做远程文件系统浏览器的插件,但是一直不知道怎么用。后来知道了是通过在手机开启一个sftp服务,电脑通过sftp://启动sftp客户端,然后来连接手机,实现文件系统的浏览。

但是问题来了,kconnect在点击浏览文件之后会弹出一个框

直观的第一个感觉就是软件打开了一个sftp://的链接,但是因为我的电脑没有注册sftp://协议,以至于没有对应的软件被打开。

但是我的电脑安装了filezilla这个软件的,所以首先尝试是否能够通过这个软件直接连接到手机上面的sftp端口,但是现在需要知道是哪个端口。众所周知,如果没有root权限,应用是监听不了0-1024端口的,所以,肯定不是22端口。

这里直接通过zenmap扫描了一波手机,知道监听的端口是1794。但是通过匿名的方式连接这个端口是连接不上的,也就是说,他是有密码的。但是密码是什么呢?

按照正常流程,如果想让电脑连接手机,那么手机就需要先把账号密码传递给电脑。那么我能不能抓包呢?答案是不行的,使用火绒剑能看到手机确实给电脑发送了数据,并且最终通过IE框架打开了什么东西,但是通过wirshark抓到的数据是通过ssl加密的。我真笨,当然不会明文传输密码了。那么传输的是什么东西呢?

我是用kde系列软件的一个原因之一就是因为它们开源,那么现在去找到安卓客户端的源码。

https://invent.kde.org/network/kdeconnect-android/

if (server.start(storageInfoList)) {
if (preferences != null) {
preferences.registerOnSharedPreferenceChangeListener(this);
}
NetworkPacket np2 = new NetworkPacket(PACKET_TYPE_SFTP);
//TODO: ip is not used on desktop any more remove both here and from desktop code when nobody ships 1.2.0
np2.set("ip", server.getLocalIpAddress());
np2.set("port", server.getPort());
np2.set("user", SimpleSftpServer.USER);
np2.set("password", server.getPassword());
//Kept for compatibility, in case "multiPaths" is not possible or the other end does not support it
np2.set("path", "/");
if (paths.size() > 0) {
np2.set("multiPaths", paths);
np2.set("pathNames", pathNames);
}
device.sendPacket(np2);
return true;
}

这里能看到是把需要的信息都给电脑发送过去了,账号密码是什么呢?

static final String USER = "kdeconnect";
passwordAuth.password = RandomHelper.randomString(28);

呜呼,密码是随机的

那么换个思路,既然电脑端最终是会打开一个sftp://协议的uri,那就试着注册一个sftp的协议?

注册sftp协议

类似于sftp://这样的协议有一个众所周知的例子,就是thunder://迅雷的链接。那么他是怎么实现的呢?

众所周知,注册表就是操作系统的配置中心,那么里面肯定会有thunder这样的关键字,通过win+r运行regedit打开注册表编辑器,然后搜索thunder

出现很多这样的结果,例如上面这个应该就是右键菜单。继续搜索,直到看到了一个可疑的项。搜索过程中,逐渐发现HKEY_CLASSES_ROOT这个项里面都是指定什么协议或者什么文件由什么程序处理类似的的信息。

最终找到了下面的信息,一目了然

简单解释就是,浏览器的地址栏输入thunder://xxxxx这样的链接之后,去执行Thunder.exe这个程序,并且传递参数,%1-StartType:thunder其中前者是个变量类似于Linux函数中的$1,代表的是thunder://后面的字符串。再加上第二个参数,Thunder.exe就能知道用户是通过thunder://协议想要下载xxxxxx链接的文件。

原理知道了,那么接下来只需要按照这样的格式创造一个sftp://协议的就好了。那么谁来处理这个链接呢?肯定是FileZilla啦,一个很成熟的ftp协议的开源实现,所以肯定是支持参数启动的。

FileZilla的官方没有找到对应的描述,但是在别的地方看到了启动方式filezilla 怎么带这参数启动 - SegmentFault 思否

"E:\filezilla.exe" ftp://username:password@ftp.server2.com --local="F:\electron"

看上面的参数,第一个参数应该就是uri了,我猜测电脑端的kconnect就是尝试通过IE框架运行的这么个东西。第二个参数就是指定本地文件夹了,看起来不指定也可以。

注册sftp协议

根据我的经验,最好的办法就是,把thunder协议的配置信息导出,然后修改成自己的就行了,否则哪个地方出错了会比较烦人。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\thunder]
"URL Protocol"="" [HKEY_CLASSES_ROOT\thunder\Shell] [HKEY_CLASSES_ROOT\thunder\Shell\Open] [HKEY_CLASSES_ROOT\thunder\Shell\Open\command]
@="\"C:\\Program Files (x86)\\Thunder Network\\Thunder\\Program\\Thunder.exe\" \"%1\" -StartType:thunder"

这是thunder对应的配置

修改定制一下

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\sftp]
"URL Protocol"="" [HKEY_CLASSES_ROOT\sftp\Shell] [HKEY_CLASSES_ROOT\sftp\Shell\Open] [HKEY_CLASSES_ROOT\sftp\Shell\Open\command]
@="\"C:\\Program Files\\FileZilla FTP Client\\filezilla.exe\" \"%1\""

现在另存为sftp.reg,双击导入到注册表。现在再通过kconect位于右下角托盘图标右键的浏览设备就能直接打开FileZilla了,并且能直接连接上手机了。

顺利的不可思议。。。感谢伟大的FileZilla,开源免费真的是太好了。

注意

手机端的kconnect需要在插件中设置一个目录作为sftp的工作目录,不然电脑端点击浏览设备什么都不会发生

Kconnect使用sftp windows自定义协议的更多相关文章

  1. C#综合揭秘——通过修改注册表建立Windows自定义协议

    引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...

  2. 【转】C#综合揭秘——通过修改注册表建立Windows自定义协议

    引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...

  3. 通过修改注册表建立Windows自定义协议

    引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...

  4. 【Win10 UWP】URI Scheme(二):自定义协议的处理和适用场景

    上一篇提到Windows Store协议的使用,其实Windows Store协议仅是系统内建的一种协议规则.我们也可以自己定义一套规范的URI-Scheme,除了可以给其他App调用外,本应用也可以 ...

  5. 【Win10 UWP】URI Scheme(一):Windows Store协议的解析和使用

    协议是Windows Phone和Windows Store应用的一个重要特点,可以做到在不同应用之间进行互相呼起调用.小小协议,学问大着呢.我打算写几篇关于协议在UWP中使用的文章. 这一讲的主要对 ...

  6. 采用自定义协议代替OCX组件

    事情起源:公司视频播放一直是采用的嵌入浏览器组件实现视频的预览回放等功能.这种实现方式要求客户使用IE浏览器. 最近上线项目使用Html 5开发,要求IE11.项目中使用了视频播放功能,如果全部升级到 ...

  7. 使用浏览器自定义协议启动本地程序(.EXE文件)

    比如,自定义协议名称为 myapp,要启动的本地程序为 myapp.exe. 1)首先向注册表添加如下内容: Windows Registry Editor Version 5.00 [HKEY_CL ...

  8. 【转载】Chrome使用自定义协议打开本地程序并运行IE打开网页

    部分内容转载自: http://blog.sina.com.cn/s/blog_e2b8213a0102wqby.html 项目中遇到某需求:chorme要运行IE并打开网页.解决方案之一就是通过自定 ...

  9. 在chrome浏览器中调用IE浏览器并访问(openIE.reg自定义协议)

    在谷歌浏览器中有4种方法调用IE浏览器.如下: c++ socket通过浏览器在ie中打开指定url : vb生成exe,url访问exe启动ie并打开指定url : 通过socket实现通过http ...

  10. 使用JS检测自定义协议是否存在

    [该博客是拼接他人的,原因我们这边PC的开发人员问我,有没有关于js某个对象直接能检测手机或者电脑的自定义协议的,我上网搜了下,貌似移动端的解决比较多] 最终解决方案:还是需要github上面大神写的 ...

随机推荐

  1. 【小测试】玩一玩 VictoriaMetrics 的 force merge

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 我是期望通过备份来建立 VictoriaMetrics 的 ...

  2. 【0基础学爬虫】爬虫基础之自动化工具 Pyppeteer 的使用

    大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶.逆向相关文章,为实现从易到难全方位覆盖,特设[0基础学爬 ...

  3. 如何通过gRPC传输文件

    在gRPC中,可以通过将文件分割成多个小块,然后使用流式RPC将这些小块发送到服务器来传输文件.以下是一个简单的示例,展示了如何在gRPC中实现文件传输. 首先,我们需要定义一个服务来处理文件传输.在 ...

  4. 本地搭建playground

    本文主要是记录我搭建go playground的步骤. 1.安装docker 如果你使用的Ubuntu,docker的安装步骤可以参见这里,这是我之前写的在Ubuntu18.04下安装fabric,其 ...

  5. 从零开始配置vim(19)——终端配置

    在上一篇文章中,我们熟悉了终端模式,并且配置了终端模式的一些操作.但是它总是有那么一点不符合我们的使用习惯.这篇我们将通过强大的插件来完善终端操作的体验. 在介绍插件之前让我们先回退到上一个版本,我们 ...

  6. 多智能体强化学习算法【三】【QMIX、MADDPG、MAPPO】

    相关文章: 常见多智能体强化学习仿真环境介绍[一]{推荐收藏,真的牛} 多智能体强化学习算法[一][MAPPO.MADDPG.QMIX] 多智能体强化学习算法[二][MADDPG.QMIX.MAPPO ...

  7. Centos8 配置IP地址与阿里YUM源

    Centos8 系统中无法找到network.service网络服务,默认已经被nmcli替换了,所以修改方式略微变化,在/etc/sysconfig/network-scripts/里也看不到任何脚 ...

  8. OS X 下安装 pycurl

    1 (venv) ➜ pythonProject4 find / -iname ssl.h 2 find: /usr/sbin/authserver: Permission denied 3 /usr ...

  9. 【链表】【python】力扣24. 两两交换链表中的节点【超详细的注释和解释】

    目录 说在前面的话 前言 一.题目(力扣24. 两两交换链表中的节点) 二.题目分析 实现完整代码(Python实现) 总结 说在前面的话 博主也好长一段时间没有更新力扣的刷题系列了,今天给大家带来一 ...

  10. VS Code 使用

    Tips 总结 1. VSCode显示空格和tab符号 1.打开setting,在搜索框中输入renderControlCharacters,选中勾选框,即可显示tab 2.在搜索框中输入render ...