吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1800|回复: 8
收起左侧

[Python 原创] 基于剪切板文本模式的文件传输工具(这有啥用?)

[复制链接]
天域至尊 发表于 2022-12-8 17:12
有的时候,我们通过某些远程工具,可以是远程主机与本机共享剪切板,但是这种剪切板只能传输文本,不能传输文件。
那么有没有依靠于文本的方式,进行文件传输呢?

因为文本模式往往有长度限制,所以思路是这样的:
1.将待传输文件切片,每一片整理为base64,存储到剪切板
2.目标机器读取剪切板数据,解析成二进制,写入文件
3.重复上述过程,将一个文件全部数据发送过去

我自己写了个,试了试,能用,在vm中,你要不断地把鼠标划入虚拟机,再划出来,以此同步双方剪切板。
聊胜于无吧,用于极端情况下的文件传输。

[Python] 纯文本查看 复制代码
import pyperclip,time,json
from base64 import b64encode, b64decode
import argparse

parser = argparse.ArgumentParser(description='使用剪切板文本模式发送文件,发送端先启动,接收端再启动')
parser.add_argument("-s","--send",help="选择发送模式",action="store_true")
parser.add_argument("-g","--get",help="选择接收模式",action="store_true")
parser.add_argument("-f","--file",help="指定发送或接收的文件路径及名称",type=str)
parser.add_argument("--size",help="指定单次发送内容的字节数,默认为1024",type=int,default=1024)
args=parser.parse_args()

read_file=args.file
write_file=args.file
#True-发送  False-接受
mode=args.send

size=args.size

now_data=""
now_id=0
now_id_list=[]
error_num=0

def check_data(now_id):
    """
    """
    global now_data
    while True:
        text = pyperclip.paste()
        if now_data==text:
            time.sleep(0.01)
            continue
        try:
            data=json.loads(text)
            if data["now_id"]==now_id and data["answer"]==True:
                now_data=text
                return True
        except Exception:
            return False

def send(read_file):
    """
    发送数据
    """
    global size,now_data,now_id
    f=open(read_file,mode="rb")
    finish=False
    while finish==False:
        time.sleep(0.01)
        file_data=f.read(size)
        now={
            "now_id":now_id,
            "finish":False,
            "answer":False,
            "data":b64encode(file_data).decode("utf8")
        }
        if len(file_data)==0:
            print("send data finish!")
            now["finish"]=True
            finish=True
        while True:
            data=json.dumps(now)
            now_data=data
            pyperclip.copy(now_data)
            if check_data(now_id):
                now_id=now_id+1
                break
            else:
                time.sleep(0.01)
        if len(file_data)==0:
            exit()

def get_data(write_file):
    """
    发送数据
    """
    global now_data,now_id
    f=open(write_file,mode="wb")
    finish=False
    while finish==False:
        text = pyperclip.paste()
        if now_data==text:
            time.sleep(0.01)
        else:
            now_data=text
            try:
                data=json.loads(text)
                now_id=data["now_id"]
                finish=data["finish"]
                file_data=b64decode(data["data"])
                if now_id not in now_id_list:
                    now_id_list.append(now_id)
                    f.write(file_data)
                now_data=json.dumps({
                    "now_id":now_id,
                    "finish":finish,
                    "answer":True
                })
                error_num=0
                pyperclip.copy(now_data)

            except Exception:
                now_data=""
                pyperclip.copy(now_data)
                error_num=error_num+1
                time.sleep(0.01)
                if error_num>100000:
                    exit()
    f.close()

if mode:
    send(read_file=read_file)
else:
    get_data(write_file=write_file)


使用方式:
[Bash shell] 纯文本查看 复制代码
>python send_file.py -h
usage: send_file.py [-h] [-s] [-g] [-f FILE] [--size SIZE]

使用剪切板文本模式发送文件,发送端先启动,接收端再启动

options:
  -h, --help            show this help message and exit
  -s, --send            选择发送模式
  -g, --get             选择接收模式
  -f FILE, --file FILE  指定发送或接收的文件路径及名称
  --size SIZE           指定单次发送内容的字节数,默认为1024


别忘了来回滑动鼠标,同步双方剪切板

笑死,我写的这都是啥工具

免费评分

参与人数 4吾爱币 +8 热心值 +4 收起 理由
wushaominkk + 5 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
冬天冷了多穿点 + 1 我很赞同!
gzsklsskszngc + 2 + 1 我很赞同!
luozi1653 + 1 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

gzsklsskszngc 发表于 2022-12-8 21:12
前段时间我就设想过这个事情,群友都说我疯了,没想到还真有人做了,谢谢大佬!
光之继承者 发表于 2022-12-8 21:11
确实很有用,我以前就遇到过只能传输文本不能传输文件的情况
无语的小紫英 发表于 2022-12-8 17:27
coder_LGB 发表于 2022-12-8 22:39
哈哈 我也写过类似的
wihn 发表于 2022-12-8 22:55
mac系统可以共享文件吗?如果可以的话,可以看看它是怎么做的
hk9186 发表于 2022-12-9 00:25
确实疯了,百度云和局域网隔空传物都不敢说话
cloud2010 发表于 2022-12-9 18:23
写的很好
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表