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

Langage PHP Discussion :

gethostbyaddr() besoin d'aide


Sujet :

Langage PHP

  1. #1
    Fabouney
    Invité(e)
    Par défaut gethostbyaddr() besoin d'aide
    bonjour à tous,

    voila j'ai une liste d'ip, je parcour cette liste et pour chacune des IPs je veux récupérer leur host, seulement il se trouve que j'obtient un timeout si la liste est trop longue, pas de parametre de TTL dans l'entête de la fonction c'est dommage, je vois pas comment faire pour mettre une sorte de TTL a la fonction, pour dire qu'au bout d'un certain temps, s'il trouve pas qu'il passe à la prochaine ip :s.

    merci de m'éclaircir !!

  2. #2
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    merci aussi de nous éclaircir sur ton probleme, on as pas de code, et j'ai pas bien compris ce que tu veux faire avec cette fonction car elle marche bien logiquement ...

  3. #3
    Fabouney
    Invité(e)
    Par défaut
    bah inutile de mettre du code j'pense que c'est assez clair lol
    tu imagine une liste d'ip stocké dans un tableau.

    72.12.10.1
    72.12.10.2
    72.12.10.3
    72.12.10.4
    72.12.10.5
    ...


    tu parcour le tableau et pour chaque ips tu fait appel a la fonction gethostbyaddr().
    le probleme c'est qu'apparement quand il a trop d'ip a traiter, ca timeout. le code est tout simple lol c'est une boucle :s

  4. #4
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 140
    Points : 151
    Points
    151
    Par défaut
    je ne sais pas ce que ça vaut, mais j'ai trouvé ça dans les commentaires de la doc :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <?
    function gethostbyaddr_timeout($ip, $dns, $timeout=1000)
    {
       // random transaction number (for routers etc to get the reply back)
       $data = rand(0, 99);
       // trim it to 2 bytes
       $data = substr($data, 0, 2);
       // request header
       $data .= "\1\0\0\1\0\0\0\0\0\0";
       // split IP up
       $bits = explode(".", $ip);
       // error checking
       if (count($bits) != 4) return "ERROR";
       // there is probably a better way to do this bit...
       // loop through each segment
       for ($x=3; $x>=0; $x--)
       {
           // needs a byte to indicate the length of each segment of the request
           switch (strlen($bits[$x]))
           {
               case 1: // 1 byte long segment
                   $data .= "\1"; break;
               case 2: // 2 byte long segment
                   $data .= "\2"; break;
               case 3: // 3 byte long segment
                   $data .= "\3"; break;
               default: // segment is too big, invalid IP
                   return "INVALID";
           }
           // and the segment itself
           $data .= $bits[$x];
       }
       // and the final bit of the request
       $data .= "\7in-addr\4arpa\0\0\x0C\0\1";
       // create UDP socket
       $handle = @fsockopen("udp://$dns", 53);
       // send our request (and store request size so we can cheat later)
       $requestsize=@fwrite($handle, $data);
     
       @socket_set_timeout($handle, $timeout - $timeout%1000, $timeout%1000);
       // hope we get a reply
       $response = @fread($handle, 1000);
       @fclose($handle);
       if ($response == "")
           return $ip;
       // find the response type
       $type = @unpack("s", substr($response, $requestsize+2));
       if ($type[1] == 0x0C00)  // answer
       {
           // set up our variables
           $host="";
           $len = 0;
           // set our pointer at the beginning of the hostname
           // uses the request size from earlier rather than work it out
           $position=$requestsize+12;
           // reconstruct hostname
           do
           {
               // get segment size
               $len = unpack("c", substr($response, $position));
               // null terminated string, so length 0 = finished
               if ($len[1] == 0)
                   // return the hostname, without the trailing .
                   return substr($host, 0, strlen($host) -1);
               // add segment to our host
               $host .= substr($response, $position+1, $len[1]) . ".";
               // move pointer on to the next segment
               $position += $len[1] + 1;
           }
           while ($len != 0);
           // error - return the hostname we constructed (without the . on the end)
           return $ip;
       }
       return $ip;
    }
    ?>

Discussions similaires

  1. besoin d'aide pour le composant DBComboBox
    Par jane2002 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/02/2004, 19h01
  2. Besoin d'aide avec postgresql sous windows NT
    Par Chihuahua dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/07/2003, 08h29
  3. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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