V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
zhoudaiyu
V2EX  ›  奇思妙想

想做个剪贴板同步的程序,请大家来看看我的想法吧

  •  
  •   zhoudaiyu · 2022-01-09 13:23:10 +08:00 · 4278 次点击
    这是一个创建于 1052 天前的主题,其中的信息可能已经有所发展或是发生改变。

    ​ 事情的背景是这样的:我们办公时要同时使用本地的电脑(编码、文档等)和一个远程桌面(用于一些运维操作,程序 debug 等,这个远程桌面是部署在服务器上的,通过华为的 AccessClient 连接),本地电脑可以文本到远程桌面服务器,但是反过来不可以,因此我想到了一个方法来实现从远程桌面将文本(后续可能做文件的)复制到办公电脑的办法,整体架构图如下:

    剪贴板同步.jpg

    ​ 其实就是靠 ditto 把剪贴板的内容持久化到 sqlite 中,我自己在远程桌面端启动一个客户端去监听 sqlite 的 Main 表中的插入记录中的 mText 字段,mText 中存储内容大致如下:

    image.png

    ​ 然后将内容推送到一台办公电脑和远程桌面都能连接的,运行着 kafka 的服务器上,然后办公电脑端启动一个客户端去消费 kafka 的某个 topic ,并同步到本地客户端,用户就可以选择要粘贴的内容了。

    ​ 但是还有几个细节需要问问大家:1 、关于生产 /消费到到哪个 topic ,是否还需要一个程序去确定和同步 topic 的信息? 2 、消息内容虽然可以通过 kafka 提供的 tls 加密保证不被窃取,但是怎么不保证有人故意去连接别的 topic 去获取他人的剪贴板内容,即如何保证生产和消费的两个客户端都只能消费特定的 topic ? 3 、关于语言,我想用 Go 实现上述的功能,原因是:( 1 )单文件,依赖少,方便部署;( 2 )破解的难度相比如脚本语言高一些;( 3 )可跨操作系统编译,大家觉得可以吗?

    ​ 请大家说说这个思路的可行性和不足之处,十分感谢!

    第 1 条附言  ·  2022-01-09 14:30:10 +08:00
    35 条回复    2022-01-13 11:52:06 +08:00
    zhoudaiyu
        1
    zhoudaiyu  
    OP
       2022-01-09 13:35:42 +08:00
    补充一点,远程桌面是不可以连接 Internet 的,只能连接某些服务器,这些服务器也是在内网环境的,所以微信、QQ 等需要 Internet 连接的方式都行不通,所以才想了这种思路
    minamike
        2
    minamike  
       2022-01-09 14:38:25 +08:00 via iPhone
    为什么不用 rdp
    rdp 不是可以双向复制粘贴吗
    thunderw
        3
    thunderw  
       2022-01-09 14:42:04 +08:00
    @minamike 怎么感觉只能进不能出是管理需求呢。这是一个 feature ,不是一个 bug 吧。
    zhoudaiyu
        4
    zhoudaiyu  
    OP
       2022-01-09 14:42:16 +08:00
    @minamike #2 因为用华为的那个客户端不是我能定的,在华为的客户端里就不能双向复制粘贴
    zhoudaiyu
        5
    zhoudaiyu  
    OP
       2022-01-09 14:43:43 +08:00
    @thunderw #3 对,但是也没有限制不能用别的手段粘贴出来,因为可以用 ftp ,但是好多人抱怨麻烦,我也觉得是(狗头
    minamike
        6
    minamike  
       2022-01-09 14:45:23 +08:00 via iPhone
    @zhoudaiyu 华为的那个客户端有什么特别的功能吗= =
    zhoudaiyu
        7
    zhoudaiyu  
    OP
       2022-01-09 14:48:44 +08:00
    @minamike #6 企业定制的一些功能吧,主要是这个限制非常麻烦,从里面粘贴东西出来内容要到文件里->把文件推送到 ftp 服务器->然后自己电脑 ftp 刷新->拉文件->打开文件
    minamike
        8
    minamike  
       2022-01-09 14:51:11 +08:00 via iPhone
    @zhoudaiyu 那为什么不直接用 iCloud 呢
    zhoudaiyu
        9
    zhoudaiyu  
    OP
       2022-01-09 14:52:34 +08:00
    @minamike #8 远程桌面环境不能连接 Internet ,参考我的 1 楼
    xinyana
        10
    xinyana  
       2022-01-09 16:43:26 +08:00 via Android
    之前想过这个问题也分析过 ditto 的表结构,楼主加油,静待佳音
    zhoudaiyu
        11
    zhoudaiyu  
    OP
       2022-01-09 17:07:10 +08:00 via iPhone
    @xinyana 大佬,我没看过代码,就直接读的数据库,找的表和字段没错吧?想和你交流交流,不知方便否?
    mscststs
        12
    mscststs  
       2022-01-09 18:21:23 +08:00   ❤️ 1
    xinyana
        13
    xinyana  
       2022-01-09 20:28:29 +08:00 via Android
    @zhoudaiyu tg haopian
    starsky007
        14
    starsky007  
       2022-01-09 21:23:22 +08:00 via Android
    为什么要引入 ditto ,难道不能直接监听剪贴板变化?
    zhoudaiyu
        15
    zhoudaiyu  
    OP
       2022-01-09 21:37:01 +08:00 via iPhone
    @starsky007 开发成本低,公司内部用
    yufeng0681
        16
    yufeng0681  
       2022-01-09 23:13:34 +08:00
    1 、这种 copy 限制,都是为了信息安全而设定; 你应该找运维人员,让他去联系华为云电脑供应商,如何开启桌面云 copy 到本地电脑的设置项(一般都有这样的功能,可能不让大段的 copy ,500 字节之类的限制还是要做的);
    2 、一般如果是运维生产系统,基本上就是 linux 上运行,极少在 windows 上跑服务。 如果真的允许你们用 ftp 做中转。那其实已经突破了隔离生产环境的概念,属于面子上做做信息安全(生产隔离)。 那直接让运维人员开启 ssh 中转服务,直接从本地系统通过跳板机登录到目标服务器,采集日志信息(权限约束为:只读, 不允许进程操作,文件删除等操作)
    zhoudaiyu
        17
    zhoudaiyu  
    OP
       2022-01-09 23:22:22 +08:00 via iPhone
    @yufeng0681 我就是运维……我们真的允许 FTP 中转…….
    yufeng0681
        18
    yufeng0681  
       2022-01-09 23:25:51 +08:00
    1 、桌面云有服务端管理功能,分配系统权限,分配硬件资源。 可以咨询一下华为对接的。如何改。
    2 、允许 ftp ,那你就再开 ssh 服务呗,本地就能跳到目标服务器进行运维操作(只读类的,不蛮好么。 还开发软件干啥……
    zhoudaiyu
        19
    zhoudaiyu  
    OP
       2022-01-09 23:28:12 +08:00 via iPhone
    @yufeng0681 但是我们用的这个也是我们总公司买的,我们没权限搞这些。SSH 就别想了,只有 FTP 可以用…
    yufeng0681
        20
    yufeng0681  
       2022-01-09 23:45:25 +08:00
    你如果没有权限在都能访问到的机器 A 上安装 ssh ,那你怎么能在机器 A 上开 kafka 呢?而且还 两边机器都能连上机器 A 的 kafka 端口?
    你具备的权限和条件要说得更详细一些。
    你具体的运维场景详细说明,就不一定要用自己开发软件的办法,而是用别人的软件搭建就好。
    zhoudaiyu
        21
    zhoudaiyu  
    OP
       2022-01-09 23:54:17 +08:00 via iPhone
    @yufeng0681 网络环境比较复杂,估计还得画个图。您说的意思是把 kafka 换成 SSH 做中转?
    catror
        22
    catror  
       2022-01-10 02:17:16 +08:00 via Android
    反向复制就是在远程桌面的管理后台点一个 Checkbox 的事……
    klo424
        23
    klo424  
       2022-01-10 08:22:03 +08:00
    复制文件可以用文叔叔
    lonenol
        24
    lonenol  
       2022-01-10 09:06:23 +08:00
    换个思路,直接截图 ocr 。。

    你这种做法个人感觉不太好。。你可以监听剪切板,别人就可以监听所有 db 操作,把数据搞一份出来。。
    zhoudaiyu
        25
    zhoudaiyu  
    OP
       2022-01-10 09:09:11 +08:00
    @lonenol #24 数据库是本地的.db 文件,不暴露任何端口,别人无法连进来。orc 遇到代码不知道好使不好使

    @catror #22 可惜不是我们能控制的,我们只能用

    @klo424 #23 这个不太行,得能本地化部署
    dreamage
        26
    dreamage  
       2022-01-10 09:35:43 +08:00
    公司规定限制的,LZ 还在想办法(帮公司同事)突破限制,不怕背锅么
    zhoudaiyu
        27
    zhoudaiyu  
    OP
       2022-01-10 09:36:28 +08:00
    @dreamage #26 先自己偷摸用,暗中观察🐶
    gaobing
        28
    gaobing  
       2022-01-10 10:01:42 +08:00
    raullf
        29
    raullf  
       2022-01-10 14:24:45 +08:00 via iPhone
    我很好奇,16L 说的对噢,本来就是为了信息安全,单向联通 de
    你怎么从远程出来呢?
    raullf
        30
    raullf  
       2022-01-10 14:25:26 +08:00 via iPhone
    另问架构图用什么软件画的呢,看着很美
    zhoudaiyu
        31
    zhoudaiyu  
    OP
       2022-01-10 14:37:46 +08:00
    @raullf #30 processon
    hntangbohu
        32
    hntangbohu  
       2022-01-10 15:33:21 +08:00
    qq 输入法好像有 云粘贴板
    klo424
        33
    klo424  
       2022-01-11 08:30:03 +08:00
    @zhoudaiyu #25 本地化部署也能上外网吧?不能上外网的话,你想的那个方案也不行啊?
    zhoudaiyu
        34
    zhoudaiyu  
    OP
       2022-01-11 09:16:37 +08:00
    @klo424 #33 能通过图中的服务器中转就可以
    5966
        35
    5966  
       2022-01-13 11:52:06 +08:00 via iPhone
    我们这用的 Citrix Receiver 虚拟桌面,有权限的账号可以拷贝出文件!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1320 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:06 · PVG 02:06 · LAX 10:06 · JFK 13:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.