Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-08-2006
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 19
marceloalegre Va por buen camino
Question ¿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.-
Responder Con Cita
  #2  
Antiguo 09-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 10-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 10-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por dec
Creo que podrías mejor hacer caso de lo que dice Seoane
Todo lo contrario, creo que lo que kanvictor buscaba era lo que tu propones. Sabia que había visto tu código por algún lado, pero no me acordaba exactamente donde. Lo que yo propongo solo seria mas adecuado cuando además del trafico web se quiera bloquear otro tipo de conexiones (messenger, musica, videos, etc) , o cuando se sospecha que se utiliza algún navegador que no tenemos controlado.
Responder Con Cita
  #5  
Antiguo 10-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Seoane
Sabia que había visto tu código por algún lado, pero no me acordaba exactamente donde.
Se trató el tema en varios Hilos, efectivamente. El que yo tengo apuntado en el código fuente del componente que he mencionado es este mismo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 10-08-2006
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 19
marceloalegre Va por buen camino
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!!
Responder Con Cita
  #7  
Antiguo 11-08-2006
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 19
marceloalegre Va por buen camino
Post 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!!!
Responder Con Cita
  #8  
Antiguo 11-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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!

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.

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:
Specifies the service and topic of a DDE conversation and attempts to open the link if ConnectMode is ddeAutomatic.
Dicho método requiere dos parámetros, conviene a saber, el Servicio con el que queremos "conversar", que en nuestro caso puede ser, literalmente "FireFox", y, un segundo parámetro de nombre "Topic", que, intuyo establece de qué queremos conversar con dicho Servicio. Este segundo parámetro siempre es el mismo (repito, para lo que nos ocupa, porque en la ayuda de Delphi existe un ejemplo sobre este método que utiliza otro "Topic" para "conversar" con cierta aplicación), digo que es: "WWW_GetWindowInfo".

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:

Código Delphi [-]
    case navegador of
      nFireFox:
        if DDE.SetLink(rsFireFox, rsGWindowInfo) then
          SepararDatos(DDE.RequestData(rsRequestData),
            datos.Url, datos.TituloWeb);

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...

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:
DDE (Dinamic Data Exchange, Intercambio Dinámico de Datos), un método de comunicación entre procesos implementado en Microsoft Windows y OS/2. Cuando se ejecutan simultáneamente dos o más programas compatibles con DDE, pueden intercambiar información y comandos. Por ejemplo, una hoja de cálculo con un enlace DDE a un programa de comunicaciones debe ser capaz de mantener actualizados los valores que presenta una hoja de cálculo con la información bursátil recibida por el canal de comunicaciones.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 11-08-2006 a las 16:47:40.
Responder Con Cita
  #9  
Antiguo 11-08-2006
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 19
marceloalegre Va por buen camino
Post

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!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Capturar Excepciones clanmilano Varios 36 06-11-2015 21:16:06
Capturar Evento piccolo2101 Varios 4 27-10-2005 17:56:35
Capturar errores Mauricio_M Firebird e Interbase 6 18-10-2005 22:28:04
Capturar errores Mauricio_M Firebird e Interbase 2 14-10-2005 02:50:45
Capturar pantalla pablo Varios 1 07-09-2004 21:15:10


La franja horaria es GMT +2. Ahora son las 14:43:32.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi