Startseite ¦  was ist neu ¦  programmier tips ¦  indy artikel ¦  intraweb artikel ¦  informationen ¦  links ¦  interviews ¦  sonstiges
kylix ¦  tutorials ¦  online shop ¦  fotos ¦  Add&Win Gewinnspiel


Willkommen Gast. Bitte einloggen oder registrieren.
21.05.2012, 13:02:04
Übersicht Hilfe Suche Einloggen Registrieren

+  SwissDelphiCenter Forum
|-+  German Forums
| |-+  Internet / LAN Forum
| | |-+  Wake up on Lan über Delphi realisieren???
« vorheriges nächstes »
Seiten: [1] 2 3 Drucken
Autor Thema: Wake up on Lan über Delphi realisieren???  (Gelesen 15019 mal)
Activexoom
Newbie
*
Offline Offline

Beiträge: 1


Lucasmaier@hotmail.com
« am: 07.01.2003, 16:39:49 »

Hi all,
ich bin gerade dabei und versuche mit Delphi ein Programm zu schreiben, welches durch angabe der MAC Adresse den Rechner aus dem schlaf holt.

Hat hier schonmal jemand damit Erfahrungen gesammelt bzw. schon ein Lauffähiges Programm geschrieben?

Bzw. geht das überhaupt mit Delphi???
Habe schon ein Prog in VB gesehen, kann jedoch kein VB und möchte eine Datenbankanbindungen zu den MAC Adressen aus einem Inventarisierungsprogramm herstellen was mit Delphi leicht zu realisieren ist.

Ich danke schonmal im Vorraus für jegliche Infos.
Gruß
Active-X
Gespeichert
Sven
Sr. Member
****
Offline Offline

Beiträge: 330


WWW
« Antworten #1 am: 07.01.2003, 17:00:22 »

Es geht auch mit Delphi. Habe da ein Beispiel was ich dir morgen zukommenlassen kann. Wenn Du willst!? Man soll aber, wie ich hörte, die entsprechenden Treiber des LAN-Kartenherstellers verwenden und nicht die von M$.

Gruß Sven
Gespeichert



Linux: Mandrake 9.1, Kernel 2.4.21, XFree 4.3.0, KDE 3.1.4, Kylix 3 (patched)



Kylix Problem? Hier -] Deutsches Kylixforum werden Sie geholfen
Jailbird
Hero Member
*****
Offline Offline

Beiträge: 1866

34030132 jailbird_24@hotmail.com
WWW
« Antworten #2 am: 07.01.2003, 17:49:57 »

ja, ich hab mir mal eins geschrieben und zwar mit den indy udp-sockets. das ganze ist extrem einfach. such bei google mal nach

magic packet

dieses paket "weckt" dir den pc und besteht (soweit ich mich erinnere) aus 16x der empfängeradresse gefolgt vom absender und der checksum. ich such mal nach meinem source
Gespeichert

Jailbird
Hero Member
*****
Offline Offline

Beiträge: 1866

34030132 jailbird_24@hotmail.com
WWW
« Antworten #3 am: 08.01.2003, 22:42:26 »

leider hab ich den source nicht mehr gefunden...allerdings zeig ich dir schnell den aufbau des magic packet (ist ganz einfach)

DESTINATION SOURCE MISC. FF FF FF FF FF FF 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 MISC. CRC.

dies ist das gesamte ethernetpacket. für dich interessant ist der fette teil, da der rest das socket übernimmt (UDP-socket von indy z.b.). natürlich musst du schon ein ziel angeben ;)))

nun ja...

1. FF FF FF FF FF FF: 6x hintereinander kommt ein FF-Byte (Zeichen 255)
2. 11 22 33 44 55 66: die ziel-mac-adresse, kommt 16x hintereinander

diese sequenz versenden und das war's schon (an broadcast senden)
Gespeichert

Jailbird
Hero Member
*****
Offline Offline

Beiträge: 1866

34030132 jailbird_24@hotmail.com
WWW
« Antworten #4 am: 08.01.2003, 23:01:26 »

den broadcast natürlich anpassen und auch gucken, ob eine gültige mac-adresse eingegeben wurde

Code:
procedure TForm1.Button1Click(Sender: TObject);

var

  Data, temp: string;

  k, n: integer;

begin

  Data := '';

  for k := 0 to 5 do

  begin

    Data := Data + Chr(StrToInt('$FF'));

  end;

  temp := StringReplace(Edit1.Text, '-', '', [rfReplaceAll]);

  for k := 0 to 15 do

  begin

    temp := StringReplace(Edit1.Text, '-', '', [rfReplaceAll]);

    for n := 0 to 5 do

    begin

      Data := Data + Chr(StrToInt('$' + temp[1] + temp[2]));

      Delete(temp, 1, 2);

    end;

  end;

//  IdUDPClient1.Send('255.255.255.255', '80', Data);

end;
Gespeichert

Dienstbier
Full Member
***
Offline Offline

Beiträge: 159

47292856
« Antworten #5 am: 01.05.2003, 12:34:57 »

Hi!

Also wenn ich das versuche, raist mir die TidUPDClient-Kompo eine Exception:

Socket Error # 10013
Access denied.

Ich verwende exakt deinen QUelltext.

Was mache ich falsch?

MfG
Gespeichert

Arndt Dienstbier



Code:
[br][br]FreeAndNil(Windows);[br][br]
Jailbird
Hero Member
*****
Offline Offline

Beiträge: 1866

34030132 jailbird_24@hotmail.com
WWW
« Antworten #6 am: 01.05.2003, 14:28:29 »

ist das socket aktiv und broadcast auf true?
Gespeichert

Dienstbier
Full Member
***
Offline Offline

Beiträge: 159

47292856
« Antworten #7 am: 01.05.2003, 14:54:28 »

Hi Jailbird!

Da hat mich wohl die Ausprobieren-Unlust getroffen.
Broadcast war disabled.

Danke!
Gespeichert

Arndt Dienstbier



Code:
[br][br]FreeAndNil(Windows);[br][br]
Dienstbier
Full Member
***
Offline Offline

Beiträge: 159

47292856
« Antworten #8 am: 01.05.2003, 16:28:04 »

Hi!

Dennoch denkt der Ziel-COmputer nicht dara, hochzufahhren.
Mit einem anderen Programm (nicht von mir) funktioniert das WoL.
Die MAC-Address stimmt auch.

Woran liegts?

MfG
Gespeichert

Arndt Dienstbier



Code:
[br][br]FreeAndNil(Windows);[br][br]
Jailbird
Hero Member
*****
Offline Offline

Beiträge: 1866

34030132 jailbird_24@hotmail.com
WWW
« Antworten #9 am: 01.05.2003, 16:34:09 »

setz die broadcast-adresse testweise einmal auf dein segment

du hast z.b.
123.123.123.123
dann gibt's daraus
123.123.123.255

und setz das anstelle von 255.255.255.255 ein...
Gespeichert

Dienstbier
Full Member
***
Offline Offline

Beiträge: 159

47292856
« Antworten #10 am: 01.05.2003, 17:02:09 »

Hi!

Jippppie! Es funzt!
Gespeichert

Arndt Dienstbier



Code:
[br][br]FreeAndNil(Windows);[br][br]
mathias2
Newbie
*
Offline Offline

Beiträge: 9


301356748
WWW
« Antworten #11 am: 26.09.2004, 23:07:08 »

bin Delphi Neuling und hätte noch ein paar Fragen: (siehe Kommentare)

Code:

procedure TForm1.Button1Click(Sender: TObject);

var

  Data, temp: string;

  k, n: integer;

begin

  Data := '';

  for k := 0 to 5 do

  begin

    Data := Data + Chr(StrToInt('$FF'));  // 6x add a FF / 6x ein FF hinzufügen

//wozu ist das $ und was macht diese Zeile genau?

  end;

  temp := StringReplace(Edit1.Text, '-', '', [rfReplaceAll]);

  for k := 0 to 15 do

  begin

    temp := StringReplace(Edit1.Text, '-', '', [rfReplaceAll]);

    for n := 0 to 5 do

    begin

      // 16x add Target-Mac-Adress / 16x die Ziel-Macadresse hinzufügen

      Data := Data + Chr(StrToInt('$' + temp[1] + temp[2])); // was soll das mit dem Temp[x]?

      Delete(temp, 1, 2); //wofür ist das?

    end;

  end;

  

  //Example with TIdUDPClient of Indy

  //IdUDPClient1.Send('255.255.255.255', '80', Data);  // Send it / Verschick es

end;

Gespeichert

MfG Mathias
mathias2
Newbie
*
Offline Offline

Beiträge: 9


301356748
WWW
« Antworten #12 am: 26.09.2004, 23:15:19 »

Zitat
ist das socket aktiv und broadcast auf true?


wo muss man das einstellen?!
Habe im Moment genau de Quelltext, des Buttons, MAC Adresse wird über Edit Feld eingelesen, was muss noch rein?!
Gespeichert

MfG Mathias
Jailbird
Hero Member
*****
Offline Offline

Beiträge: 1866

34030132 jailbird_24@hotmail.com
WWW
« Antworten #13 am: 27.09.2004, 16:14:38 »

Code:

    Data := Data + Chr(StrToInt('$FF'));  // 6x add a FF / 6x ein FF hinzufügen

//wozu ist das $ und was macht diese Zeile genau?



eigentlich ist's ja kommentiert :)
damit beginne ich mein magic packet (FF FF FF FF FF FF). damit ich die hexadezimale schreibweise brauchen kann, nehm ich dieses $ vor das FF.
alternativ könnte man auch

Code:
Data := Data + #255;


vergebt mir, ich war noch jung, als ich das gecodet habe

Code:
temp := StringReplace(Edit1.Text, '-', '', [rfReplaceAll]);

hier wird die eingabe im editfeld verändert
von 12-34-56-12-34-56
auf 123456123456

Code:
Data := Data + Chr(StrToInt('$' + temp[1] + temp[2])); // was soll das mit dem Temp[x]?

Delete(temp, 1, 2); //wofür ist das?



temp ist ein string und mittels temp[1] greif ich auf das erste zeichen des strings zu. bei temp[2] auf das zweite (wer hätte das gedacht). so bau ich mir wie vorhin ein teil des packetchens zusammen.
das delete wird gebraucht (bei dem code), um die ersten 2 zeichen aus dem string zu löschen (die soeben verarbeiteten). heisst:
123456123456
wird zu
3456123456

Zitat
wo muss man das einstellen?!  
Habe im Moment genau de Quelltext, des Buttons, MAC Adresse wird über Edit Feld eingelesen, was muss noch rein?!

quelltext, button und mac-adresse über edit-feld ist schon mal gut.

jetzt pappst du noch einen TIdUDPClient von den Indy Internet Komponenten drauf. Da musst du auch das broad-casting einstellen :) Dann kannst du die letzte Zeile ent-kommentieren und das teil müsste hinhauen :)
Gespeichert

mathias2
Newbie
*
Offline Offline

Beiträge: 9


301356748
WWW
« Antworten #14 am: 27.09.2004, 22:11:43 »

Zitat von: "Jailbird"
Code:

    Data := Data + Chr(StrToInt('$FF'));  // 6x add a FF / 6x ein FF hinzufügen

//wozu ist das $ und was macht diese Zeile genau?



eigentlich ist's ja kommentiert :)
damit beginne ich mein magic packet (FF FF FF FF FF FF). damit ich die hexadezimale schreibweise brauchen kann, nehm ich dieses $ vor das FF.
alternativ könnte man auch

Code:
Data := Data + #255;


hmm aber bei mir kommt da n Fehler beim Ausführen, weil der mit dem $ nich zurecht kommt. Das $ kündigt ne HEX Zahl an?!

Code:
Data := Data + Chr(StrToInt('$' + temp[1] + temp[2])); // was soll das mit dem Temp[x]?

Delete(temp, 1, 2); //wofür ist das?



temp ist ein string und mittels temp[1] greif ich auf das erste zeichen des strings zu. bei temp[2] auf das zweite (wer hätte das gedacht). so bau ich mir wie vorhin ein teil des packetchens zusammen.
das delete wird gebraucht (bei dem code), um die ersten 2 zeichen aus dem string zu löschen (die soeben verarbeiteten). heisst:
123456123456
wird zu
3456123456
Höö? Wieso brauchst du das nur das 1. und 2.? Und wieso löscht du dann das 1. und 2.?

Sonst hätte ich keine Fragen :-D

PS: Delphi Neuling nunmal :-D, aber beherrsche PHP hervorragend ;)
Gespeichert

MfG Mathias
Jailbird
Hero Member
*****
Offline Offline

Beiträge: 1866

34030132 jailbird_24@hotmail.com
WWW
« Antworten #15 am: 28.09.2004, 09:51:59 »

Zitat
hmm aber bei mir kommt da n Fehler beim Ausführen, weil der mit dem $ nich zurecht kommt. Das $ kündigt ne HEX Zahl an?!

Was für eine Delphi-Version hast du? Ja, damit kannst du HEX-Zahlen schreiben. Und bei mir funzt das so auch prima ;)

Zitat
Höö? Wieso brauchst du das nur das 1. und 2.? Und wieso löscht du dann das 1. und 2.?

Wieso 2 Zeichen: 2 Zeichen hexadezimal ergeben zusammen 1 Byte. FF = 255; 00 = 0. Das ist genau 1 Byte. Drum immer 2 Zeichen :) Und die lösch ich vorne weg, weil ich die schon gebraucht habe. Würde ich heute auch anderst lösen. Ich glaub, ich muss den Tip mal neu schreiben :D
Gespeichert

mathias2
Newbie
*
Offline Offline

Beiträge: 9


301356748
WWW
« Antworten #16 am: 28.09.2004, 12:31:33 »

ich hab Version 7.0 Personal
Gespeichert

MfG Mathias
mathias2
Newbie
*
Offline Offline

Beiträge: 9


301356748
WWW
« Antworten #17 am: 28.09.2004, 12:40:30 »

habs grad nochmal mit der Enterprise getestet, geht auch nicht!
Gespeichert

MfG Mathias
Jailbird
Hero Member
*****
Offline Offline

Beiträge: 1866

34030132 jailbird_24@hotmail.com
WWW
« Antworten #18 am: 28.09.2004, 14:32:25 »

Habs mal auf meinem D7 getestet...Bei mir funktioniert das einwandfrei.

Zeig bitte mal deinen genauen Code. Danke
Gespeichert

mathias2
Newbie
*
Offline Offline

Beiträge: 9


301356748
WWW
« Antworten #19 am: 28.09.2004, 15:18:41 »

Code:
unit Unit1;



interface



uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, Mask, IdBaseComponent, IdComponent, IdUDPBase,

  IdUDPClient;



type

  Tmain = class(TForm)

    Label1: TLabel;

    edit_mac: TMaskEdit;

    button_tryit: TButton;

    IdUDPClient1: TIdUDPClient;

    procedure button_tryitClick(Sender: TObject);

  private

    { Private-Deklarationen }

  public

    { Public-Deklarationen }

  end;



var

  main: Tmain;



implementation



{$R *.dfm}

{

What's a Magic Packet?

Was ist ein Magic Packet?



DESTINATION SOURCE MISC. FF FF FF FF FF FF 11 22 33 44 55 66 11 22 33 44

55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44

55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44

55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44

55 66 11 22 33 44 55 66 11 22 33 44 55 66 MISC. CRC.



Note: Destination, Source, Misc and CRC are normally added by our Socket-Component

Beachte: Destination, Source, Mis und CRC werden normalerweise von deiner

Socket-Komponente hinzugefügt

}

procedure Tmain.button_tryitClick(Sender: TObject);

var data,temp: String;

    k,i: Integer;

begin

  data := '';

  for k := 0 to 5 do

  Begin

    Data := Data + Chr(StrToInt('$FF')); // 6x FF dazu

  End;

  temp := StringReplace(main.edit_mac.Text,'-','',[rfReplaceAll]);

  for k:= 0 to 15 do

  Begin

    //temp := StringReplace(main.edit_mac.Text,'-','',[rfReplaceAll]);

    for i := 0 to 5 do

    Begin

      // 16x Mac Addy

      Data := Data + Chr(StrToInt('$' + temp[1] + temp[2]));

      Delete(temp,1,2);

    End;

  End;



  // TIdUDPClient of Indy -> Verschick es

  //main.IdUDPClient1.Send('255.255.255.255', '80', Data);

  main.IdUDPClient1.Send('255.255.255.255',80,Data);



end;



end.

Gespeichert

MfG Mathias
Seiten: [1] 2 3 Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS