H3llGhost: PHP Skript zu Perl

Hallo Leute,

ich habe folgenden PHP-Code:

[code=php]
      $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
      $packet = chr(255).chr(255)."Z".chr(255);
      $bytes_sent = socket_sendto($socket, $packet, strlen($packet), 0, $host, $port);
      echo "<b>".$bytes_sent."</b> bytes <b>OK</b></li>";
      $recv_bytes = 0;
      $buffer     = "";
      $timeout    = 30;
      $answer     = "";
      $packets    = 0;
      $read       = array($socket);
      while (socket_select($read, $write = NULL, $except = NULL, &$timeout) > 0) {
        $recv_bytes += socket_recvfrom($socket, &$buffer, 2000, 0, &$host, &$port);
        if (($buffer[0] == chr(255)) && ($buffer[1] == chr(255)) && ($buffer[2] == "Z") && ($buffer[3] == chr(255)) &&
            ($buffer[4] == "1") && ($buffer[5] == ".") && ($buffer[6] == "0") && ($buffer[7] == "0") && ($buffer[8] == chr(255))) {
          $answer     .= substr($buffer, 9, strlen($buffer));
        }
        $buffer     = "";
        $timeout    = "1";
        $packets++;
      }
[/code]

Den würde ich gerne in Perl umsetzen.
Und meiner sieht bis jetzt so aus:

[ocde=perl]
use strict;
use IO::Socket;

my $HOSTNAME = '127.0.0.1';
my $PORTNO = '27501';
my $length = 1024;

socket (SOCKET, PF_INET , SOCK_DGRAM, getprotobyname ('udp'))
or die "socket: $!";
my $ipaddr=inet_aton($HOSTNAME);
my $portaddr = sockaddr_in($PORTNO, $ipaddr) ;

my $msg = chr(0xff).chr(0xff)."Z".chr(0xff);

send (SOCKET, $msg, 0 , $portaddr) == length ($msg)
or die "cannot send to $HOSTNAME($PORTNO): $!";

my $rin = '';
vec($rin, fileno(SOCKET), 1) = 1;
my $rout;

while (select($rout = $rin, undef, undef, 10.0))
{
 $msg = '';
 $portaddr = recv(SOCKET, $msg , $length, 0)
 or die "recv: $!";

($PORTNO, $ipaddr) = sockaddr_in ($portaddr);
 my $host = gethostbyaddr ($ipaddr, AF_INET);

print "$host($PORTNO) said $msg$/";
}
[/code]

Ist die Umsetzung bisher richtig oder würdet ihr das anders machen?
Wäre über Ideen, Verbesserungsvorschläge, etc. sehr dankbar!
Danke im Voraus.

  1. hallo,

    Ist die Umsetzung bisher richtig

    Das kommt darauf an, was du eventuell für Fehlermeldungen erhältst. Gibts keine Fehlermeldungen, ist es richtig.

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. Hi,

      Das kommt darauf an, was du eventuell für Fehlermeldungen erhältst. Gibts keine Fehlermeldungen, ist es richtig.

      Dieser Schluss ist mindestens so gewagt, wie er falsch ist.

      MfG ChrisB

      --
      "The Internet: Technological marvel of marvels - but if you don't know *what* you're lookin' for on the Internet, it is nothing but a time-sucking vortex from hell."
    2. Das kommt darauf an, was du eventuell für Fehlermeldungen erhältst. Gibts keine Fehlermeldungen, ist es richtig.

      bist Du mit dieser Logik auch an die Installation von Suse 11 herangetreten?

      lg
      Reiner

      1. hallo Reiner,

        bist Du mit dieser Logik auch an die Installation von Suse 11 herangetreten?

        Jawohl ;-) Und da habe ich ja jede Menge Fehlermeldungen, was scheinbar verlorengegangene Festplatten angeht. Allerdings wollte ich die SUSE 11 gar nicht unbedingt installieren, wie du dem angeführten Thread entnehmen kannst.

        <Zungerausstreckmodus>
           bääääääähhh
        </Zungerausstreckmodus>

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
    3. hallo,

      Ist die Umsetzung bisher richtig

      Das kommt darauf an, was du eventuell für Fehlermeldungen erhältst. Gibts keine Fehlermeldungen, ist es richtig.

      Grüße aus Berlin

      Christoph S.

      Ich bekomme eine unknown error in der Zeile wo die recv-Funktion steht.

      1. hallo,

        Ich bekomme eine unknown error in der Zeile wo die recv-Funktion steht.

        Das bekommst du vermutlich im Browser angezeigt. Du hast vergeseen, in deinen Perl-Code noch einzufügen
           use CGI::Carp qw(fatalsToBrowser);.

        Außerdem stehen deutlich bessere Informationen in den logs deines Servers. Überprüfe die bitte.

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
        1. Ich bekomme eine unknown error in der Zeile wo die recv-Funktion steht.

          Das bekommst du vermutlich im Browser angezeigt. Du hast vergeseen, in deinen Perl-Code noch einzufügen
             use CGI::Carp qw(fatalsToBrowser);.

          Wieso sollte er das tun?
          Ich kann an dem Skript nicht erkennen, dass es im Browser angezeigt werden sollte.

          Struppi.