Magic Paket für Wake-On-LAN bauen?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Magic Paket für Wake-On-LAN bauen?

    Hallo zusammen,

    irgendwie steh ich grade auf dem Schlauch. Ich versuche ein "Magic
    Paket" für Wake-On-LAN zusammen zu basteln.

    Mein Problem ist jetzt folgendes: Ich habe den Header und auch die MAC-Adresse in eigenen Variablen (als NSStrings) gespeichert, weil man sie über die GUI eingeben können soll (also nur die MAC-Adresse, der Header ist ja eh immer gleich).

    So, wie bekomme ich nun am geschicktesten diese Werte als HEX-Zahlen in meinen Sendepuffer (NSData) um diesen dann zu verschicken? Ich raufe mir seit gestern früh schon die Haare aus, weil ich einfach nicht drauf komme. Ich bekomm sonst alles geregelt mit den Daten aber das...seufz...

    Kann mir jemand helfen?
    Danke & Ciao, Markus.
  • RE: Magic Paket für Wake-On-LAN bauen?

    Wenn Du eine description von einem NSData Objekt machst, erhälst Du den Inhalt als HEX, jedoch mit zusätzlichen Informationen. Ich weiss jetzt nicht genau, wie aufwändig es wäre dies zusätzlichen Informationen zu filtern/entfernen.

    Alternativ kannst Du einen NSMutableString und eine Schleife verwenden und darin die einzelnen Zeichen des Sendepuffers per [hexString appendFormat:@"%.2x",character] nach HEX konvertieren.
  • RE: Magic Paket für Wake-On-LAN bauen?

    Danke für den Tipp aber das wars leider nicht.

    Ich habe ja schon einen String mit dem HEX-Code, also zum Beispiel so wie

    NSString *macAdresse = @"0a:00:11:22:33:44";

    Im Speicher aber wird dann aus 0a beispielsweise 30 61 - eben der ASCII-Code der einzelenen Zeichen. Ich brauche aber den Speicher mit dem Wert 0a beschrieben...praktisch eine 1:1 Kopie der Werte vom String in den Speicher...hm...schwer zu beschreiben aber ich hoffe es ist irgendwie klar geworden.

    Wenn ich C nutzen würde, würde ich z.B. ein memcpy oder memset dafür verwenden, hätte da aber wohl auch das Problem, vom string zu den einzelnen Zeichen zu kommen...irgendwie kann das eigentlich nicht so schwer sein und ich se den Wald vor lauter Bäumen einfach nicht... :(
  • RE: Magic Paket für Wake-On-LAN bauen?

    Das könnte in der Tat irgendwie gehen...aber auch nicht so richtig :(
    Jedenfalls kannt ich die vorher noch nicht! Und ich bin mal wieder mächtig beeindruckt, was es alles so "für lau" gibt beim Cocoa-Programmieren... :-o

    aber, zurück zum Problem. Ich habe jetzt folgendes programmiert:

    Quellcode

    1. NSString *macAdressString = @"0f:17:f2:e6:9f:61";
    2. NSScanner *hexScanner = [[NSScanner alloc] initWithString:macAdressString];
    3. unsigned int d;
    4. while ([hexScanner isAtEnd]==NO)
    5. {
    6. [hexScanner scanHexInt:&d];
    7. NSLog(@"Integerwert bis Position %i der MAC-Adresse: %d",[hexScanner scanLocation],d);
    8. }

    Und wenn ich die Doku nun richtig verstehe, sollte der Scanner sich Stück für Stück nach hinten durcharbeiten...tut er bei mir aber nicht :( in jedem Schleifendurchlauf startet er wieder bei Position 0 und endet ganz brav bei Position 3. Muss ich die Position von Hand weiter setzen???
  • Die Lösung, falls noch jemand sowas braucht

    Quellcode

    1. //----- MAC-Adresse auseinandernehmen und in den Speicher schreiben
    2. //----- WoL-Message im Speicher anlegen
    3. unsigned char* wolMessage;
    4. wolMessage = malloc(102);
    5. NSString *macAdressString = @"0f:17:f2:e6:9f:20"; //Dummy zum testen
    6. unsigned int d,i;
    7. NSCharacterSet *skippedChars = [NSCharacterSet characterSetWithCharactersInString:@":"];
    8. NSScanner *hexScanner = [[NSScanner alloc] initWithString:macAdressString];
    9. [hexScanner setCharactersToBeSkipped:skippedChars];
    10. i=6; //Offset damit wir nach dem Header anfangen zu basteln
    11. for (int y=0;y<16;y++) //6 mal soll die MAC-Adresse rein
    12. {
    13. while ([hexScanner isAtEnd]==NO)
    14. {
    15. [hexScanner scanHexInt:&d]; //immer die nächste HexZiffer suchen
    16. memset(wolMessage+i, d, 1); //...und in den Speicher kopieren
    17. i++;
    18. }
    19. [hexScanner setScanLocation:0]; //wieder von vorn scannen
    20. }
    21. for(int y=0;y<102;y++)
    22. printf("%.2x:",*(wolMessage+y));
    Alles anzeigen