Wake on LAN übers Internet

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von bermuda, 16. März 2006 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 16. März 2006
    ich habe ein kleines programm geschrieben, um einen PC im lokalen netzwerk über wol zu starten aber es funktioniert leider nicht so ganz richtig und hier ist die funktion. ich würde auch gerne wissen wie man das auch übers internet benutzen kann. einen pc mit hilfe von wol übers internet zu starten.

    Code:
    void send_wol(char* MACAddr) {
    
     BYTE MagicPacket[102] = " ";
     int MACBit = 0;
     int i, j;
    
     for (i=0;i<6;i++)
     MagicPacket[i] = 0xff;
    
     for (i=0, j=0;i<6;i++) {
    
     sscanf(MACAddr + j, "%X", &MACBit); 
     j += 3;
     MagicPacket[i+6] = MACBit;
    
     }
    
     for (i=0;i<15;i++) 
     memcpy(&MagicPacket[(i+2)*6], &MagicPacket[6], 6);
    
     for(i=0; i<102; i++) {
     printf("%02X ", MagicPacket[i]);
     if((i+1) % 6 == 0)
     printf("\n");
     }
    
     sockaddr_in sa;
     sockaddr to; 
     to.sa_family = 2;
     for (i=0;i<6;i++)
     to.sa_data[i] = 0xff;
    
     SOCKET is; 
     int byteSent = 0;
    
     sa.sin_family = AF_INET;
     sa.sin_port = htons(1234);
     sa.sin_addr.s_addr = INADDR_ANY;
    
     is = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    
     if (is != INVALID_SOCKET) {
     if (!bind(is, (SOCKADDR*)&sa, sizeof(SOCKADDR_IN))) {
     byteSent = sendto(is, (const char*)MagicPacket, 102, 0, &to, 0x10);
     if(byteSent <= 0)
     PrintError("sendto");
     else
     printf("\n%i\n", byteSent);
     else { 
     PrintError("bind");
     }
     }
     else
     PrintError("socket");
    }
    
     
  2. 16. März 2006
    Ich weiß zwar nicht genau, was "nicht ganz richtig funktionieren" im einzelnen jetzt bedeutet , aber hier solltest du alle Informationen und C++ Referenz-Sourcecode finden, den du benötigst: http://www.codeproject.com/useritems/WOL.asp
     
  3. 16. März 2006
    ja, aber man muss irgendwas einstellen, damit das senden von broadcast packete (an alle pcs) möglich ist, sonst ist der code von syntax her schon richtig, glaube ich, sonst würde der compiler etwas melden, wenn das nicht der fall ist. dieses s.g magic packet soll von einem pc zum anderen weitergeleitet werden, bis der zielrechner erreicht wird, und ganau das kann ich nicht realisieren.
    Ich würde aber auch gerne wissen, ob das übers internet möglich ist.
     
  4. 18. März 2006
    danke ResusPos, ich will nur wissen, wie man das versenden von broadcast packete aktiviert. es gibt bestimmt eine funktion dafuer, aber ich weiess nicht wie die heisst.
     
  5. 18. März 2006
    Soweit ich weis funzt das nur über das gleiche Subnetz!
    dH du musst nen Router ham, der nen Magic Packet an deinen Rechner (bzw deine Mac) sendet!

    (fürs Inet jetzt gedacht!)
     
  6. 18. März 2006
    Moin,
    nun ein direkter Versand ist nur innerhalb des eigenen Subnetzes möglich. Wenn du nun ein Broadcast-Packet in ein anderes Teilnetz (z.b. übers Internet) senden möchtest, dann musst du directed-broadcast ip-adressen verwenden. Die Zieladresse für das Subnetz 110.4.7.0 wäre z.b. 110.4.7.255 (bei einer Subnetzmaske von 255.255.255.0).
    Das Problem ist allerdings, dass der Router solche directed-broadcasts weiterleiten muss, das kann man bei den meisten Geräten manuell einstellen, in aller Regel tun sie es nämlich nicht.

    Ich hoffe das war es was du meintest, oder nicht?
     
  7. 18. März 2006
    also ich habe zuerst das socket mit socket() erstellt, danach hab ich es mit bind() gebunden und das magic packet mit sendto() geschickt (UDP protokoll). ich habe auch nur zum testen das magic packet ausgegeben, um sicherzustellen, das es richtig ist

    Code:
     for(i=0; i<102; i++) {
     printf("%02X ", MagicPacket[i]);
     if((i+1) % 6 == 0)
     printf("\n");
     }
    aber ich will nur wissen, ob das versenden von broadcast packete ohne weiteres funktioniert, muss man da nicht irgend etwas machen, damit das geht.

    das problem liegt nicht im netzwerk, ich habe dasselbe subnetz, das router leitet diese packete auch weiter, die mainboards sind alle neue und unterstuetzen wol und ich habe es auch im bios aktiviert. ich habe das mit lanstart probiert und es geht, also liegt es bestimmt im code.
     
  8. 18. März 2006
    Ja, das vesenden von Broadcast-Paketen funktioniert ohne weiter Einstellungen, dein Rechner macht das am laufenden Meter (siehe DHCP, ARP etc.).
    Wenn die zu bootenden Rechner im selben Netzsegment stehen, an welche Adresse schickst du denn das WOL-Paket? Wenn du auf MAC-Ebene bleiben willst, kannst du in dem Fall auch die Broadcast-MAC FF:FF:FF:FF:FF:FF verwenden.

    Da UPD ein verbindungs- und kontrollloses Protokoll ist empfehle ich dir auch das Paket mindestens 4x hintereinander zu verschicken.
     
  9. 19. März 2006
    danke jungs für eure hilfe, es ist jetzt mir klar, was wol übers internet angeht. was aber in meinem code fehlt ist eine funktion namens setsockopt() zum aktivieren von broadcast nachrichten, ein freund von mir meinte, ich sollte diese funktion vor sendto() aufrufen und tatsächlich hat es funktionert.
    danke nochmal für die informationen und für eure sofortige hilfe
     
  10. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.