Se connecter / S'enregistrer
Votre question

[C++]Créer un proxy (filtre - controle parental)

Tags :
  • Moteur de recherche
  • Programmation
Dernière réponse : dans Programmation
30 Mars 2006 20:36:40

Salut tout le monde,

Je souhaiterai créé un controle parental analysant le contenu des pages avant de l'afficher.
Si dans le contenu, il y a l'un des mots clé : on affiche une autre page.

Pour cela, j'ai pensait à un proxy.
La question est comment créé un proxy en C++

Est-ce que qq'un peut me dire comment est fait un proxy (de quoi est-il composer)
en gros, m'aider un peu pour faire un schéma UML. (ça sera un début)
Sachant que dans le proxy, la seul chose qui m'intereste dedans, c'est le filtrage des pages.

Merci d'avance :) 

Autres pages sur : creer proxy filtre controle parental

a b L Programmation
30 Mars 2006 22:24:21

Tu devrais plutôt particier à un projet existant ;-)
Sur sourceforge, j'en ai trouvé un:
http://sourceforge.net/projects/middle-man

Déjà, tu peux jeter un coup d'oeil sur les source pour voir comment ça marche.
31 Mars 2006 00:43:36

merci, j'vais y jeter un coup d'oeil mais ça m'a l'air whoua... à vu d'oeil
(ce soir, j'vais pas encore m'y plonger mais ça n'a pas l'air très simple)
Contenus similaires
31 Mars 2006 20:13:06

après avoir jeter un coup d'oeil, j'ai d'abord voulu le tester : il s'avère qu'il s'adresse à des distributions de linux :( 

moi qui souhaité une application pour windows pour le tester et voir comment il fonctionne...

En faite, est-ce que quelqu'un sait comment fonctionne un proxy ?
2 Avril 2006 21:39:28

Un proxy se place entre le client et le serveur.
Il gère un couple de connexions :
Le client est connecté au proxy
et le proxy est connecté au serveur.
Le proxy lit les données sur chacune des connexions et les écrit sur l'autre.
Les données lues peuvent être analysées et les données écrites peuvent être modifiées.
20 Avril 2006 17:54:10

Bon, apparement, il faut traité des données http.

J'ai commencer par créé un serveur de socket.

Mais je ne sais pas comment spécifier le protocole HTTP dans le serveur de socket :-/

Quelqu'un pour me secourir ? ;) 
20 Avril 2006 20:04:27

Merci Cricky pour ta réponse, néanmoin, je me suis déjà documenté sur le protocole HTTP; mais mon principal soucis est plutot celui ci :

Comment faire en sorte que les requêtes du navigateur soit récupéré dans une socket en C++ et puisse ensuite être traité par mon application en C++.

(sachant les requêtes du navigateur sont des requêtes HTTP)

Merci d'avance ;) 
a b L Programmation
20 Avril 2006 20:26:15

Tu mets en place tes sockets (qui dépendent de l'OS) et les messages reçus en brut sont les données formatées selon le format HTTP.
23 Avril 2006 00:53:25

Citation :

CRicky a écrit :
Tu mets en place tes sockets (qui dépendent de l'OS) et les messages reçus en brut sont les données formatées selon le format HTTP.

Merci :-D
J'ai réussi à faire en sorte récupéré les données du navigateur dans un buffer et de les envoyers : Je récupère ensuite la réponse du serveur web dans un autre buffer.

Maintenant, mon soucis est celui ci :
J'ai la réponse HTTP dans un buffer, je l'envoie à l'adresse du navigateur et le navigateur n'affiche rien.... (pourtant, les informations du buffer lui est bien envoyer).
Que faut il faire pour que le navigateur affiche les données ?
(j'ai consulté la doc du protocole HTTP et apparement, je ne comprend pas pourquoi le navigateur n'affiche rien)
23 Avril 2006 17:07:29

Bon, j'ai une théorie sur l'explication à savoir pourquoi le navigateur n'affiche pas ce que je veux...

navigateur config pour envoyer à l'adresse 127.0.0.1 au port 80.

Le serveur (adresse 127.0.0.1) port d'écoute 80.

Lorsqu'on tente de lancer une page : le navigateur envoie les informations à l'adresse 127.0.0.1 (sans soucis) et attend une réponse.
Le serveur réceptionne la donnée sur le port 80, et l'envoie vers le site web concerner, il récupère le résultat du site web et il le retransmet à l'adresse 127.0.0.1 (l'adresse où le navigateur attend la réponse) mais c'est là où se trouve le pb....
Lorsque le serveur envoie à l'adresse 127.0.0.1 (qui est aussi son adresse); elle reçoit en faite les informations qu'elle a elle même reçu..

(pour simplifier et être pour clair au yeux de tout le monde)

Navigateur -> serveur
serveur -> web
web -> serveur
serveur -> serveur

(maintenant, avec les explications sur chaque étape du schéma)

Navigateur -> serveur
Le navigateur envoie sur le port 127.0.0.1 port 80.
(le serveur est à l'adresse 127.0.0.1 à l'écoute du port 80).
serveur -> web
Les informations du navigateur est stocké dans un buffer et l'envoie vers le web à l'adresse de l'hote indiqué.
web -> serveur
Les informations pour afficher la page est reçu et stocké dans un autre buffer
(le second buffer contient toute les informations pour pour afficher la page... mais l'information ne parviens pas au navigateur car voici la raison)
serveur -> serveur
l'information reçu du web est envoyer à l'adresse 127.0.0.1 via le port 80 (qui est l'adresse de réponse où le navigateur attend la réponse) mais qui est aussi l'adresse du serveur ... du coup, le serveur reçoit l'information est fait son travail, il l'envoie vers le web... le site en question ne comprend pas les réquêtes (car c'est des réponses http et non des demande..) du coup, le serveur web génère un message d'erreur pour dire qu'il ne comprend pas ce qu'on lui demande; cette information est stocké à nouveau dans le buffer et re-envoyer sur le net... et ainsi de suite... -_-"

En solution, j'ai tenter de changer le port du serveur (mais si je le change soit celui ci, soit celui du navigateur) le navigateur n'enverra plus l'information au serveur... :-/

Du coup, j'espère trouver une solution et non effacer le travail d'une ou 2 semaines pour rien -_-"

(Si question il y a besoin pour éclaircir.. j'pense être assez précis)
a b L Programmation
23 Avril 2006 18:56:43

Je ne suis pas sûr de ce que je vais dire.
Quand tu te connectes à un serveur web tu te connecte sur le port 80 du serveur qui répond sur un autre port (par exemple 8080) en local.
donc le navigateur écoute sur le port 8080, donc si tu réponds sur le port 80, ça retourne sur ton serveur puisque c'est son port d'écoute, alors que si tu renvoies sur 8080 tu renvoie sur le navigateur.
Je ne me rapelle plus trop mais il me semble que le port de réception des réponses est indiqué à l'établissement de la liason dans les socket.
Dans le serveur quand tu reçois la connexion du navigateur, tu dois envoyer toutes tes réponses dans cette socket qui renvoie dans le bon port d'écoute du navigateur (moi j'ai mis 8080, mais ce n'est pas forcément ça, seule la socket connait le bon port).
23 Avril 2006 19:50:52

Après plusieurs heure à essayer de changer d'ip, de port etc...
J'ai compris qu'en faite, le pb n'était pas ici...
Mon raisonnement était totalement à coté ^^

En faite, j'ai créé une socket en trop que j'ai voulu connecté pour le code de retour...
Là est l'erreur ! (j'ai considéré qu'une socket était pour établir une connexion... oui, effectivement, c'est le cas, mais c'est une connexion à double sens)
J'avais créé une autre socket, du coup... ça s'est emballer tout seul...

(J'affiche la solution pour ceux qui feront des recherches à ce sujet sur le forum)
29 Avril 2006 17:41:26

J'ai réussi à faire un filtre parental parfait : mon programme plante dès qu'il s'agit d'afficher des images... donc, là dessus, ya plus de risque...

Plus sérieusement, c'est un peu chiant qu'il n'arrive plus à afficher aucune image et que le buffer se met à être plein dès qu'il cherche à afficher une image..

Quelqu'un pourrai t'il m'aider pour savoir comment on gère l'affichage d'une image compresser (tel que le format gif et jpg) en C++ ?
a b L Programmation
29 Avril 2006 18:55:42

C'est bizarre tout ça quand même.
Parce qu'il me semble que si tout est bien configuré, le protocole IP devrait découper le gros paquets en plusieurs petits paquets. A l'établissement de la connexion, je crois que la couche TCP du client indique au serveur le MSS pour indiquer à la couche IP la taille de fragmentation des paquets. Donc est ce que tu t'es connecté en TCP ou en UDP ? car je ne suis pas sûr que ça fonctionne en UDP (en fait j'en sais rien, mais on sait jamais :-D )
Et est-ce que tu es connecté via un routeur PC sous linux ?
29 Avril 2006 20:49:32

Je suis connecté via un routeur mais mon programme est fait pour être placé derière un routeur sous un poste équipé de windows.

(Sinon, j'ai linux, mais aucun interet pour mon programme ^^)

La connexion se fait en TCP

Sinon, concernant les paquets, j'pense que ça viens de la requête qui est sous forme "GIF89" ne précisant plus l'hote en question... (du coup, mon programme qui cherche l'hote tente de prendre l'information) et comme aucun nom d'hote n'est spécifier, il va se mettre à balancer ce qu'il a déjà stoqué (c'est à dire des caractères spéciaux...)

Ensuite, disons que si la connexion était "direct" et par paquet, je ne pourrai pas équiper le programme de filtre parental... :-/

Enfin, c'est parce que mon programme fonctionne de la façon suivante :
Il reçoit les informations du navigateur, il détecte l'hote et il envoie l'information à l'adresse de l'hote, le serveur web répond et renvoie la requete qui est stoqué dans un buffer, on analyse les données reçu du buffer. Si dans les données, un mots clé est détecté, on renvoie une page disant que c'est bloqué. sinon, on renvoie les données du buffer au navigateur.
a b L Programmation
30 Avril 2006 01:01:01

Avec le protocole HTTP, ne faut-il pas donner les binaire sous un format particulier en utilisant des sortes de MIME ?
1 Mai 2006 19:28:35

Citation :

CRicky a écrit :
Avec le protocole HTTP, ne faut-il pas donner les binaire sous un format particulier en utilisant des sortes de MIME ?

Oui, j'pense que c'est effectivement le cas !
ça doit être l'endage sous 64 machin truc.. :-/

J'me suis aussi renseigner aupres de mon ami google, et effectivement, il dirigé vers la solution des MIME... cependant, je ne vois tjrs pas comment intégré ça dans mon code en C++
(J'ai vu que c'était surtout utilisé pour les mails !)

Quelqu'un qui s'y connait MIME ? :-P
(euh, merci pour ceux qui savent, de répondre avec des mots et non des mime... ) :langue: 
2 Mai 2006 19:27:25

N'étant pas un acharné de programmation en tout genre, l'idée ne m'ait pas venu de recodé totalement le MIME (même si j'en ai était tenté) mais au vu de nombreux fonction sur le net qui le fait justement...

Maintenant, j'ai une fonction qui me fait la convertion en mime... le seul soucis est sa valeur retourner :
LPCTSTR (équivaut à const char*)
Bon, c'est bien gentil tout ça mais j'ai en entrée un char* et j'ai pas envie de sortir avec un const char*... j'tiens à ce qu'il conserve le même format...

La question est comment on doit faire pour prendre le const char* et le mettre en char* ?!?
a b L Programmation
2 Mai 2006 20:09:43

En C++, il faut utiliser au maximum les const en paramètres de fonctions.
le fait que ce soit const t'empêche toute modification de la chaine de caractère.
Donc si tu as besoin de le modifier (si ce n'est pas le cas, le const ne devrait jamais poser problème si tout est bien programmé :-P ), il te faut en faire une copie dans un nouveau char *. Il faut donc penser à l'allocation et au relachement mémoire.
Sinon tu peux manipuler des objets string, mais quand tu voudras la chaine en brut via la méthode c_str() tu obtiendras aussi un const char*
2 Mai 2006 20:24:11

Merci CRicky pour toute ces info, mais j'ai modifier le code fournit par crosoft pour le mime pour le convertir en char*

Disons que le buffer, c'est là où je stock sans cesse des données (on stock, on envoie, on re-stock etc..)
Pour mes besoins, le but étant de stocké, convertir au bon format avant de l'envoyer; il est absolument pas nécessaire de faire un const (car le conserver me servirai à rien)
a b L Programmation
2 Mai 2006 20:35:05

Bon pour ton cas, ça va.

Mais il faut penser à l'envers pour faire un programme bien pro: il faut tout mettre en const, sauf si on a besoin de le modifier.
Ceci permet d'éviter un grand nombre de bug qui modifieraient dans le dos notre buffer. Par exemple, si l'on utilise un const et que l'on voit une fonction sans const, on prend conscience que la variable peut en être modifiée. Le const permet de s'assurer que l'objet ne sera pas modifié.
La principale utilisation est pour une application où l'on sépare toujours l'affichage des données du traitement et stockage de celle-ci. Toutes les données manipulées dans l'interface graphique provenant du modèle de données sont mis en const. Pour modifier le modèle de données, ceci oblige à passer par des fonctions précises qui ont un mécanisme précis. Tout ça dans un but de réduire au maximum les bugs et les failles.
25 Octobre 2008 11:40:04

BOnjour a tous ,c'est bien gentille a vous si vous pouvez répondre a mon message ,bon voila je veux creer un proxy(filtre parentale)mais je ne sais pas comment dois je proceder,c'est ma these d'ingenieur,je veux programmer en java,mais je veux savoir si c'est possible de connaitre d'abord comment en fais un filtre parentale, est ce que vous pouvez m'indiquer la demarche a suivre depuis le debut jusq'ua la fin,merci bien a vous.
6 Août 2009 10:51:21

Salut , j'ai téléchargé proxy finder mais il me demande un mot de passe .

Et je sais pas qui est le bon proxy pour changer mon adresse ip et si vous

savez le mot de passe ou un autre logiciel un peu complique repondez moi .

Merci .
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS