Одна из интересных возможностей программы - тонкая настройка серверной части. Если вы по каким-то причинам хотите скрыть наличие на удаленном компьютере программы-сервера, вы можете вызвать окно настроек программы, щелкнув по значку в области уведомлений, и ограничить права пользователя. Например, можно запретить закрытие программы и изменение ее настроек с сервера, а также скрыть значок в системном трее, чтобы у любопытных возникало меньше вопросов.
●RemotelyAnywhere - это не совсем обычная программа для администрирования. В отличие от других подобных утилит, она состоит только из одной части - сервера, а роль клиента выполняет браузер. Иными словами, устанавливать программу нужно только на том, компьютере, к которому нужно подключиться. Это очень удобно, если вы хотите проводить удаленное администрирование с компьютера, на котором не можете устанавливать никаких программ, например, если этот компьютер стоит в учебном заведении, в Интернет-кафе или на работе.
Для работы программа задействует специальный ActiveX-компонент браузера и использует собственный протокол обмена данными. Когда сервер установлен и запущен, к компьютеру можно получить доступ, введя в браузере адрес https://ваш_IP:2000 (если вы собираетесь работать с программой через Интернет) или https://имя_компьютера:2000 (если предполагается подключаться по локальной сети). После этого нужно указать имя пользователя и пароль, которые используются для входа в Windows на удаленном компьютере. Безопасность подключения обеспечивается NTLM-аутентификацией, защищенной 1024-битовым ключом.
После подключения в окне браузера будут выведены подробные сведения об удаленном ПК, в том числе, его конфигурация, степень заполненности жесткого диска, загруженность процессора, сетевая активность и т.д.
[DllImport("user32.dll")]
public extern static IntPtr GetDesktopWindow(); [System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern IntPtr GetWindowDC(IntPtr hwnd);
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
public static extern UInt64 BitBlt(IntPtr hDestDC, int x, int y, int nWidth, int nHeight, IntPtr hSrcDC, int xSrc, int ySrc, System.Int32 dwRop);
Image myImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics gr1 = Graphics.FromImage(myImage);
IntPtr dc1 = gr1.GetHdc();
IntPtr dc2 = GetWindowDC(GetDesktopWindow());
BitBlt(dc1, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, dc2, 0, 0, 13369376);
gr1.ReleaseHdc(dc1);
MemoryStream MS = new MemoryStream();
myImage.Save(MS, ImageFormat.Jpeg);
byte[] BytesPain = MS.GetBuffer();
mas = Convert.ToString(BytesPain.Length);
bw.Write(mas);
bw.Write(BytesPain);
MasMet();
BinaryFormatter bFormat = new BinaryFormatter();
MemoryStream mStream = new MemoryStream();
bFormat.Serialize(mStream, SendMass);
byte[] biteSerialize = new byte[mStream.Length];
mStream.Position = 0;
mStream.Read(biteSerialize, 0,(int)mStream.Length);
string Dl = Convert.ToString(biteSerialize.Length);
((Info)MassList[a]).w.Write(Dl);
mStream.Close();
((Info)MassList[a]).w.Write(biteSerialize);
arrList2 = (ArrayList)bFormat2.Deserialize(mStream2);