Formulaire Web

(Cliquez-ici pour accéder à la version originale de cette discussion avec couleurs et images)







Posted by: lapras

Salut,

j'aimerais bien pouvoir, grâce à un programme en C, remplir un formulaire automatiquement, par exemple sur google pouvoir entrer "aaaaa" dans la barre de recherche, et de récupérer le code source HTML renvoyé apres cette action.
j'ai bien sur pensé à libcurl, j'arrive à récupérer le code source, mais je ne sais vraiment pas quelles fonctions utiliser pour envoyer des données dans un formulaire...

Meme en utilisant les socket je vois pas vraiment...


merci d'avance de votre aide !






Posted by: anima

Citation:
Posté par lapras
Salut,

j'aimerais bien pouvoir, grâce à un programme en C, remplir un formulaire automatiquement, par exemple sur google pouvoir entrer "aaaaa" dans la barre de recherche, et de récupérer le code source HTML renvoyé apres cette action.
j'ai bien sur pensé à libcurl, j'arrive à récupérer le code source, mais je ne sais vraiment pas quelles fonctions utiliser pour envoyer des données dans un formulaire...

Meme en utilisant les socket je vois pas vraiment...


merci d'avance de votre aide !



A vrai dire, si ton formulaire est "trivial", tu peux utiliser lynx pour le faire. Ca, c'est si tu veux utiliser la console linux.

Sinon, pour firefox, il y a un outil encore mieux (!): un plugin appele GreaseMonkey. De la, tu te fais un autre plugin en JavaScript, qui te completera tes formulaires automatiquement (j'en ai code un pour mon ecole pour pouvoir automatiquement s'identifier sur le reseau TOR local)



Posted by: Joker62

ça va être très vite réglé !!! :)

Les edit des pages web ( les formulaires quoi ) n'existent pas en tant qu'objet windows ! Donc en gros, on a pas eu besoin de faire un CreateWindow pour qu'il apparaît !!!
Il n'a aucune instance, aucun handle, donc, il n'existe pas du point de vue informatique !
Impossible donc à partir d'un programme en C de pouvoir écrire à l'intérieur.

Après, peut être à coup de FindWindow récupérer la fenêtre de l'explorateur, de quelques simulation de la touche Tab, et ensuite simuler les touches clavier ! mais ça serait un exploit que ce soit compatible.

Donc voilà not possible :)



Posted by: lapras

j'ai pas linux, mais en fait dca ne correspond pas à ce que je veux faire, ce n'est pas un simple "connection automatique", c'estr un autre projet en C et jai absolument besoin de récupérer le code source apres que le programme ai rentré lui même les infos dans la/les input du formulaire HTML.

EDIT :
Joker, je sais que c'est possible car je l'ai déja fait en php avec libcurl et les socket, j'entrais les données via la méthode POST.



Posted by: anima

Citation:
Posté par Joker62
ça va être très vite réglé !!! :)

Les edit des pages web ( les formulaires quoi ) n'existent pas en tant qu'objet windows ! Donc en gros, on a pas eu besoin de faire un CreateWindow pour qu'il apparaît !!!
Il n'a aucune instance, aucun handle, donc, il n'existe pas du point de vue informatique !
Impossible donc à partir d'un programme en C de pouvoir écrire à l'intérieur.

Après, peut être à coup de FindWindow récupérer la fenêtre de l'explorateur, de quelques simulation de la touche Tab, et ensuite simuler les touches clavier ! mais ça serait un exploit que ce soit compatible.

Donc voilà not possible :)

Pas d'accord. Je ressortirai les sources du programme que j'avais fait pour Image-dream, qui remplissait automatiquement un navigateur "cache"



Posted by: lapras

J'ai trouvé une page qui "explique" comment faire avec libCurl en C, mais je suis pâs fort en english

http://curl.haxx.se/lxr/source/docs/examples/postit2.c

Dommage, en plus je ne sais pas exactement quelle variable renvoie le code source, on peut m'aider ? (pour les balèzes en anglais ^^)



Posted by: flo.com

Anima doit savoir : il a fait ces études en Angleterre ! Logiquement, il est fort !



Posted by: lapras

bah oué tu crois quoi il est fort notre modérateur ^^



Posted by: Flodelarab

Citation:
Posté par lapras

En tout cas ton lien donne du code pour faire de l'upload. Pas du download... désolé



Posted by: lapras

Oué...
Je cherche, je cherche, mais pas moyen tout ce qu'il y'a sur le sujet sur le net c'est en php, et ca m'interesse pas car je l'ai déja fait en php !



Posted by: Flodelarab

Utiliser un langage Web pour faire du Web semble plus logique.

Pkoi le C ne me semble pas adéquat ?
Parler, envoyer des données, tout le monde peut le faire. Mais converser ... c autre chose.
Prends les satellites GPS. Je ris quand je vois des gens qui croient ue leur GPS "discutent avec le satellites" .... Le GPS parle et tout le monde ecoute, mais ya pas de discussion.

Pour ton site Web, c pareil.

Pour envoyer une requète HTTP, pas de problème, n'importe quel langage peut le faire. Mais pour recevoir, cela signifie que tu es pret, à l'écoute de ce que tu peux recevoir. Et la c'est une autre paire de manche. Il faudrait que tu sois capable en C++ d'écouter, trier, ce que tu reçois sur le réseau .... c pas pareil du tout.

En clair, toute la partie web était prise en charge par ton navigateur. Si tu le fait en C, tu devras le faire toi même... Bon courage. Tu ne reçois pas qu'une chose.



Posted by: lapras

Je comprend ton explication.
Mais en fait le C est capable de recevoir du code source venant d'un site web : je l'ai fait.

Donc ca doit etre possible je pense.
En plus je ne suis pas un dieux en C donc je n'arriverai pas a faire tout ça de moi même (et puis même si je pouvais je préfere faire des maths ).



Posted by: Flodelarab

Citation:
Posté par lapras
Mais en fait le C est capable de recevoir du code source venant d'un site web : je l'ai fait.

Donc en fait, ton seul problème serait d'identifier la page de réponse de ta requête.

Un filtre sur l'adresse IP de l'expediteur est il suffisant ?



Posted by: lapras

Citation:
Donc en fait, ton seul problème serait d'identifier la page de réponse de ta requête.

Oui et non, il faut aussi que je trouve la fonction qui envoie la requete pour envoyer les donner via le formulaire ! Je n'ai pour le moment que la fonction qui récupere le code HTML d'une page voulue.

Sais tu manier les sockets ?



Posted by: Flodelarab

Citation:
Posté par lapras
Oui et non, il faut aussi que je trouve la fonction qui envoie la requete pour envoyer les donner via le formulaire ! Je n'ai pour le moment que la fonction qui récupere le code HTML d'une page voulue.

Sais tu manier les sockets ?

En général, j'en mets une par pied.

Dans ton lien, il y a le code pour envoyer la requete.



Posted by: lapras

Justement, vu mon niveau en anglais, ca risque d'etre dur de comprendre, j'ai tenté de comprendre, j'ai essayé le code, mais je ne vois pas dans quelle variable on récupere le code source.
Meme si j'ai la fonction pour récupérer un code source, je ne peux trécupérer que le code d'une adresse que je connais.
Bon pour google, évidemment c'est simple il utilise le GET :
site.com?motclef=aaaa&truc=bidule
mais pour un site qui n'utilise que le post, je ne vois pas comment faire...



Posted by: Flodelarab

Citation:
Posté par lapras
Justement, vu mon niveau en anglais, ca risque d'etre dur de comprendre, j'ai tenté de comprendre, j'ai essayé le code, mais je ne vois pas dans quelle variable on récupere le code source.
Meme si j'ai la fonction pour récupérer un code source, je ne peux trécupérer que le code d'une adresse que je connais.
Bon pour google, évidemment c'est simple il utilise le GET :
site.com?motclef=aaaa&truc=bidule
mais pour un site qui n'utilise que le post, je ne vois pas comment faire...

Ouvre tes yeux assez grands pour qu'un œil se jette ICI

C'est tout en français et expliquer in extenso.

Elle est pas belle la vie ?



Posted by: anima

As-tu besoin d'un affichage graphique du navigateur? Si non, tu peux sortir le parseur DOM (Xerces C++) pour "parser" (logique?) une page web; ensuite, il y a des méthodes pour trouver l'élement que tu veux (un foreach sur toutes les balises "form" ou "input" peut faire l'affaire). Enfin, tu valides: gagné.

Sinon, le TCL et le ruby gerent bien la chose, pour le peu qu'on soit sur linux... Car TCL est tres peu portable.


Pour ce qui est du "si on veut un navigateur", j'attends que ma mere allume le PC de backup et je pompe les sources de mes programmes dessus... Vive le truc de backup, a 18 ans, je n'ai meme pas acces a ce que j'installe heureusement, j'ai un paquet de PCs ici.



Posted by: lapras

Non je n'ai pas besoin d'un affichage "navigateur", je fais le tout en console type MS-DOS^^
Trouver les form, les boutons, c'est pas dur, j'ai fait des parser auparavant quand je voulais immiter google (quel beau rêve), par contre apres envoyer les informations "dedans" puis valider, je sais pas comment faire...


Flodelarab > merci pour ton lien, mais s'agit il de cours en C ?



Posted by: anima

Citation:
Posté par lapras
Non je n'ai pas besoin d'un affichage "navigateur", je fais le tout en console type MS-DOS^^
Trouver les form, les boutons, c'est pas dur, j'ai fait des parser auparavant quand je voulais immiter google (quel beau rêve), par contre apres envoyer les informations "dedans" puis valider, je sais pas comment faire...


Flodelarab > merci pour ton lien, mais s'agit il de cours en C ?

C'est de la documentation sur le protocole HTTP qu'il te manque. Tous les <input>,<textarea> et <select> contenus dans une balise <form> sont envoyés lors du "submit"; suivant que la requete soit GET ou POST, ca part différemment.

GET:
Soit 3 champs: Texte1, Texte2, Select1; tu valides ton formulaire, ca envoie a l'adresse dans la balise <form>, exemple page.php, en ajoutant dans l'URL les parametres GET encodés en utf8 et séparés par des &.
Donc, dans mon exemple: page.php?Texte1=valeurdetexte1&Texte2=bla&Select1=Blabla
255 caracteres de parametres maxi.

POST:
C'est la que ca se "corse". La requete POST a la meme consistance, sauf que les trucs ne sont pas rajoutés dans l'URL, mais dans la requete HTTP elle-meme. Une requete POST typique pour mon exemple serait:
Citation:
POST /page.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/4.0
Content-Length: 45
Content-Type: application/x-www-form-urlencoded
Texte1=valeurdetexte1&Texte2=bla&Select1=Blabla

Les valeurs encodées en UTF8 (urlencode si tu preferes) auparavant, comme d'hab.



Posted by: Joker62

A la base il voulait remplir les champs d'un formulaire d'une page web avec un programme C et ce n'est pas possible ça !
Par contre, envoyer des données à un serveur, ça naturellement que c'est possible.

Après ça dépend de ce que tu cherches réellement.
1) Lancer ton navigateur, Lancer ton programme C, il rempli le formulaire, t'as plus qu'à envoyer.

2) Lancer ton prog, Il communique direct avec le serveur et envoi les données, après faut connaître le serveur...

A partir de là, c'est pas parce que tu as réussi en php que c'est faisable en C vu qu'en php, c'est le serveur qui execute le code, en C, c'est le client, autrement dit ta machine !



Posted by: lapras

Ok merci à vous trois en fait quand j'avais fait mon client/serveur en socket, je n'avais pas réelement compris comment ca marchait, mais je savais que les fonctions utilisées marchaient.
Je vous tiens au courant !




Posted by: lapras

Salut,
J'ai essayé ceci :
Executer > CMD > telnet www.google.fr 80
Dans la console :
POST /search HTTP/1.1
User-Agent: Mozilla/4.0
Content-Length: 45
Content-Type: application/x-www-form-urlencoded
q=salut&btng=Recherche Google


(je suis sous windows)
ceci me répond : Bad request...
Pourquoi ?



Posted by: lapras

Je fais un petit Up exceptionnellement



Posted by: anima

Citation:
Posté par lapras
Salut,
J'ai essayé ceci :
Executer > CMD > telnet www.google.fr 80
Dans la console :
POST /search HTTP/1.1
User-Agent: Mozilla/4.0
Content-Length: 45
Content-Type: application/x-www-form-urlencoded
q=salut&btng=Recherche Google


(je suis sous windows)
ceci me répond : Bad request...
Pourquoi ?

Parce que Google marche en get...



Posted by: lapras

J'ai vérifié dans le code source :

<form action="/search" name=f>

Ils n'indiquent pas le method="post" mais n'indique pas qu'ils utilisent le GET (où je ne l'ai pas vu, mes souvenirs en XHTML étant tres tres loin (et pourtant, j'ai fait bcp de php) )



Posted by: anima

Citation:
Posté par lapras
J'ai vérifié dans le code source :

<form action="/search" name=f>

Ils n'indiquent pas le method="post" mais n'indique pas qu'ils utilisent le GET (où je ne l'ai pas vu, mes souvenirs en XHTML étant tres tres loin (et pourtant, j'ai fait bcp de php) )

Quand ce n'est pas indiqué, GET est utilisé par défaut.



Posted by: lapras

requete envoyée à hormail

POST /https://login.live.com/ppsecure/post.srf?id=2&bk=1187798206 HTTP/1.1
User-Agent: Mozilla/4.0
Content-Length: 45
Content-Type: application/x-www-form-urlencoded
PPSX=pa²&login=lapras123@hotmail.fr&passwd=***********
&SI= Connexion


je peux donc me connecter à mon compte hormail avec cette requete ?
Sinon, quand je rentre une requete en console, je ne vois pas ce que j'écris, c'est tout noir... Je vois pas pourquoi :(



Posted by: anima

Citation:
Posté par lapras
requete envoyée à hormail

POST /https://login.live.com/ppsecure/post.srf?id=2&bk=1187798206 HTTP/1.1
User-Agent: Mozilla/4.0
Content-Length: 45
Content-Type: application/x-www-form-urlencoded
PPSX=pa²&login=lapras123@hotmail.fr&passwd=***********
&SI= Connexion


je peux donc me connecter à mon compte hormail avec cette requete ?
Sinon, quand je rentre une requete en console, je ne vois pas ce que j'écris, c'est tout noir... Je vois pas pourquoi :(

Telnet ne montre pas ce que tu tapes. Perso, j'utilise PuTTy pour le telnet, ca marche tellement mieux... Et pour HTTPS, c'est un tout autre protocole, passant par le port 443. Désolé



Posted by: lapras

Ok anima tu as l'air de t'y connaitre
Je suis sous windows, je peux avoir putty ?
Tu crois que c'est possible de se connecter à son compte hotmail via le protocole HTTP ? (en fait c'est ce que je veux faire depuis le début, google était un exemple)



Posted by: anima

Citation:
Posté par lapras
Ok anima tu as l'air de t'y connaitre
Je suis sous windows, je peux avoir putty ?
Tu crois que c'est possible de se connecter à son compte hotmail via le protocole HTTP ? (en fait c'est ce que je veux faire depuis le début, google était un exemple)

En HTTP, pas possible, Microsoft a décidé de rendre hotmail en HTTPS a cause de robots utilisant le HTTP. Par contre, si tu as des notions en cryptographie ou si tu programmes en un language capable d'accepter les sockets SSL (Python le fait, Perl le fait, donc en théorie C le fait), tu peux essayer. C'est le meme protocole que HTTP, mais crypté par SSL (avec certificat digital), et sur le port 443.

PuTTy est bien entendu disponible sur windows! Il est meme fait pour windows, car linux a déja tous les outils par défaut!



Posted by: lapras

Citation:
En HTTP, pas possible, Microsoft a décidé de rendre hotmail en HTTPS a cause de robots utilisant le HTTP. Par contre, si tu as des notions en cryptographie ou si tu programmes en un language capable d'accepter les sockets SSL (Python le fait, Perl le fait, donc en théorie C le fait), tu peux essayer. C'est le meme protocole que HTTP, mais crypté par SSL (avec certificat digital), et sur le port 443.

Je n'ai pas de notions en cryptographie, mais je code en C, donc je dois peut etre utiliser les sockets "SSL" ?

En fait je souhaite faire un BOT.



Posted by: Joker62

Un superbe sniffer fait par un collègue de cppfrance
http://www.cppfrance.com/codes/SNIF...SOCK_32374.aspx



Posted by: lapras

Joker, qu'est ce qu'un "sniffer" ?



Posted by: anima

Citation:
Posté par Joker62
Un superbe sniffer fait par un collègue de cppfrance
http://www.cppfrance.com/codes/SNIF...SOCK_32374.aspx

On a dit hotmail, on a pas dit msn.

Et pour l'analyseur de traffic, je préfere Ethereal



Posted by: lapras

Qu'est ce qu'un analyseur de trafic ?
Sur développez.com ils m'ont proposé de télécharger LiveHttpHeaders et cure... Bon conseil ?



Posted by: Joker62

un sniffer ça espionne en gros !
Et donc msn hotmail tout ça, c'est le même principe
C'est juste un exemple faut prendre le taureau par les cornes et modifier lol



Posted by: lapras

En fait je veux pas espionner je veux tenter de me connecter via un robot, ca me servira pour un futur projet....



Posted by: Joker62

Oui mais si tu espionnes, tu sais comment il fait ! :)
Donc après tu fais pareil :D



Posted by: lapras

Je préfere tout simplement utiliser des requetes HTTPS parce que je pense que mon niveau en C a baissé depuis un an...



Posted by: Joker62

Quand on pratique pas, on devient naze, normal :)



Posted by: anima

Citation:
Posté par Joker62
Quand on pratique pas, on devient naze, normal :)

Ca, c'est pas vrai. Je pratique pas souvent certaines choses, pourtant je n'y suis pas naze apres 1 an...





... Avoue Joker, tu as directement pensé a des trucs interdits aux moins de 18 ans ;) je parlais de la programmation en général (surtout le scripting BASH, que j'ai repris récemment, ainsi que le PHP)



Posted by: Joker62

Sincérement !
Oui j'y ai pensé lol



Posted by: lapras

Cool anima PHP is our friend !
Vive PHP
Joker > t'as pensé à quoi ?
Sinon, vous pensez que pour quelqun moyennement fort en C ca va prendre du temps de communiquer avec hotmail ? si oui je me remt vite aux maths ^^(je préfere les maths que la prog.)



Posted by: anima

Citation:
Posté par lapras
Cool anima PHP is our friend !
Vive PHP
Joker > t'as pensé à quoi ?
Sinon, vous pensez que pour quelqun moyennement fort en C ca va prendre du temps de communiquer avec hotmail ? si oui je me remt vite aux maths ^^(je préfere les maths que la prog.)

En fait, c'est tres peu de C/PHP/whatever. Du moment que tu sais utiliser les sockets, le reste, c'est de la logique...

Comme les maths!



Posted by: lapras

Oué bah justement je sais PLUS les utiliser depuis le "troyen de test" que je m'étais fait lol
(rien d'illégal, je le testais avec un ami consentant )



Posted by: anima

Citation:
Posté par lapras
Oué bah justement je sais PLUS les utiliser depuis le "troyen de test" que je m'étais fait lol
(rien d'illégal, je le testais avec un ami consentant )

Fais gaffe, il pourrait quand meme porter plainte pour viol!



Posted by: lapras


Nan mais sérieux, j'adorais les socket, dommage... :(
C'est marran je me créais mes propres requetes, genre "allumer la cam", "capture d'écran", "envoyer ce fichier", "télécharger ce fichier", "faire bipper l'ordi", "ouvrir le boitier CD", "éteindre l'ordi" etc...
Trop drole lol




Posted by: anima

Citation:
Posté par lapras

Nan mais sérieux, j'adorais les socket, dommage... :(
C'est marran je me créais mes propres requetes, genre "allumer la cam", "capture d'écran", "envoyer ce fichier", "télécharger ce fichier", "faire bipper l'ordi", "ouvrir le boitier CD", "éteindre l'ordi" etc...
Trop drole lol

Juste pour rire, si tu veux connaitre mon dernier challenge: l'identification d'un utilisateur sur une page web. Seulement, ce n'était pas n'importe quelle bdd que j'ai utilisée: j'ai synchronisé le tout avec Active Directory de windows.

Tu parles d'un calvaire. Enfin, ca marche, et bien en plus



Posted by: lapras

C'est quoi cette base de donnée ?(je suis sur que c'est plus dur que MySQL mdr)



Posted by: anima

Citation:
Posté par lapras
C'est quoi cette base de donnée ?(je suis sur que c'est plus dur que MySQL mdr)

Ca utilise LDAP. Si tu veux une idée de la complexité du truc, je me login sur LDAP en tant que seb@**********L.LOCAL. Ensuite, je verifie mon DN avec le serveur, je lui envoie mon timestamp ('fait chier quoi), et j'ai acces a une liste d'objets du style:

CN=********,CN=local
`- OU=Secondary,CN=*******
``- DN=seb,OU=Secondary,CN=*********

Et la dedans j'ai tout plein de propriétés, SID, etc... la plaie, quoi



Posted by: lapras

Ah oué en effet c'est pas mysql ta base ^^
Faudra que j'y jette un oeil, elle en vaut le coup ?



Posted by: anima

Citation:
Posté par lapras
Ah oué en effet c'est pas mysql ta base ^^
Faudra que j'y jette un oeil, elle en vaut le coup ?

Tous les réseaux d'entreprise sont basés sur du LDAP. Voila le gros point de vente. Sinon, c'est franchement de la merde.



Posted by: lapras

Ok donc je vais pas m'y mettre lol
je vais continuer dans les sockets ^^











-