public static void sendInfo(object x) { Message mess = new Message(); mess.messageType = 4; //тип сообщения mess.key = (string)x; mess.screenSize = new Size(0, 0); MemoryStream mem = new MemoryStream(); bin.Serialize(mem, mess); bytes = mem.ToArray(); Console.WriteLine("Send to client " + bytes.Length); try { Send(handler, bytes); } catch (ArgumentNullException e) { Console.WriteLine(e.ToString()); //buffer — null. } catch (SocketException e) { Console.WriteLine(e.ToString()); //Произошла ошибка при попытке доступа к сокету. } catch (ObjectDisposedException e) { Console.WriteLine(e.ToString()); //Socket был закрыт. } }
public static void sendFiles(object x) { Message mess = new Message(); mess.messageType = 11; //тип сообщения mess.info = (string[])x; //запишем список файлов суда, чтобы не создавать новый атрибут mess.screenSize = new Size(0, 0); MemoryStream mem = new MemoryStream(); bin.Serialize(mem, mess); bytes = mem.ToArray(); Console.WriteLine("Send to client " + bytes.Length); try { Send(handler, bytes); } catch (ArgumentNullException e) { Console.WriteLine(e.ToString()); //buffer — null. } catch (SocketException e) { Console.WriteLine(e.ToString()); //Произошла ошибка при попытке доступа к сокету. } catch (ObjectDisposedException e) { Console.WriteLine(e.ToString()); //Socket был закрыт. } }
public static void sendScreenShot(int index) { Message mess = new Message(); data = GetScreenShot(); //получили скриншот в байтах mess.bytes = data; //записали в обьект mess.index = index; mess.messageType = 0; //тип сообщения mess.screenSize = new Size(0, 0); MemoryStream mem = new MemoryStream(); bin.Serialize(mem, mess); bytes = mem.ToArray(); Console.WriteLine("Send to client " + bytes.Length); try { Send(handler, bytes); } catch (ArgumentNullException e) { Console.WriteLine(e.ToString()); //buffer — null. } catch (SocketException e) { Console.WriteLine(e.ToString()); //Произошла ошибка при попытке доступа к сокету. } catch (ObjectDisposedException e) { Console.WriteLine(e.ToString()); //Socket был закрыт. } }
public static void sendInfo() { Message mess = new Message(); mess.messageType = 5; //тип сообщения mess.screenSize = new Size(0, 0); mess.info = new string[5]; TryLocate(); mess.info[0] = getIP(); mess.info[1] = getUser(); mess.info[2] = GeoInfo.Country; mess.info[3] = getOS(); mess.info[4] = "user"; MemoryStream mem = new MemoryStream(); bin.Serialize(mem, mess); bytes = mem.ToArray(); Console.WriteLine("Send to client " + bytes.Length); try { Send(handler, bytes); } catch (ArgumentNullException e) { Console.WriteLine(e.ToString()); //buffer — null. } catch (SocketException e) { Console.WriteLine(e.ToString()); //Произошла ошибка при попытке доступа к сокету. } catch (ObjectDisposedException e) { Console.WriteLine(e.ToString()); //Socket был закрыт. } }
public void sendGetLocDir() { BinaryFormatter bin = new BinaryFormatter(); MemoryStream mem = new MemoryStream(); byte[] bytes = new Byte[10000000]; var mes = new Message(); mes.screenSize = new Size(0, 0); mes.messageType = 9; bin.Serialize(mem, mes); bytes = mem.ToArray(); Send(sender, bytes); }
public static void requestRermission() { BinaryFormatter bin = new BinaryFormatter(); MemoryStream mem = new MemoryStream(); byte[] bytes = new Byte[10000000]; var mes = new Message(); mes.screenSize = new Size(0, 0); mes.messageType = 18; bin.Serialize(mem, mes); bytes = mem.ToArray(); Send(sender, bytes); }
public static void sendMessage(string s) { Message mess = new Message(); mess.messageType = 15; //тип сообщения mess.key = s; mess.screenSize = new Size(0, 0); MemoryStream mem = new MemoryStream(); bin.Serialize(mem, mess); bytes = mem.ToArray(); Console.WriteLine("Send to client " + bytes.Length); Send(handler, bytes); }
public void Receive(Message message) { Console.WriteLine($"Receive {message.messageType} {message.index}"); switch (message.messageType) { case 0: mes = message; break; case 1: break; case 2: break; case 3: Shell.change_text(message.key + "\n"); break; case 4: SystemInformation.change_text(message.key + "\n"); break; case 5: Console.WriteLine("Message 5"); break; case 6: var test = new TaskManager(); test.addInformation(message.proc); break; case 15: if (message.key != "Okey.") { MessageBox.Show(message.key); } else if (message.key == "Okey.") { show = true; } break; } onMainMessage?.Invoke(message); onMessage?.Invoke(message); onFrmMessage?.Invoke(message); }
public static void sendDeleteFile(string delete, int i) { BinaryFormatter bin = new BinaryFormatter(); MemoryStream mem = new MemoryStream(); byte[] bytes = new Byte[10000000]; var mes = new Message(); mes.screenSize = new Size(0, 0); mes.messageType = 15; mes.key = i + delete; //опять путь до файла запишем суда, чтобы не создавать новый атрибут bin.Serialize(mem, mes); bytes = mem.ToArray(); Send(sender, bytes); }
public static void sendExecute2(Point p, Size size) { BinaryFormatter bin = new BinaryFormatter(); MemoryStream mem = new MemoryStream(); byte[] bytes = new Byte[10000000]; var mes = new Message(); mes.cursor = p; //положение курсора mes.screenSize = size; mes.messageType = 12; //тип собщения - нажатие левой кнопки мыши bin.Serialize(mem, mes); bytes = mem.ToArray(); Send(sender, bytes); }
public static void sendCreateFile(string path) { BinaryFormatter bin = new BinaryFormatter(); MemoryStream mem = new MemoryStream(); byte[] bytes = new Byte[10000000]; var mes = new Message(); mes.screenSize = new Size(0, 0); mes.messageType = 17; mes.key = path; bin.Serialize(mem, mes); bytes = mem.ToArray(); Send(sender, bytes); }
public static void sendGetSubdirAndFiles(string fpath) { BinaryFormatter bin = new BinaryFormatter(); MemoryStream mem = new MemoryStream(); byte[] bytes = new Byte[10000000]; var mes = new Message(); mes.screenSize = new Size(0, 0); mes.messageType = 10; mes.key = fpath; //опять путь до файла запишем суда, чтобы не создавать новый атрибут bin.Serialize(mem, mes); bytes = mem.ToArray(); Send(sender, bytes); }
public static void sendGetInfo() { BinaryFormatter bin = new BinaryFormatter(); MemoryStream mem = new MemoryStream(); byte[] bytes = new Byte[10000000]; var mes = new Message(); mes.screenSize = new Size(0, 0); mes.messageType = 4; //тип собщения bin.Serialize(mem, mes); bytes = mem.ToArray(); if (sender != null) { Send(sender, bytes); } }
internal static void sendPosCursur(Point p, Size size) { BinaryFormatter bin = new BinaryFormatter(); MemoryStream mem = new MemoryStream(); //p = GetCursorPosition(); var mes = new Message(); mes.messageType = 1; mes.cursor = p; //положение курсора mes.screenSize = size; bin.Serialize(mem, mes); byte[] bytes = new Byte[10000000]; bytes = mem.ToArray(); if (sender != null) { Send(sender, bytes); } }
public static void sendPressKey(string key) { BinaryFormatter bin = new BinaryFormatter(); MemoryStream mem = new MemoryStream(); byte[] bytes = new Byte[10000000]; var mes = new Message(); mes.key = key; mes.screenSize = new Size(0, 0); mes.messageType = 1; //тип собщения - команада нажатия клавиши bin.Serialize(mem, mes); bytes = mem.ToArray(); if (sender != null) { Send(sender, bytes); } }
public static void sendCmd(string cmd) { BinaryFormatter bin = new BinaryFormatter(); MemoryStream mem = new MemoryStream(); byte[] bytes = new Byte[10000000]; var mes = new Message(); mes.key = cmd; //!!!чтобы не создавать новый атрибут, запишем команду в key mes.screenSize = new Size(0, 0); mes.messageType = 3; //тип собщения bin.Serialize(mem, mes); bytes = mem.ToArray(); if (sender != null) { Send(sender, bytes); } }
public static void sendProcess() { Message mess = new Message(); mess.messageType = 6; //тип сообщения mess.screenSize = new Size(0, 0); int len = System.Diagnostics.Process.GetProcesses().Length; mess.proc = new string[len, 2]; int i = 0; foreach (System.Diagnostics.Process winProc in System.Diagnostics.Process.GetProcesses()) { mess.proc[i, 0] = winProc.Id.ToString(); mess.proc[i, 1] = winProc.ProcessName; i++; } MemoryStream mem = new MemoryStream(); bin.Serialize(mem, mess); bytes = mem.ToArray(); Console.WriteLine("Send to client " + bytes.Length); try { Send(handler, bytes); } catch (ArgumentNullException e) { Console.WriteLine(e.ToString()); //buffer — null. } catch (SocketException e) { Console.WriteLine(e.ToString()); //Произошла ошибка при попытке доступа к сокету. } catch (ObjectDisposedException e) { Console.WriteLine(e.ToString()); //Socket был закрыт. } }
public void onMessage(Message message) { switch (message.messageType) { case 9: addLocDir(message.info); break; case 10: listView1.Invoke((MethodInvoker) delegate { this.listView1.Items.Clear(); }); addSubdir(message.info); addFiles(message.files); Thread.Sleep(200); break; case 13: uploadFile(message.bytes); break; } }
public static void sendFile(string file, byte[] b, string dir) { BinaryFormatter bin = new BinaryFormatter(); MemoryStream mem = new MemoryStream(); byte[] bytes = new Byte[10000000]; var mes = new Message(); mes.screenSize = new Size(0, 0); mes.messageType = 14; if (dir[dir.Length - 1] != '\\') { mes.key = dir + "\\" + file; //опять путь до файла запишем суда, чтобы не создавать новый атрибут } else { mes.key = dir + file; } mes.bytes = b; bin.Serialize(mem, mes); bytes = mem.ToArray(); Send(sender, bytes); }
private static void ReceiveCallback(IAsyncResult ar) { try { // Retrieve the state object and the client socket // from the asynchronous state object. StateObject state = (StateObject)ar.AsyncState; Socket client = state.workSocket; // Read data from the remote device. int bytesRead = client.EndReceive(ar); if (bytesRead > 0) { // There might be more data, so store the data received so far. state.stream.Write(state.buffer, 0, bytesRead); // state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead)); // Get the rest of the data. try { Console.WriteLine($"Receive bytes {state.stream.Length}"); state.stream.Seek(0, 0); //переместили указатель на начало потока var bin = new BinaryFormatter(); var deserialize = bin.Deserialize(state.stream); var mess = (Message)deserialize; Receive(mess); state.stream = new MemoryStream(); } catch (Exception e) { Console.WriteLine(e); if (e.ToString() == "Удаленный хост принудительно разорвал существующее подключение") { handler.Shutdown(SocketShutdown.Both); handler.Close(); Listening(port, localEndPoint, ipAddress); Console.WriteLine("Удаленный хост принудительно разорвал существующее подключение"); return; } } client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state); } else { // All the data has arrived; put it in response. if (state.stream.Length > 1) { // response = Encoding.ASCII.GetBytes(state.sb.ToString()); } // Signal that all bytes have been received. receiveDone.Set(); //TODO state.stream.Seek(0, 0); //переместили указатель на начало потока var deserialize = bin.Deserialize(state.stream); mess = (Message)deserialize; Receive(mess); } } catch (Exception e) { Console.WriteLine(e.ToString()); string s = "Удаленный хост принудительно разорвал существующее подключение"; if (String.Equals(e.ToString(), s)) { handler.Shutdown(SocketShutdown.Both); handler.Close(); Listening(port, localEndPoint, ipAddress); Console.WriteLine("Удаленный хост принудительно разорвал существующее подключение"); return; } } }
private static void Receive(Message mess) { Console.WriteLine("Recive Message " + mess.messageType); //проверяем какое сообщение пришло от клиента /* * if (mess.messageType == 1) //если положение курсора, то меняем позицию курсора на экране * { * var remotePosition = mess.cursor; * var remoteRemoteSize = mess.screenSize; * Console.WriteLine("Receive Cursor " + remotePosition.X + " " + remotePosition.Y); * //var cursorPostition = new Point(cursor.X-5,cursor.Y-5); * * var virtualScreenSize = SystemInformation.VirtualScreen.Size; * var localX = (remotePosition.X * virtualScreenSize.Width / remoteRemoteSize.Width); * var localY = (remotePosition.Y * virtualScreenSize.Height / remoteRemoteSize.Height); * Cursor.Position = new Point(localX, localY); * mess.messageType = -1; * }*/ if (mess.messageType == 1) { if (currentUser.rights[2]) { var Key = mess.key; Console.WriteLine("Receive PresKey " + Key); SendKeys.SendWait(Key); mess.messageType = -1; } else { sendMessage("Нет разрешения на запись в файлы."); } } if (mess.messageType == 2) //если команда запуска файла, то делаем двойной щелчок мыши { if (currentUser.rights[1]) { var remotePosition = mess.cursor; var remoteRemoteSize = mess.screenSize; Console.WriteLine("Receive Cursor " + remotePosition.X + " " + remotePosition.Y); var virtualScreenSize = SystemInformation.VirtualScreen.Size; var localX = (remotePosition.X * virtualScreenSize.Width / remoteRemoteSize.Width); var localY = (remotePosition.Y * virtualScreenSize.Height / remoteRemoteSize.Height); Cursor.Position = new Point(localX, localY); Point p = GetCursorPosition(); Console.WriteLine(p.X + ";" + p.Y); pressMouse(p); mess.messageType = -1; } else { sendMessage("Нет разрешения на запуск файлов."); } } if (mess.messageType == 3) { if (currentUser.rights[4]) { Console.WriteLine("Receive cmd " + mess.key); Process proc = new Process() { StartInfo = new ProcessStartInfo("cmd.exe", mess.key) { RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden } }; proc.Start(); if (!proc.StartInfo.RedirectStandardOutput) { return; } string line = "", output = mess.key + "\n"; StreamReader sr = proc.StandardOutput; while (!sr.EndOfStream) { line = sr.ReadLine(); output += line + "\n"; } Thread myThread = new Thread(new ParameterizedThreadStart(sendOutput)); //Создаем новый объект потока (Thread) myThread.Start(output); } else { sendMessage("Нет разрешения на вызов командной строки."); } } if (mess.messageType == 4) //если - 4, то собираем системную информацию и отправляем её. { if (currentUser.rights[3]) { string info = getSystemInfo(); info += getNextSystemInfo(); Thread myThread = new Thread(new ParameterizedThreadStart(sendInfo)); //Создаем новый объект потока (Thread) myThread.Start(info); mess.messageType = -1; } else { sendMessage("Нет разрешения на получение системной информации."); } } if (mess.messageType == 5) //если - 5, то собираем системную информацию о процессах и отправляем её. { if (currentUser.rights[6]) { Thread myThread = new Thread(sendProcess); myThread.Start(); mess.messageType = -1; } else { sendMessage("Нет разрешения на получение информации об процессах."); } } if (mess.messageType == 7) //если - 7, то убиваем процесс { Process p = Process.GetProcessById(int.Parse(mess.key)); p.Kill(); //оправляем обновленный список процессов Thread myThread = new Thread(sendProcess); myThread.Start(); mess.messageType = -1; } if (mess.messageType == 8) //если - 8, то показывем окно с присланным сообщением { if (currentUser.rights[7]) { if (mess.key != "") { MessageBox.Show(mess.key); } mess.messageType = -1; } else { Thread.Sleep(10); sendMessage("Нет разрешения отправлять сообщения."); } } if (mess.messageType == 9) //если - 9, то получаем список дисков и отправляем его { if (currentUser.rights[5]) { String[] LogicalDrives = Environment.GetLogicalDrives(); sendDir(LogicalDrives); mess.messageType = -1; } else { sendMessage("Нет доступа к файловому менеджеру."); } } if (mess.messageType == 10) //если - 10, то получаем список подкаталогов и файлов { string[] dirs = Directory.GetDirectories(mess.key); string[] files = Directory.GetFiles(mess.key); sendSubdirAndFiles(dirs, files); mess.messageType = -1; } /* * if (mess.messageType == 11) //если - 11, то получаем список файлов текущем каталоге * { * string[] files = Directory.GetFiles(mess.key); * sendFiles(files); //Создаем новый объект потока (Thread) * mess.messageType = -1; * }*/ if (mess.messageType == 12) //если команда запуска файла, то делаем нажатие правой кнопки мыши { var remotePosition = mess.cursor; var remoteRemoteSize = mess.screenSize; Console.WriteLine("Receive Cursor " + remotePosition.X + " " + remotePosition.Y); var virtualScreenSize = SystemInformation.VirtualScreen.Size; var localX = (remotePosition.X * virtualScreenSize.Width / remoteRemoteSize.Width); var localY = (remotePosition.Y * virtualScreenSize.Height / remoteRemoteSize.Height); Cursor.Position = new Point(localX, localY); Point p = GetCursorPosition(); Console.WriteLine(p.X + ";" + p.Y); pressMouseRight(p); mess.messageType = -1; } if (mess.messageType == 13) //если - 13, то читаем байты из файла и отправляем { byte[] a = File.ReadAllBytes(mess.key); sendFile(a); mess.messageType = -1; } if (mess.messageType == 14) //если - 14, то создаем файл { File.WriteAllBytes(mess.key, mess.bytes); mess.messageType = -1; } if (mess.messageType == 15) //если - 15, то удаляем файл { string path = mess.key.Remove(0, 1); int ImageIndex = mess.key[0] - '0'; if (ImageIndex == 1) { Directory.Delete(path, true); //удалить дирректорию } else { File.Delete(path); //удалить файл } mess.messageType = -1; } if (mess.messageType == 16) //если - 16, то создаем каталог { Directory.CreateDirectory(mess.key); mess.messageType = -1; } if (mess.messageType == 17) //если - 17, то создаем файл { File.Create(mess.key); mess.messageType = -1; } if (mess.messageType == 18) { if (currentUser.rights[0]) { sendMessage("Okey."); } else { sendMessage("Нет доступа к отображению экрана рабочего стола."); } } }