perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 29
Click for quality!




11.02.2012 / 13:13

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragBroadcast senden zwecks WOL
Seitenanfang
Hallo,

ich kann leider nicht programmieren, sonder arbeite nur mit Versatzstücken aus dem Internet: Ich habe ein ASP-Script, welches vom Webserver zuverlässig einen PC aufwecke (Wake on LAN).

Ein Perl-Script auf dem Webserver funktioniert dagegen nicht.

In beiden Fällen wird ein WOL-Paket an die IP-Adresse des aufzuweckenden PCs 192.168.0.55 verschickt und kommt dort auch identisch an (jedenfalls zeigt ein WOL-Monitor auf diesem Rechner völlig identische eintreffende Pakete).

Nun habe ich beobachtet, dass der WOL-Monitor auf _allen_ PCs im Netzwerk das WOL-Paket registriert, wenn das ASP-Script das "WOL" durchführt. Dabei meldet das ASP-Script: Magic Paket sent to MACADR at Broadcast Address 192.168.0.255.

Bei dem Perl-Script dagegen registriert der WOL-Monitor nur dann das WOL-Paket, wenn er auf dem PC mit der IP 192.168.0.55 läuft.

Ich vermute, dass das Perl-Script das Paket direkt an diese Adresse schickt, was nicht funktioniert, wenn dieser PC aus ist. Vielleicht leitet der Router es dann nicht weiter.

Das ASP-Script dagegen macht einen echten Rundruf an 192.168.0.xxx.

Wie müsste das Perl-Script angepasst sein, um ebenfalls einen echten Broadcast auszulösen?

Das Perl-Script wird über diese HTML-Seite aufgerufen:

<HTML>
<HEAD>
<TITLE>Wake-on-LAN</TITLE>
</HEAD>
<BODY bgcolor="#FFFFFF">
<div align="left">
<form method="POST" action="wakeup.pl">
<input type="text" name="HWaddress" size="20" value="00:1E:37:C2:13:60">
<input type="text" name="IPaddress" size="20" value="192.168.0.55">
<input type="text" name="Port" size="20" value="7">
<input type="submit" value="Wake-On-LAN">
</form>
</div>
</BODY>
</HTML>

Das Script selber:

#!/usr/bin/perl -w

use strict;
use Socket;
use CGI;
my $cgi = new CGI;
use CGI::Carp qw(fatalsToBrowser);

$cgi->default_dtd('-//W3C//DTD HTML 4.01 Transitional//EN');

print $cgi->header(-type =>'text/html'),
$cgi->start_html('Wakeup'),
$cgi->h1('Wakeup'),
wake($cgi->param('HWaddress'),$cgi->param('IPaddress'),$cgi->param('Port')),
$cgi->end_html();

sub wake
{
my $hwaddr = shift;
my $ipaddr = shift || '255.255.255.255';
my $port = shift || getservbyname('discard', 'udp');

my ($raddr, $them, $proto);
my ($hwaddr_re, $pkt);

# Validate hardware address (ethernet address)

$hwaddr_re = join(':', ('[0-9A-Fa-f]{1,2}') x 6);
if ($hwaddr !~ m/^$hwaddr_re$/) {
return $cgi->p({-style => 'color:red'}, "Invalid hardware address: $hwaddr" );
}

# Generate magic sequence

foreach (split /:/, $hwaddr) {
$pkt .= chr(hex($_));
}
$pkt = chr(0xFF) x 6 . $pkt x 16;

# Allocate socket and send packet

$raddr = gethostbyname($ipaddr);
$them = pack_sockaddr_in($port, $raddr);
$proto = getprotobyname('udp');

if(!socket(S, AF_INET, SOCK_DGRAM, $proto)) {
return $cgi->p({-style => 'color:red'}, "socket : $!");
}
if(!setsockopt(S, SOL_SOCKET, SO_BROADCAST, 1)) {
return $cgi->p({-style => 'color:red'}, "setsockopt : $!" );
}

if(!send(S, $pkt, 0, $them)) {
return $cgi->p({-style => 'color:red'}, "send : $!");
}

close S;
return $cgi->p("Sending magic packet to $ipaddr:$port with $hwaddr");
}

Datum: 24.08.2008-17:46

Beitragre: Broadcast senden zwecks WOL
Seitenanfang
hmm, also ich habe ja keine wirkliche Ahnung, von dem Mechanismus des Ganzen was du da beschrieben hast, aber wenn du ein Broadcast haben willst, dann nimm doch einfach 192.168.0.255 ;)

Datum: 26.08.2008-12:16

Beitragre: Broadcast senden zwecks WOL
Seitenanfang
Weil ich nicht begriffen hatte, dass man so einen Broadcast sendet.

Danke! Damit funktioniert es!

Ich kann über eine Internetseite http://domain.de/wakeonlan auf meinem SBS 2008-Testserver meine Arbeitsplatzrechner gezielt einschalten, wenn ich unterwegs bin (nur die HTML-Seite musste ich noch für die einzelnen Arbeitsplatz-PCs anpassen, mit mehreren Formularen).

Datum: 29.08.2008-10:30

-






-
-