# Wake On Lan



## torbin (17. November 2003)

Hallo

Ich will ein Wake on Lan Packet mit C++ erstellen.
Vielleicht kann mir einer sagen welche packete(TCP-UDP) man da nehmen.
Was man beachten soll, muss.
Vielleicht hat das jemand schon mal gemacht und kann mir evtl. code schnipsel als vorlage geben.

Danke im Vorraus

Gruss

T


----------



## Thomas Kuse (17. November 2003)

WakeOnLan sollte eigentlich bei jeglichem Zugriff auf die Netzwerkkarte geschehen.
Aber wenn der Rechner aus ist, kannst doch auch Du ihn nicht mehr anschalten.
Normalerweise ist dies eine Funktion des Mainboards bzw der Netzwerkkarte, oder irre ich mich?


----------



## Rene Albrecht (17. November 2003)

*Du irrst Dich...*

...nicht ganz - aber irgendwie doch:

Wenn WOL im Bios aktiviert ist und die LAN-Karte es unterstützt (bei PCI-Karten sollte noch ein Kabel von Ethernet-Karte zum Mainboard gezogen sein ) ist es notwendig, Pakete mit bestimmtem Inhalt an die IP-Adresse des Rechners zu schicken. Da der Zielrechner wohl aus ist (warum sonst WOL? ) verschickst Du grds. einen [directed] Broadcast mittels UDP. Dieser hat folgenden Inhalt

6x *FF* & 16x *MAC-Adresse des Zielrechners*

Dieses Konstrukt wird auch MagicPaket genannt und entstammt AMD. Auf deren Seite sollte es auch Doku dazu geben, ich konnte sie allerdings nicht finden.

Gruß
René

_Nachtrag:_  Schade, dass Du C++ machen willst, in C hätten wir sowas sicher mal gemeinsam umsetzen können. Es nervt mich einfach tierisch, dass mein Kollege ständig seinen Rechner ausschaltet...


----------



## Thomas Kuse (17. November 2003)

Muss ich morgen auch gleich mal testen


----------



## torbin (18. November 2003)

Genauso funkioniert es wie es Rene erklärt hat, nur das das Packet an die MAC-Adresse geschickt wird und nicht an die IP-adresse. Da wenn der Rechner aus ist die Netzwerkkarte keine IP hat.
Tools die das machen kann man zu hauf im Netz finden.

Gibt es denn da gravierende unterschiede zwischen C und C++

Ist doch alles C  

Gruss


----------



## Rene Albrecht (18. November 2003)

Du kannst ja kein UDP-Paket an die MAC-Adresse schicken - wie willst Du eine MAC adressieren ;-]? Die einzige Möglichkeit ist hier der Broadcast... 
Bei WOL schaut die Netzwerkkarte in jedem Paket nach und sieht dann die 6x FF gefolgt von seiner eigenen MAC-Adresse... und reagiert drauf (deshalb "MagicPaket" ), indem eine Info an das BIOS schickt, den Rechner zu aktivieren. Du kannst übrigens auch ein direkt adressiertes Paket (kein Broadcast) schicken, wenn Du den Zielrechner noch in der lokalen arp-Tabelle hast.

Tools im Netz zu suchen ist doch langweilig , selber machen ist viel interessanter .

Gruß


----------



## canuzzi (18. November 2003)

*project*

also wenn das project in c laeuft und auf linux bin ich mit dabei.


----------



## Rene Albrecht (18. November 2003)

laß uns...  ist ja auch nicht wirklich aufwendig, einen socket zu erstellen und an den broadcast ein udp-paket zu versenden (ist ja unter linux wie unter windows zu realisieren ). siehe dazu auch die Website von LanStart


----------



## torbin (19. November 2003)

Warum nicht.


Ich habe mal eine andere Frage, gibt es irgendwo eine Info drübe welche header datei man wöfür benutzen kann.

Kann mir nicht vorstellen das einer alles im kopf hat.

Gruss


----------



## Rene Albrecht (19. November 2003)

Was willst Du denn genau wissen?

Die in den .h-Dateien beschriebenen Konstanten findest Du z.B. heraus, indem Du die die .h-Datei einfach anschaust. 

Oder was meinst Du mit Deiner Frage konkret?

Gruß


----------



## torbin (19. November 2003)

Als beisiel

Wenn du in
stdio.h reinschaust siehst du relativ schnell

definition Input and output. Steht ja in der Überschrift.

Aber woher weist du ohne in die header datei zu schauen das diese richtig ist.
Wofür ist winsock.h?

Ok schlechts beispiel kann man vom namen ableiten.

Die Frage ist wenn ich ein Prog schreiben will für WOL woher weiss man welche header dateien man nehmen muss, wenn man nicht gerade netzwerkprogramierer der das jeden Tag macht

Ich hoffe ich konnte mich verständlich ausdrücken

Gruss


----------



## chibisuke (19. November 2003)

Tja.. äh woher weiß ein C / C++ programmierer welche funktionen das API zur ferfügung stellt?

Richtig geraten, er guckt in der dokumentation zum API nach, wo unter anderem auch die Headerdateien agegeben sind. Die Doku zum WinAPI ist die MSDN, welche man auf der M$ homepage findet.. 

Also alle fragen beantwortet? gut...


----------



## Rene Albrecht (19. November 2003)

gut erklärt... 

ich schaue bei einem problem grds. im internet, ob jemand dafür schon einen beitrag/ein tutorial verfasst hat oder eine source veröffentlicht oder oder oder (so bin ich auch auf tutorials.de gestossen ). dort schaue ich mir dann an, wie es gemacht wird...

p.s.: man muß nicht alles im kopf haben, aber man sollte wissen wo es steht! 

gruß


----------



## canuzzi (19. November 2003)

*won*

Hier die basics , die amd magic packets  und zum guten schluss noch ein howto]

... und hier ueber sockets und c unter unix und win32


----------



## torbin (23. November 2003)

Hallo

hat einer eine Idee wie man die MAC-adresse 16 mal viederholt?


----------



## Rene Albrecht (23. November 2003)

Häh?

Lautet Deine Frage, wie ich eine Schleife programmiere? In C würde ich sowas wie folgt lösen:


```
for (schleife=0; schleife<16; schleife++) {
   strcat (Datensatz,MACaddr);
}
```


----------



## torbin (25. November 2003)

Hallo

wenn ich das richtig verstanden habe zählst du ja einfach hoch bis 16.

Also musst du in deiner Lösung erst die MAC-Addr in dem Prog angeben bevor du es benutz.
Und du musst ja auch noch vielen FF davor setzen bevor du das übergibs und gesendet wird.

Beschäftigt sich eigentlich noch jemand damit?

Gruss


----------



## Rene Albrecht (25. November 2003)

Richtig: Ich setze 6 x FF und zähle dann von 0 bis 15 hoch, um die MAC dranzuhängen.

Die MAC mußt du mit angeben, weil sie Bestandteil des Magic Packet (siehe oben) ist.

Ich weiß nicht, ob sich noch andere damit beschäftigen. Ich habe mich auch nur damit beschäftigt, weil die Frage im Forum auftauchte und ich mich ein wenig in Netzprogrammierung einarbeiten will. 

Gruß


----------



## torbin (26. November 2003)

wenn ich dan richtig verstehe musst du jedesmal wenn du einen anderen rechner ansprechen willst dies in dem Prog neuangeben.

kannst du mir vielleicht ein Beispiel schreiben wie du die MAC 16 mal wiederholst.

Gruss


----------



## Rene Albrecht (26. November 2003)

du hast recht. der rechner schaltet sich nur ein, wenn du genau SEINE mac angegeben hast. (also mußt du sie tatsächlich vorher mittels parameter angeben)

wenn ich eine freie minute habe gebe ich dir die info... aber in c!


----------



## torbin (16. Januar 2004)

*Jep*

Hallo 

wußt ich es doch irgendwas habe ich vergessen.

Ich habe es geschaft das eine verbindung aufzubauen und ein packet zu senden der den entsprechenden rechner (bei richtigen einstellungen ) "AUFWECKT".

Wenn einer interresse hat kann ich ihm das zur Verfügung stellen, nur eine PN.

Ich habe zwar hier kurz gesucht , ob hier eine Bereich ist wo man das reinstellen kann habs aber nicht gefunden.
Vielleicht habe ich es auch über sehen.

Und mit der dem Thread ShellExecute Sorry. Ich hatte es schon in der MSDN gefunden aber den Text nicht sofort ganz verstanden. Problem aber schon gelöst nach etwas nachdenken.Bin im moment bischen überarbeitet. Trotzdem Danke.

:RTFM: 

Ganz vergessen -Betriebssystem: Winxp
Gruss


----------

