gethostbyaddr braucht ewig

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • gethostbyaddr braucht ewig

    Hallo zusammen,

    ich habe das folgende Skript:

    PHP-Code:
    <?php
        
    function getmicrotime(){
            list(
    $usec$sec) = explode(" ",microtime());
            return ((float)
    $usec + (float)$sec);
        }


        function 
    ar_gethostbyaddr($ip){
            
    $output = `host -W 1 $ip`;

            if(
    ereg('.*pointer ([A-Za-z0-9.-]+)\..*'$output$regs))
             return 
    $regs[1];

            return 
    $ip;
        }


        
    //*** gethostbyaddr 208.66.195.10 *********************************
        
    $time_start getmicrotime();

        echo 
    'Host: '.gethostbyaddr('208.66.195.10').'<br>';

        
    $time_end getmicrotime();
        echo 
    "Dauer: ".round(($time_end $time_start), 20)."<br><br>";

        
    //*** gethostbyaddr 208.66.195.10 mit Timeout *********************
        
    $time_start getmicrotime();

        echo 
    'Host: '.ar_gethostbyaddr('208.66.195.10').'<br>';

        
    $time_end getmicrotime();
        echo 
    "Dauer: ".round(($time_end $time_start), 20)."<br><br>";

        
    //*** gethostbyaddr 217.72.195.42 *********************************
        
    $time_start getmicrotime();

        echo 
    'Host: '.gethostbyaddr('217.72.195.42').'<br>';

        
    $time_end getmicrotime();
        echo 
    "Dauer: ".round(($time_end $time_start), 20)."<br><br>";

        
    //*** gethostbyaddr 217.72.195.42 mit Timeout *********************
        
    $time_start getmicrotime();

        echo 
    'Host: '.ar_gethostbyaddr('217.72.195.42').'<br>';

        
    $time_end getmicrotime();
        echo 
    "Dauer: ".round(($time_end $time_start), 20);
    ?>
    Es liefert die folgende Ausgabe:

    Host: 208.66.195.10
    Dauer: 20.036051988602

    Host: 208.66.195.10
    Dauer: 4.010468006134

    Host: ha-42.web.de
    Dauer: 0.00067806243896484

    Host: ha-42.web.de
    Dauer: 0.0077528953552246
    Bei einer nicht bekannten IP-Adresse wie z.B. 208.66.195.10 braucht das normale gethostbyaddr ca. 20 Sekunden. Mit ar_gethostbyaddr jedoch ca. 4 Sekunden obwohl ein Timeout von 1 Sekunde eingestellt ist.
    Hat jemand eine Ahnung was hier das Problem sein kann bzw. eine Alternative? Kennt irgendjemand ein Tutorial zu der Funktion host? Konnte dazu im Netz nicht finden.

    Danke für eure Hilfe.
    Grüße, Heppi.

  • #2
    Haben ähnliches Problem gehabt, hatten aber ganz unterschiedliche Ergebnisse mit selben IP's auf unterschiedlichen Rechnern, weshalb ich vermute, dass das entweder mit den auf dem Linux eingestellten Nameservern oder mit dem Netzwerk zu tun hat.
    Ich vermute aber eher Ersteres - ausgehend von der Vermutung, dass PHP hier mit dem System zusammmenarbeit
    Deshalb mal die bei unserem "schnellen" System eingestellten Nameserver:
    Code:
    ns.routing.net (213.160.64.64)
    ns8.routing.net (213.160.65.64)
    Vielleich nützt es, eine DNS in der Nähe einzustellen.

    Oder Du nutzt den Linux-Befehl dig und wertest z.B. den Array $output von exec() aus
    PHP-Code:
    <? 
    $ip = "208.66.195.10";
    exec("dig -x ".$ip, $output, $return);
    ?>
    Anm.: die IP 208.66.195.10 liefert trotzdem ein Timeout
    - die anderen kamen sehr schnell

    Kommentar


    • #3
      Ich habe auch die DNS explizit eingestellt, anstatt einfach den Router anzugeben bzw. es DHCP zu überlassen.

      HTH.

      Kommentar


      • #4
        Original geschrieben von tcpip
        Ich habe auch die DNS explizit eingestellt, anstatt einfach den Router anzugeben bzw. es DHCP zu überlassen.

        HTH.
        Und wie kann ich die einstellen? Ich kann an der php.ini nichts drehen und bin im Safe-Mode.

        Kommentar


        • #5
          Beim webhoster ? -- bin überfragt. Jedenfalls nicht in der php.ini .

          Kommentar


          • #6
            Wenn das nicht deine eigene Maschine ist, siehts schlecht aus.
            Da kannst Du schon Jubeln, wenn "dig" funktioniert.

            Wenn nicht, vielleicht gibt es irgendwo Lösungsansätze über erweiterte PHP-Netzwerk-Programmierung ... (kleine und schnelle whois-Klassen z.B.) die das Problem lösen ...?

            suche mal hier: http://www.php.net/network
            und bei http://www.phpclasses.org/browse/

            Kommentar


            • #7
              Re: gethostbyaddr braucht ewig

              Original geschrieben von Heppi
              Kennt irgendjemand ein Tutorial zu der Funktion host? Konnte dazu im Netz nicht finden.
              Meinst Du den Linux-Befehl? Da gibt die Hilfe folgendes aus
              Code:
              Usage: host [-aCdlrTwv] [-c class] [-n] [-N ndots] [-t type] [-W time]
                          [-R number] hostname [server]
                     -a is equivalent to -v -t *
                     -c specifies query class for non-IN data
                     -C compares SOA records on authoritative nameservers
                     -d is equivalent to -v
                     -l lists all hosts in a domain, using AXFR
                     -n Use the nibble form of IPv6 reverse lookup
                     -N changes the number of dots allowed before root lookup is done
                     -r disables recursive processing
                     -R specifies number of retries for UDP packets
                     -t specifies the query type
                     -T enables TCP/IP mode
                     -v enables verbose output
                     -w specifies to wait forever for a reply
                     -W specifies how long to wait for a reply

              Kommentar

              Lädt...
              X