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

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. 去除 i 标签的倾斜样式;如何引入本地的阿里字体图标

    去除 i 标签的倾斜样式 i{ font-style:normal; } 如何引入本地的阿里字体图标 将代码下载下来 当然你将下载下载来的资源有用的放在静态资源中 然后在 main.js 引入: ma ...

  2. elementui出现展开后子菜单宽度多出1px问题

    添加 就可以解决了 .el-menu { border-right-width: 0; } <template> <div class="compen-left-men&q ...

  3. 手撕Vue-数据驱动界面改变中

    经过上一篇的介绍,已经实现了观察者模式的基本内容,接下来要完成的就是将上一篇的发布订阅模式运用到 Nue 中,实现数据驱动界面改变. 在监听数据变化的章节当中,根据指定的区域和数据去编译渲染界面 这个 ...

  4. MySQL 中使用变量实现排名名次

    title: MySQL 中使用变量实现排名名次 date: 2023-7-16 19:45:26 tags: - SQL 高级查询 一. 数据准备: CREATE TABLE sql_rank ( ...

  5. Gitee一个仓库存储多个项目

    需求:     平时会做一些小项目,有时候一个小项目就几行代码,十几K的项目,给这些小项目建一个库保存太奢侈了太浪费了,所以换个思路,根据项目类型来创建库,然后每个小项目以孤立分支的方式存到该库中,这 ...

  6. Ubuntu ISO镜像文件下载(Ubuntu 22.04.2 LTS)

    Ubuntu 22.04.2 LTS 链接:https://pan.baidu.com/s/1YuWSOBH9mTZMjJTW7HM91g 提取码:b8lf

  7. 【可观测性系列】 Opentelemetry 介绍

    作者简介:大家好,我是蓝胖子 ️博客首页:博客园主页蓝胖子的编程梦 每日一句:人生的烦恼,多在于明白的太多,而做的太少 大家好,我是蓝胖子,随着微服务的流行,服务的可观测性概念被越来越多人提及到,究竟 ...

  8. 常用容器:动态数组array、列表list、队列 queue、map或字典、 集合、栈等等

    一般语言都会提供一些逻辑容器的实现,各个语言的实现方式不同:底层的数学算法应该差不多: 动态数组 `` 这个没啥可说的,就是一个数组,满了时候,再创建一个数组,把之前的数组里的数据移过来,销毁之前数组 ...

  9. Hive3.1.2安装部署

    一.安装Hive3.1.2 备注:在安装Hive3.1.2之前,请首先安装Hadoop3.1.3. 1. 下载并解压Hive安装包 tar -zxvf ./apache-hive-3.1.2-bin. ...

  10. 跨界协作:借助gRPC实现Python数据分析能力的共享

    gRPC是一个高性能.开源.通用的远程过程调用(RPC)框架,由Google推出.它基于HTTP/2协议标准设计开发,默认采用Protocol Buffers数据序列化协议,支持多种开发语言. 在gR ...