Wakeup on LAN-Skript funktioniert von Mac aus, aber nicht von Windows 7

990

Ich habe einen Linux-Server in meinem lokalen Netzwerk, der so eingerichtet ist, dass er Wakeup on LAN verwendet. Ich habe dieses Skript wortwörtlich kopiert und lediglich die MAC-Adresse in der Beispielanwendung ersetzt. Wenn ich dieses Skript auf einem Mac starte, wird der Server aktiviert. Wenn ich es von Windows 7 (32-Bit Ultimate) aus ausführe, macht es nichts (Beachten Sie, dass das Skript DOES ausgeführt wird, fügte ich zur Bestätigung ein debug raw_input () hinzu).

0

2 Antworten auf die Frage

0
harrymc
+1. Ja, höchstwahrscheinlich wurde das Skript von einer Firewall angehalten Anotomix vor 14 Jahren 0
0
rjt

Ich habe selten festgestellt, dass WOL selbst für Maschinen, die von USA EPA Energy Start zertifiziert wurden, zuverlässig ist.

Abhängig davon, ob der Gerätetreiber den WOL oder das BIOS oder etwas dazwischen verarbeitet, unterscheidet die MAC-Adresse in einigen Fällen die Groß- und Kleinschreibung. Versuchen Sie, zwei Frames zu senden, einen Großbuchstaben und einen Kleinbuchstaben. Rufen Sie WakeOnLan('0a:1b:f5...')ein zweites Mal an.

Ist der MAC zufällig ein PowerPC-MAC oder ist es Intel? Könnte ein Big-Endian vs. Little-Endian-Fehler sein, bei dem die Konvertierung in ein Netzwerk-Byte-Format nicht durchgeführt wird. Folglich wird die MAC-Adresse vom Empfänger nicht erkannt. Statt 0A: 1B: F5: ... zu empfangen, erhält er A0: B1: 5F: ...

Geben Sie erneut die dritte und vierte MAC-Adresse in das Skript ein:

WakeOnLan('0A:1B:F5:...')  WakeOnLan('A0:B1:5F:...')  

Was mich dazu gebracht hat - ich habe einen HPdc7800 mit Intel vPro. Ein großer Teil der identifizierenden Informationen erscheint in jedem Byte rückwärts, abhängig davon, was ich zum Anzeigen der MAC- oder GUID-Adresse verwende. An der vPro-Konsole, von der vPro-Webseite aus, mithilfe des BIOS und eines Betriebssystems - ist es sehr schwierig, ein aktives Verzeichnis der Maschine anhand der GUID vorzuordnen.

Es dauert nur einige Augenblicke, um dieses Skript zu bearbeiten und Folgendes hinzuzufügen:

WakeOnLan('uppercase and big endian')  WakeOnLan('uppercase and little endian')  WakeOnLan('lowercase and big endian')  WakeOnLan('lowercase and little endian')  

Im Skript ist das Beispiel sorglos, ob das gesamte Byte explizit definiert ist oder nicht, wobei führende Nullbytes ignoriert werden. Ich würde führende Nullen explizit eingeben. Wer weiß, wer den Code geschrieben hat, den eine Netzwerkkarte verwendet, um sich selbst zu identifizieren und auf welcher Ebene einer Management-Firmware, eines einfachen BIOS oder eines Gerätetreibers der Code verarbeitet wird.

WakeOnLan('0:3:93:81:68:b2')