zoukankan      html  css  js  c++  java
  • ssh传文件加MD5

    #server端
    # -*- coding:utf-8 -*-
    # Author:Brownyangyang
    import socket,os,time
    import hashlib
    
    server = socket.socket()
    server.bind(('localhost',9999))
    server.listen()
    while True:
        conn,addr = server.accept()
        print("new conn:",addr)
    
        while True:
            data = conn.recv(1024)
            if not data:
                print("客户端已断开")
                break
    
            cmd,filename = data.decode().split()
            print(filename)
            if os.path.isfile(filename):
                f = open(filename,"rb")
                m = hashlib.md5()
                file_size = os.stat(filename).st_size
                conn.send(str(file_size).encode())
                conn.recv(1024)  ##wait for ack
                for line in f:
                    m.update(line)
                    conn.send(line)
                print("file md5",m.hexdigest())
                f.close()
                conn.send(m.hexdigest().encode())
    
            print("send done")
    
    server.close()
    #client端
    # -*- coding:utf-8 -*-
    # Author:Brownyangyang
    import  socket,hashlib
    client = socket.socket()
    
    client.connect(("localhost",9999))
    while True:
        cmd = input(">>:").strip()
        if len(cmd) == 0: continue
        if cmd.startswith("get"):
            client.send(cmd.encode())
            server_response = client.recv(1024)
            print("server response",server_response)
            client.send(b"ready to recv file")
            file_total_size = int(server_response.decode())
            received_size = 0
            filename = cmd.split()[1]
            f = open(filename+".new","wb")
            m = hashlib.md5()
            while received_size < file_total_size:
                if file_total_size - received_size > 1024:
                    size = 1024
                else:
                    size = file_total_size - received_size
                    print("last receive:",size)
                data = client.recv(size)
                received_size += len(data)
                m.update(data)
                f.write(data)
                #print(file_total_size,received_size)
            else:
                new_file_md5 = m.hexdigest()
                print("file recv done")
                f.close()
            server_file_md5 = client.recv(1024)
            print("server flie md5:",server_file_md5.decode())
            print("client file md5:",new_file_md5)
    
    client.close()
  • 相关阅读:
    HDU2519(组合数计算)
    CodeForces
    UVA 10976(暴力)
    UVA 11059(暴力)
    UVA725
    配置三层交换机DHCP
    通过三层交换机不同vlan之间通信
    AGC006C & CF1110E
    多项式全家桶
    一些模板(持续更新中)
  • 原文地址:https://www.cnblogs.com/brownyangyang/p/8803071.html
Copyright © 2011-2022 走看看