PHP Skript zu Perl
H3llGhost
- 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.
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.
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
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
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.
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.
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.
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.