![]() |
¿Cómo puedo averiguar las URLs por las que está navegando el usuario?
Buenos Dias:
Les molesto para consultarles la siguiente cuestion: Estoy por hacer un programa del estilo net nanny o antiporn para poder controlar los sitios en los que se navegan y bloquear los que puedan tener contenido pornigrafico y demas, (es principalmente esa la función). El tema es que necesito una forma simple, y que funcione bien de poder capturar las url navegadas, y de ahi hacer el bloqueo correspondiente En torry por ejemplo hay un componente denominado grab url que captura justamente lo que quiero la url (ese seria mi problema), en la empresa que trabajo ya lo compramos pero realmente no esta para nada bueno y por muchas cuestiones como carga de procesador,,, !anda cuando quiere! no es compatible con firefox, y muchas cosas mas por las cuales lo estamos por descartar para el desarrollo. Entonces en conclusion, si alguien tiene conocimiento de como puedo hacerlo yo directamente a esto se lo voy a agradecer muchisimo!! Mil gracias y saludos.- |
Lo primero es saber si en la red donde se va a usar el programa se accede a Internet a través de un proxy o directamente a través de un módem o un router. En el caso de que se este utilizando un proxy lo ideal seria que este fuese el encargado de filtrar las urls, no siendo necesario instalar ningún tipo de software en los equipos.
Si ese no es el caso, podemos hacerlo de varias maneras. Una es crear nosotros un pequeño proxy, que podemos instalar en el propio equipo, y configurar el IExplorer o el firefox para que lo utilice, tiene el inconveniente de que el usuario puede saltarse la protección instalando otro navegador o, si tiene acceso, cambiando la configuración del que este usando. No es muy difícil crear un proxy, con solo las funciones básicas, usando los componentes indy. Algunos de los programas para bloquear popup funcionan así. Otra opción, quizá la mas segura, es utilizar un software del tipo firewall que examine todo el trafico de red de nuestro equipo y bloquee el no deseado. Pero en este caso estaríamos hablando de hacer un driver, que dudo se pudiera compilar en delphi (aunque nunca se sabe), y que necesita un profundo conocimiento del sistema. En ese caso valdría la pena usar alguno de los firewall gratuitos existentes. Por ultimo te propongo otra opción que se me acaba de ocurrir ahora, que puede resultar interesante. Obtener una lista con las conexiones TCP que tiene cada programa, con la correspondiente IP a la que esta conectado. De esta manera podemos crear una lista negra de ips y cuando un programa se conecte a una de ellas podemos actuar, bien sea cerrando el programa, mostrando una advertencia o guardando el dato en un historial. En este caso el usuario no podría hacer nada, ningún programa podrá ocultar a que ip esta conectado. |
Hola,
Bueno. Lo que propone Seoane tiene pinta de ser más serio que lo que yo voy a proponerte, pero,... hace tiempo se trató en estos Foros algo parecido y acabé escribiendo un componente capaz de hacerse saber "en tiempo real" la URL que se está visitando,... en varios navegadores. Yo no sé si te serviría o no, o si podrías adaptarlo a tus necesidades. Creo que podrías mejor hacer caso de lo que dice Seoane, pero, si quieres, puedes probar el componente que te digo. El inconveniente es que está "acoplado" en un paquete de componentes, y que (aunque no sería muy complicado separarlo del paquete) tendrás que instalar el paquete entero para luego probar el componente que te menciono. Puedes descargar el paquete desde este enlace. El componente que te digo se llama "THistorialUrls" y cuentas con un ejemplo de uso del mismo. |
Cita:
|
Hola,
Cita:
|
Gracias!
Bueno, con esto tengo suficiente para comezar, voy a probar el componente THistorialUrls que esta justamente dentro de lo que estoy buscando; a ver que sale! y luego les cuento.
Muchas gracias dec y seoane!! |
Bien Dec! esto va bien!!
Estimado Dec:
He hecho las pruebas con el THistorialUrls y el resultado fue el siguiente en una maquina con W2003 correcto. en una maquina con W2000 casi correcto porque inexplicablemente me utilizaba mucho el cpu,,, le di mas tiempo al timer y andaba mejor... pero igual mal, pase entonces la actualizacion de datos a un hilo de baja prioridad y quedo todo correcto... (Ojo: igual no pude encontrar el problema de lentitud, quizas algo de las cosas inexplicables que pasan en una maquina y en otras anda bien) WinXp: Correcto En resumen!! es LO QUE NECESITO!!! MIL GRACIAS DEC! Una consulta: el codigo del componente veo que es muy claro y prolijo, pero me quedan dudas conceptuales, veo que para la obtencion de los datos en UHistorialUrls se utiliza DDE (TDDEClientConv de la unitDdeMan) y con eso hace un DDE.RequestData(rsRequestData) . Bueno mi pregunta importantisima!! es que es DDE y como obtienes los datos con esto tan simple!!? podrias explicar la obtencion de datos en el metodo ObtenerDatos?? y como funciona ese excelente Case de dicho metodo?!! Gracias!!! |
Hola,
Bueno. Me temo que en poco puedo serte de ayuda en este caso Kanvictor. Lo cierto es que me limité a copiar y pegar el código fuente que el compañero jorodgar planteo en este Hilo hace ya tiempo. Adapté un poco el código fuente, pero, yo también me pregunté entonces de dónde demonios salía el objeto "TDDEClientConv", que es el que se utiliza en el componente. El caso es que me lo pregunté, pero, no fui más allá, es decir, no puedo ayudarte porque yo tampoco comprendo muy bien con qué estamos tratando, esa es la verdad. Sin embargo, he echado un vistazo a la ayuda de Delphi, y, aunque no he querido profundizar mucho más, a lo menos puede verse que dicho objeto (y otros relacionados) están documentados en la ayuda. Entonces, ¿te estoy diciendo que eches tú mismo un vistazo a la ayuda para averiguar de dónde sale el objeto de que hablamos y cómo es que podemos utilizarlo para estos menesteres que nos ocupan? Pues así es la verdad. Es decir, partimos de la base de que ninguno de los dos sabemos con qué estamos tratando. ¡Así que bien podrías ser tú el que me aclarara a mí las cosas! :eek: :D No vayas a pensar que quiero pasar del tema, que no es eso, de veras. Lo que pasa es que para mí esto es tan nuevo como para ti, y tendría que comenzar por aprender qué demonios significan las siglas "DDE"... En Google aparecen algunos resultados que no he mirado, pero, que ahí están. Buscando por DDE, por supuesto. Grosso modo parece tratarse de una forma de comunicación entre distintas aplicaciones. De hecho, el componente "THistorialUrls" lo que hace es "comunicarse" con las ventanas de los distintos navegadores y, a partir de ahí, localizar lo que nos interesa: la URL "activa" en el navegador y también el título de la ventana, que a su vez es el título de la página Web que esté visitándose en el momento en que miramos por él. Pero no sabría ir más allá y lo cierto es que no es cuestión de decirte, ah, pues sí, mira, esto funciona así y asao... no es eso. Tendría, como he dicho, que ponerme a investigar, y, se ve que no tengo muchas ganas de hacerlo y no sé cómo decirlo de un modo que no parezca demasiado mezquino por mi parte... Creo que echando un vistazo a los resultados de Google (que he enlazado más arriba) así como en la ayuda de Delphi (puesto que parece que dichos objetos están documentados) podría llegarse a la certeza de conocer qué hacen exactamente esos objetos, qué significan realmente las siglas "DDE", etc., etc., etc. Pero, me temo que esto va a quedar por tu cuenta Kanvictor... y espero que no te moleste mi franqueza, que a lo menos viene acompañada de sinceridad. Lamento no poder decirte más, a lo menos hoy por hoy, porque, como he dicho, estoy tan perdido en estos temas como puedas estarlo tú mismo. :eek: :) PD. En cuanto al "case" a que te refieres... bueno. Lo cierto es del objeto "TDDEClientConv" (que parece significar Cliente DDE para conversaciones -con servidores DDE y tal vez con otros clientes DDE) no hacemos uso sino de su método "SetLink". Así, el "case" lo que hace es averiguar sobre qué navegador queremos trabajar, esto es, con qué navegador tenemos que "conversar" mendiante el objeto susomentado. Según la ayuda de Delphi para dicho método "SetLink": Cita:
Con eso parece ser que establecemos una comunicación con "FireFox" (por ejemplo) solicitándole información sobre la ventana del programa. Veamos un poco de código del "case" al que has hecho referencia:
La secuencia sería más o menos esta: ¿Es FireFox el navegador del que queremos averiguar información? En ese caso, establezcamos un "enlace DDE" con el programa FireFox y solicitémosle información acerca de su ventana (como queda dicho). El método "SetLink" devolverá "False" si hay algún problema, así que, en caso de que devuelva "True" lo que hacemos es utilizar la "respuesta" de la aplicación con la que estamos conversando: "DDE.RequestData". Este último método "RequestData" requiere de una constante,... que no sé bien de dónde sale (recuerda que me limité en su día a copiar el código fuente del compañero susomentado), y es "0xFFFFFFFF", aunque yo la "guardo" en una variable un poco más "agradable", que, como puede verse, es "rsRequestData". Bien. Una vez tenemos la respuesta de la aplicación con la que estamos conversando, lo que tenemos que hacer es "parsear" la respuesta, puesto que lo que nos interesa nos llega un poco "sucio". Para eso utilizamos el método "SepararDatos" de "mi componente", quien básicamente hace lo que digo, separar el polvo de la paja y ofrecernos la URL que estamos buscando y el título de la ventana (página Web que el usuario esté visitando). Pero,... como ves, no sé mucho más que tú sobre "DDE" y las posibles "conversaciones" que podemos lograr mediante este "sistema" con otras aplicaciones. Creo que me estoy liando demasiado, así que lo dejo aquí, porque, me temo que he sido demasiado prolijo y tendré suerte si has llegado a leer hasta aquí sin pensar alguna vez, qué pesado el tío este, hay que ver que se enrrolla más que las persianas... :eek: :eek: :D :D PD. En este resultado de la búsqueda en Google que antes he mencioando, podemos ver al menos una defición de las siglas "DDE": Cita:
|
Gracias por tu respuesta Dec, y como me voy a meter mas en el tema seguramente que voy a aclarar varias cuestiones, las cuales obviamente voy a postear como para que todos aprendamos mas de esto, nunca se sabe quien lo puede llegar a necesitar, nuevamente mil gracias por tus respuestas y el tiempo dedicado!!
PD: CLARO QUE LO LEI COMPLETO :) todo sirve para ir aclarando mas las cosas! ;) Saludos! |
La franja horaria es GMT +2. Ahora son las 08:34:27. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi