Post by Ulrich F. HeidenreichPost by Andreas WeiskerSind sie schon - in gewisser Weise.
Ein Magic Packet muss dann nicht an 255.255.255.255 adressiert werden,
sondern an die Subnetz Adresse in dem sich der aufzuweckende Rechner
befindet.
Du weißt aber schon, daß ein Magic Packet gar nicht an eine IP-Adresse,
sondern an eine Mac-Adresse adressiert werden muß? Den Router, der Mac-
Adressen routen kann, möchte ich sehen. (Und BTW auch den potentiellen
Angreifer, der die Mac-Adresse meines PCs kennt.)
Angeblich könne man sich das zwar auf dem eigenen Router basteln, der
per IP eintreffende Pakete auf die Mac-Adresse übersetzt, um WOW (wake
up on WAN) fahren zu können. Wer das tut, sollte sich dann aber auch des
Risikos bewußt sein.
Vielleicht irre ich aber auch. Von allzu technischen Einzelheiten, mich
von diesem Irrtum abzubringen, bitte ich aber abzusehen. Wenn ich's eh
nicht kapiere, wäre das ja nutzlos ... ;-)
Ja etwas. Du brauchst dann jetzt auch nicht weiterlesen. Für alle
anderen die es dennoch genau wissen möchten:
Ein Magic Packet ist nur ein UDP Paket.
Dieses UDP Paket wird an die Broadcast Adresse des Netzes geschickt und
erreicht dadurch alle PCs. Die NIC wertet dabei aber nur die Mac aus,
die im UDP Paket steht.
Im lokalen Netz ist das ähnlich. Dort wird an das lokale Subnetz
geschickt. Also 255.255.255.255, so das dort die PCs das UDP Paket
empfangen.
WOW funktioniert auch in gewisser Weise. Es gibt ein paar Router die
wenn sie ein Magic Packet über das Internet empfangen, dieses an das
lokale Netz weiter leiten. Solche Pakete können im übrigen auch ein
Passwort beinhalten, so dass es für Angreifer wieder schwieriger werden
würde.
Hier eine Delphi Prozedur die genau das (ohne Passwort) macht. (Ich
wecke damit in der Firma die PCs die in anderen VLANs stehen.)
procedure WakeOnLan(MAC, IP: string);
var
sock: TUDPBlockSocket;
HexMac: string;
data: string;
n: integer;
b: Byte;
begin
if MAC <> '' then
begin
MAC := ReplaceString(MAC, '-', '');
MAC := ReplaceString(MAC, ':', '');
if Length(MAC) < 12 then
Exit;
HexMac := '';
for n := 0 to 5 do
begin
b := StrToIntDef('$' + MAC[n * 2 + 1] + MAC[n * 2 + 2], 0);
HexMac := HexMac + char(b);
end;
if IP = '' then
IP := cBroadcast;
sock := TUDPBlockSocket.Create;
try
sock.CreateSocket;
sock.EnableBroadcast(true);
sock.Connect(IP, '9');
data := #$FF + #$FF + #$FF + #$FF + #$FF + #$FF;
for n := 1 to 16 do
data := data + HexMac;
sock.SendString(data);
finally
sock.Free;
end;
end;
end;
Gruß
Andreas