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

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. echarts饼状图自定义legend的样式付费

    先看效果图 代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  2. TypeScript接口的讲解-强制约束-可选属性-任意多个属性-只读属性

    接口 接口:可以描述类的一部分抽象行为, 也可以描述数据的结构形状 接口一般首字母大写, 接口中 可以定义为 强制约束 可选属性 只读属性 任意属性 # 强制约束 // 定义接口 interface ...

  3. 【代码片段】fasthttp 中的输出使用 gzip 压缩

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 直接上代码: import ( "github. ...

  4. 消息队列RabbitMQ教程

    RabbitMQ教程 翻译自RabbitMQ Tutorials. 0. 准备 前期准备 1. Hello World 最简入门教程 2. 工作队列 竞争消费者模式 3. 发布/订阅 同时发送消息给多 ...

  5. 【7】vscode不同的窗口样式和颜色插件peacock、设置打开多个窗口、md文件打开方式和预览以及插入目录

    相关文章: [1]VScode中文界面方法-------超简单教程 [2]VScode搭建python和tensorflow环境 [3]VSCode 主题设置推荐,自定义配色方案,修改注释高亮颜色 [ ...

  6. C++ Boost 实现异步端口扫描器

    端口扫描是一种用于识别目标系统上哪些网络端口处于开放.关闭或监听状态的网络活动.在计算机网络中,端口是一个虚拟的通信端点,用于在计算机之间传输数据.每个端口都关联着特定类型的网络服务或应用程序.端口扫 ...

  7. 神经网络优化篇:详解测试时的 Batch Norm(Batch Norm at test time)

    Batch归一化将的数据以mini-batch的形式逐一处理,但在测试时,可能需要对每个样本逐一处理,来看一下怎样调整的网络来做到这一点. 回想一下,在训练时,这些就是用来执行Batch归一化的等式. ...

  8. mybatis批量插入支持默认值和自定义id生成策略的免写sql插件

    最近做项目时用了免写sql的插件但是发现批量操作不满足现有需求.所以,在原有基础之上扩展了批量的操作支持[支持插入默认值和自定义id生成策略].使用方法如下: 一:在pom文件中引入jar配置 < ...

  9. 开源免费绘制小工具drawio推荐

    最近给客户做架构评估写报告时,需要画一些架构示例简图,需求很简单,没到非要用付费软件的程度. 同事推荐一款开源免费的绘制软件drawio,实际体验不错,可以满足我的使用需求. drawio官方网站: ...

  10. 阿里巴巴 ali1688 Date +0800的问题

    package com.example.testredis.controller; import java.text.DateFormat; import java.text.ParseExcepti ...