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

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. js循环之map在工作中的使用

    map函数会返回一个全新的数组哈(重要 在实际中很有用) map循环空那个数组时,不会报错的. 使用map的优势 可以返回一个全新的数组 可以用于过滤 ps==>:map里面不要有判断,否者会返 ...

  2. 解决VS选择运行“在证书存储区中找不到清单签名证书”

     转:https://www.cnblogs.com/190196539/archive/2011/12/03/2272861.html 解决"在证书存储区中找不到清单签名证书" ...

  3. 几种方法验证unity是否为development build

    我在月初接入了uwa的性能测试SDK,需要提交一个development build的游戏安装包给uwa进行真人真机测试,本文说下如何判断安装包是否为development build. 直观上判断 ...

  4. vim 从嫌弃到依赖(0)——概述

    最近我想开一个新的系列,记录我使用vim的相关心得.初次接触vim是在大学操作系统实践课程中,跟着Linux一块进行学习的.当初我是百般嫌弃它的,想要进行编辑还要按下其他键,我想要移动光标居然还的切换 ...

  5. 第三届人工智能,大数据与算法国际学术会议 (CAIBDA 2023)

    第三届人工智能,大数据与算法国际学术会议 (CAIBDA 2023) ​ 大会官网:http://www.caibda.org/ 大会时间:2023年6月16-18日 大会地点:中国郑州 截稿日期:2 ...

  6. SpringBoot + LiteFlow:轻松应对复杂业务逻辑,简直不要太香!

    LiteFlow简介 LiteFlow是什么? LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑.通过支持热加载规则配置,开发者能够 ...

  7. navicat破解(15以前的版本)

    navicat破解各种不成功,很耽误事.所以,再次整理一个相对省事有效的办法.内容如下: 一:下载此激活工具 二:按下图生成激活码 1. 2. 点击手动激活 3. 将请求码按图粘贴,按图点击操作便可激 ...

  8. 小知识:什么叫做workaround?

    技术人当遇到具体问题,能给出的各种解决方案,有一种类型叫做workaround,翻译过来通常为"应变方法"."变通方法": 其实这种方式通常是没有找到根本的解决 ...

  9. 小知识:TFA收集日志报错空间不足

    今天在某客户环境下分析某节点驱逐的故障,发现有安装TFA,所以使用一键收集包含故障时刻的日志 tfactl diagcollect -from "2020-08-14 03:00:00&qu ...

  10. 21.1 动态TLS--《Windows核心编程》

    应用程序通过调用一组4个函数来使用动态 TLS,这些函数实际上最经常为 DLL 所使用. 通常情况下,如果DLL使用 TLS,那么当它用 DLL_PROCESS_ATTACH 标志调用它的 DllMa ...