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

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. [postgres]配置主从异步流复制

    前言 环境信息 IP 角色 操作系统 PostgreSQL版本 192.168.1.112 主库 Debian 12 15.3 192.168.1.113 从库 Debian 12 15.3 配置主从 ...

  2. ShardingSphere

    目录 1.ShardingSphere分表与分库分表 2.ShardingSphere分库分表查询 3.自定义分片算法实现range查询 4.SPI扩展机制概述 5.stand通过SPI实现range ...

  3. 群联预告满血PCIe 5.0 SSD主控:飙上14.7GB/s

    群联电子将在CES 2024上展示两款新的PCIe 5.0 SSD主控方案,一个定位旗舰,一个面向主流. PCIe 5.0 SSD诞生已经差不多一年了,但是受限于群联E26主控的先天不足,以及闪存技术 ...

  4. 俄大神 lopatkin Windows 精简优化系统 - 工具软件

    昨天有个网友邮件我,说是想找个Tiny7 Rev2的ISO操作系统文件,但是我找了下,以前的那些文件有些已经删除了,所以就在网上搜到了俄大神 lopatkin Windows 精简优化系统,特此放到网 ...

  5. 体验 ABP 的功能和服务

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. ABP是一个全栈开发框架,它在企业解决方案的各个方面都有许多构建模块.在前面三章中 ...

  6. delphi中 注意一点,record 类型 参数默认是 值拷贝,class 参数 默认是传地址;值传递,指针传递、引用传递

    作为函数的入参,若是record类型,默认是值拷贝,效率低,若要传指针,需要加 var ; 作为函数的入参,若是 class类型,默认是传地址,不需要加var unit Unit1; interfac ...

  7. .NET Core开发实战(第28课:工作单元模式(UnitOfWork):管理好你的事务)--学习笔记

    28 | 工作单元模式(UnitOfWork):管理好你的事务 工作单元模式有如下几个特性: 1.使用同一上下文 2.跟踪实体的状态 3.保障事务一致性 我们对实体的操作,最终的状态都是应该如实保存到 ...

  8. MySQL优化技术系列-谓词下推(pushdown)

    谓词下推 将外层查询块的 WHERE 子句中的谓词移入所包含的较低层查询块(例如视图),从而能够提早进行数据过滤以及有可能更好地利用索引. 这在分区数据库环境中甚至更为重要,其原因在于,提早进行过滤有 ...

  9. 压缩软件7-Zip的简单使用

    简介及下载地址 7-Zip是一款开源免费的压缩软件,支持windows系统及Linux系统,压缩后文件扩展名默认为.7z后缀.   网址: https://www.7-zip.org/ 截图如下: 也 ...

  10. 编译pjsip源码

    操作系统 : Windows 10_x64 [版本 10.0.19042.685] pjsip版本 : 2.10 pjsip官网:https://www.pjsip.org/ 1. 下载pjsip源代 ...