IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

Perl probleme avec socket et Get


Sujet :

Programmation et administration système Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Points : 22
    Points
    22
    Par défaut Perl probleme avec socket et Get
    Bonjours , je suis débutant en perl et je voudrais réussi à récuperer une phrase bien précise dans une page internet je m'explique. Je fais un programme qui à partir d'un hash md5 entrer par l'utilisateur va sur une page php
    http://ice.breaker.free.fr/md5.php?hash=$hash (ou $hash et le hash que l'utilisateur a entrer) a partir de la le site renvoi une réponse du genre :
    Vous avez entré le hash suivant : 9cdfb439c7876e703e307864c9167a15

    La correspondance suivante a été trouvée :

    - lol

    Et moi je voudrais récuperer uniquement le "lol" qui est le plaintext du hash. Malheureusement je n'y arrive pas juste a avoir le code source de la page. Je précise que je débute en perl.
    Voila mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #!usr/bin/perl/
    use IO::socket;
    print q(
    ++++++++++++++++++++++++++++++++++++
       => Md5 Hash comparateur <=
               by killua
    ++++++++++++++++++++++++++++++++++++
    );
    $host="ice.breaker.free.fr";
    print"Entre ton hash:";
    $hash=<STDIN>;
    chomp $hash;
    if($hash!="")
      {
      print"\n[+]Connection en cours...\n";sleep(1);
      my $sock= new IO::Socket::INET ( 
                                     PeerAddr => $host, 
                                     PeerPort => "80", 
     
                                     Proto => "tcp", 
                                    )
      or die"Connection impossible au server!";
      $sock->autoflush(1);
      print STDERR "[+]Connecter a $host\n";sleep(1);
      print"[+]Tentative de recuperation du plaintext\n";sleep(1);
      $url="/md5.php?hash=".$hash;
      print $sock "GET $url HTTP/1.1\n"; 
      print $sock "Host: $host\n";
      print $sock "Accept: */*\n";
      print $sock "Connection: close\n\n";
      while ( <$sock> ) {
     print;
    }
      }
    else
      {
      die "Aucun hash entrer...";
      }
    voila si quelqu'un peut m'aider . C'est aussi mon premier vrai programme en perl.

  2. #2
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Bonsoir.

    Si tu veux récupérer le code source d'une page, je te conseille de rgarder de plus près le module LWP::Simple, qui devrait largement suffire à satisfaire tes besoins.
    Il n'est pas intéréssant de réinventer la roue, surtout dans ton cas où la roue déjà inventée est très performante
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Je veux bien utiliser LWP::simple mais je ne sais pas l'utiliser. et je ne sais pas non plus récuperer une chose bien précise dans la page que je veux serais tu comment faire ?

  4. #4
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Tient, je te copie/colle une partie de la doc :
    Citation Envoyé par Perl enstimac
    Cette interface s'adresse à tous ceux qui souhaitent utiliser une version simplifiée de la bibliothèque libwww-perl. Elle permet également de faire des solilignes (« one-liners »). Si vous nécessitez un plus grand contrôle ou un meilleur accès aux en-têtes des requêtes envoyées et des réponses reçues, nous vous conseillons d'utiliser l'interface orientée objet du module LWP::UserAgent.

    Les fonctions suivantes sont fournies (et exportées) par ce module :

    get($url)
    La fonction get() va chercher le document identifié par l'adresse URL donnée et renvoie ce document. Cette fonction retourne undef en cas d'échec. L'argument $url peut être une simple chaîne de caractères ou une référence à un objet URI.

    Vous ne pouvez pas examiner le code de la réponse ni ses en-têtes (comme Content-Type) lorsque vous accédez au Web avec cette fonction. Si vous souhaitez obtenir ces informations, utilisez plutôt l'interface OO (voir la page de manuel LWP::UserAgent).

    head($url)
    Récupère les en-têtes d'un document. Renvoie les cinq valeurs suivantes si l'opération réussit : ($content_type, $document_length, $modified_time, $expires, $server)

    Renvoie une liste vide si l'opération échoue. Dans un contexte scalaire, retourne VRAI si l'opération réussit.

    getprint($url)
    Récupère et imprime un document identifié par une adresse URL. Le document est imprimé sur STDOUT à mesure que les données sont reçues du réseau. Si la requête échoue, le code d'état et le message sont imprimés sur STDERR. La valeur de retour est le code de la réponse HTTP.
    Donc en gros, tu utilises la méthode get et tu peux aninsi obtenir le code source de la page !
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Merci voici mon code maintenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #!usr/bin/perl/
    use LWP::Simple;
    print q(
    ++++++++++++++++++++++++++++++++++++
       => Md5 Hash comparateur <=
               by killua
    ++++++++++++++++++++++++++++++++++++
    );
    $host="http://ice.breaker.free.fr";
    print"Entre ton hash:";
    $hash=<STDIN>;
    chomp $hash;
    if($hash!="")
      {
      print"\n[+]Recuperation en cours...\n";sleep(1);
      $url=$host."/md5.php?hash=".$hash;
      $result=get($url);
      print "Hash:".$result;
      }
    else
      {
      die "Aucun hash entrer.\n";
      }
    Maintenant se qui m'interresserais c'est de recuper juste le plaintext du hash et non le code source entier et je n'ai aucune idée de comment faire.

  6. #6
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Et bien, le mieux est d'utiliser une regex, une substituion pour être précis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result =~ s/.*-\s+(.*?)<br>.*/$1/;
    Quelques conseils, en vrac : pour comparer une chaîne de caractèrez à quelque chose, il faut utiliser ne et pas !=.
    Je te conseille d'utiliser les pragmas strict et warnings. le premier oblige à délcarer toutes les variables à l'avance et le second active les messages d'erreurs.
    Enfin, quand tu utilises la fonction get, n'oublie pas de vérifier si tout s'est bien passé comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result=get($url) or die "get n'a pas pu recuperer le code de la page";
    Voici ton code source, corrigé et modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    #! /usr/bin/perl
    use strict;
    use warnings;
    use LWP::Simple;
    print q(
    ++++++++++++++++++++++++++++++++++++
       => Md5 Hash comparateur <=
               by killua
    ++++++++++++++++++++++++++++++++++++
    );
    my $host="http://ice.breaker.free.fr";
    print"Entre ton hash:";
    chomp (my $hash = <STDIN>);
    if($hash ne "")
    {
      print"\n[+]Recuperation en cours...\n";sleep(1);
      my $url=$host."/md5.php?hash=".$hash;
      my $result=get($url);
      $result =~ s/.*-\s+(.*?)<br>.*/$1/;
      print "\n\n$result";
    }
    else
    {
      die "Aucun hash entrer.\n";
    }
    Si tu ne comprend pas quelque chose, demande le moi
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Merci beacoup sa marche. Je voudrais juste que tu m'expliques la ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result =~ s/.*-\s+(.*?)<br>.*/$1/;
    ainsi que celle ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chomp (my $hash = <STDIN>);
    et quel pourquoi il faut mettre my. Merci

  8. #8
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Citation Envoyé par killuaster
    Merci beacoup sa marche. Je voudrais juste que tu m'expliques la ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result =~ s/.*-\s+(.*?)<br>.*/$1/;
    Ca c'est une expression régulière. Pour savoir comment an faire, regarde la FAQ, qui est plutôt bien faite.
    Grosso modo, cette expression recherche n'importe quel caractère, puis le caractère -, puis un ou plusieurs espaces, puis ton palintext suivi d'un espace puis tout le reste du code de la page et remplace le tout par la partie entre paranthèse qui correspond à ton plaintext.

    Citation Envoyé par killuaster
    ainsi que celle ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chomp (my $hash = <STDIN>);
    Celle là, il n'y a rien de plus simple, elle est équivalente à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $hash = <STDIN>;
    chomp ($hash);
    Citation Envoyé par killuaster
    et quel pourquoi il faut mettre my. Merci
    Le my sert à déclarer ta variable. Encore une fois, je te renvoie vers la FAQ, qui est décidéement très bien faite...
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Ok merci pour ton aide .

  10. #10
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    De rien, si ton problème est résolu, n'oublie pas d'ajouter le tag résolu à ton sujet
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

Discussions similaires

  1. probleme avec les fonction get et set
    Par Invité dans le forum Flex
    Réponses: 0
    Dernier message: 23/01/2008, 14h44
  2. [C] Probleme avec socket client-serveur TCP
    Par LinuxUser dans le forum Réseau
    Réponses: 33
    Dernier message: 15/05/2007, 22h26
  3. Probleme avec la fonction gets
    Par figo7 dans le forum C
    Réponses: 21
    Dernier message: 23/03/2007, 15h54
  4. Probleme Avec Scanf Et Gets !
    Par A_B dans le forum C
    Réponses: 11
    Dernier message: 09/03/2007, 21h20
  5. [C/C++] probleme avec socket
    Par Zenryl dans le forum C++
    Réponses: 6
    Dernier message: 09/03/2007, 17h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo