UDP ile ağdaki kapalı durumdaki bilgisayarı Açma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Misafir

UDP ile ağdaki kapalı durumdaki bilgisayarı Açma

Mesaj gönderen Misafir »

Kod: Tümünü seç

UDP ile ağdaki kapalı durumdaki bilgisayarı wake online özelliği ile çalıştırmaya başlamak
{
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 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
  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]));
      Delete(temp, 1, 2);
    end;
  end;
  // DİKKAT!!! Edit1 kutusunda Açılacak bilgisayarın MAC adresi olması gerekiyor
  //MAC adresini öğrenmek için arama yap kısmında "MAC adresinin alinmasi" yazın
  // örnek karşınıza gelecektir...
  // Elde edilen paket UDP bileşeni ile tüm ağa gönderilir.
  // Paketi bir anahtar etherneti de bir kilit olarak düşünün
  // uygun paket uygun kiliti açıyor....
  // Çalışması için Wake online özelliğinin bilgisayarınızın biosundan açılması gerekir...
  // internet cafelerde oldukça kullanışlı olabilir....
  //Example with TIdUDPClient of Indy
  //IdUDPClient1.Send('255.255.255.255', '80', Data);  // Send it / Verschick es
end;
Arkadaşlar bu Kod sayasinde ağdaki kapalı bilgisayarı açabiliyormuşun fakat ben çalıştıramadım en sondaki kod
IdUDPClient1.Send('255.255.255.255', '80', Data); // Send it / bu kod hata veriyor hatanın sebebi nedir acaba yarımdımcı olurmunuz bu hatayı nasıl gidercez sadece bu kod hata veriyor bunu çıkarınca hata verimor ???
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

UDP nedir. Ne işe yarar arkadaşlar. :oops:

Soruna da gelince IP numarası yanlış gibime geliyor. 255. ile başlayan numaralar alt ağ maskesi olmalı.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Mesaj gönderen ASE »

Eğer onboard ethernet kartı kullanıyorsanız problem çıkmıyor ancak harici ethernet kartlarında wake on lan kablosunun takılı oması lazım. Ayrıca bilgisayraların bioslarından wake on lan özellğlinide açmanız lazım
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Mesaj gönderen ASE »

Ewet gözümden kaçmış bu arad husonet ben cavep yazarken benden önce davranmış. Husonet haklı ip adresi yanlış açacağın bilgisayarın mac adresinide bilmen gerekiyor aynı anda bütün bilgisayarlara sinyal gönderen bir kod bu ama sadece uygun mac adresli bilgisayarı açar. Kolay gelsin.
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7605
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

husonet yazdı:UDP nedir. Ne işe yarar arkadaşlar. :oops:
bir iletişim protokolü. UDP : User Datagram Protocol.
The Internet has two main transport protocols: UDP and TCP. UDP is a connectionless protocol that is mainly a wrapper for IP packets with the additional feature of multiplexing and demultiplexing multiple processes using a single IP address. UDP can be used for client-server interactions, for example, using RPC. It can also be used for building real-time protocols such as RTP.
Kolay gelsin.
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Mesaj gönderen ASE »

ben işi biraz daha uzatayın bari buradaki yazılara başka bir siteden alıntı. Zamanında ben de bu işle uğraştım ve problem çıkmıyor çalışıyor....


Wake on LAn nedir? Wake on Lan (wol) adından da anlaşılacağı gibi bir PC'yi network üzerinden açmak için data packetinin göderilmesidir.

Daha da açarsak kısaca şöyel denebilir. Bir networkünüz var ve makinalrı gece açıp bişiler yüklemek istiyosunuz ki sabah tüm kullanıcılarda güncel yazılımlar olsun. mesela antivirüs updateleri gibi...

İşte bu sebeple herhangi bir PC'ye gönderilen özel bir data paketi sayesinde makinaları açabilirsiniz. Yükleme isi ise özel bir tool ile yapılabilir tabiki... Şimdi teknik detaylaroına bakalım..

Bir PC'yiuzaktan açabilmek için öncelikle o PC de bir ethernet kartı olmalı ve networke bağlı olması gerekmektedir. Bundan sonra ise O ethernet kartının WoL özelliğinin olması ve biostan enable hale getirilmiş olması gerekmektedir. Ethernet Kartı eğerki onboard değil ise 3 pinli konnektörünün anakarta bağlı olması da gerekmektedir. Tümleşik karlarda buna zaten gerek olmamaması da normaldir

Neyse buraya kadar donanımsal kısımdı. Şimdi ise wol packetinden bahsedelim. Öncellikler wakeonlan paketi UDP pakettir. Yani böyle bir paketi kolaylıkla kendinizde oluşturabilirsiniz. Elinizde sadece UDP komponenti olması yeterli. şimdi de paketin içinden bahsedelim.
Bu paket çok basit ve toplam 102 byte'lıktır.
format ise şöyledir.

ilk 6 byte "FF" leden oluşur geri kalan ise açılacak bilgisayarın MAC adresinin 16 kez tekrarlanması ile oluşur.
MAC adresimiz 11h 22h 33h 44h 55h 66h olsun. paket şöyle olur.

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

işteee yukardaki paketi bir wake up paketidir.
pekii bu paketi nereye yollayacağız ve nasıl??

Yukarıdaki paketi "broadcast" yada "directed-broadcast" olarak yollarsanız orada bulunan 11 22 33 44 55 66 mac adresine sahip makina açılır...

Şimdi broadcast ne demek? gidecek paketi ip adresi olarak 255.255.255.255 e yollamak demek bu paketin broadcast olduğu anlamına gelir. yani bu paket, paketin yolladnığı segmentteki her yere gider fakata routerdna geçemez ve orda kalır. yani başka segmentteki makinayı açamazsınız..

Bu işi aşmak için directed broadcast kulllanılarbilir. directed broadcast kısaca şöle denebilir.
iki network var : 192.168.0.0/255.255.255.0 ve 192.168.1.0/255.255.255.0
şimdi bu 192.168.0.0 networkündeki makinanın 192.168.1.0 daki bir makinayı açması için 255.255.255.255 paketi göndermesi faydasızdır.
Bu sebeple istenen networkteki makinaya o networke ait broadcast adresi ile yollamak gerek.

yaniii... 192.168.0.255 veya 192.168.1.255 adreslerini kullanarak bu paketi göndermek gerekir.

fazla karışık ise anlamanız için size delphi sourcelarını da yazayım..

--------------------------------------------------------------------------------
burada da delphi de yazılmış bazı kodlar var.
bu iş için forma 4 tane label, 4 tane edit box, 1 status bar, 1 bitbtn ve 1 tane da indy UDP client koymanız gerek. )


1nci edit box MAC adresi
2nci edit box tahmini makinanın ip adresini
3ncü edit box subnet maskını
4ncü remottaki gidilecek ise port numarası.

arkadaşlar bu işlemin çalışması için ya routerlarda interfacelere
ip directed broadcast yada ip forward-protocol udp [port number] komutlarının girtilmesi gerek. Komutlar cisco ve nortellerde hemen hemen aynı..

Kod: Tümünü seç

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, NMUDP, IdBaseComponent, IdComponent, IdUDPBase,
IdUDPClient, Buttons, ComCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
UDP1: TIdUDPClient;
BitBtn1: TBitBtn;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
Edit4: TEdit;
StatusBar1: TStatusBar;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

//****************************************************
////////HEX TO INT/////////////////
Function hexToInt(const hexStr: string): longint;
var
iNdx: integer;
cTmp: Char;
begin
Result := 0;
for iNdx := 1 to Length(hexStr) do
begin
cTmp := hexStr[iNdx];
case cTmp of
'0'..'9': Result := 16 * Result + (Ord(cTmp) - $30);
'A'..'F': Result := 16 * Result + (Ord(cTmp) - $37);
'a'..'f': Result := 16 * Result + (Ord(cTmp) - $57);
else
raise EConvertError.Create('Geçersiz karakter');
end;
end;
end;

////////////////WAKE UP FUNC////////////////////
procedure WakeUPComputer(ip,tmpst: string);
var Cpt, Cpt1: Byte;
tcnt:integer;
tswake1 :string;
tiwake : integer;
stwake : string;
buff1 : array [1..102] of byte;
Buff:Array[1..6] Of Byte;
begin
form1.StatusBar1.SimpleText:='WOL is sent to '+ip;
tcnt:=length(tmpst);
for tiwake:=1 to tcnt do
if (tiwake/2) <> trunc(tiwake/2) then
begin
tswake1:=tmpst[tiwake]+tmpst[tiwake+1];
buff[trunc(tiwake/2)+1]:=(hextoint(tswake1));
end;
Buff1[1] := $FF;
Buff1[2] := $FF;
Buff1[3] := $FF;
Buff1[4] := $FF;
Buff1[5] := $FF;
Buff1[6] := $FF;
for Cpt1 := 1 to 16 do
for Cpt := 1 to 6 do
Buff1[7 + (Cpt1 - 1) * 6 + (Cpt - 1)] := Buff[Cpt];
form1.udp1.ReceiveTimeout:=100;
setlength(stwake,102);
for cpt:=1 to 102 do stwake[cpt]:=chr(buff1[cpt]);
form1.udp1.Send(ip,sizeof(stwake),stwake);
end;

////////////////broadcast adrr func////////////////////
function calcbroad(ip,sub:string):string;
var S1,S2,S3,S4:INTEGER;
I1,I2,I3,I4:INTEGER;
begin
S1:=255-STRTOINT(COPY(SUB,1,POS('.',sub)-1));
DELETE(SUB,1,POS('.',sub));
S2:=255-STRTOINT(COPY(SUB,1,POS('.',sub)-1));
DELETE(SUB,1,POS('.',sub));
S3:=255-STRTOINT(COPY(SUB,1,POS('.',sub)-1));
DELETE(SUB,1,POS('.',sub));
S4:=255-STRTOINT(SUB);

I1:=STRTOINT(COPY(IP,1,POS('.',ip)-1));
DELETE(IP,1,POS('.',ip));
I2:=STRTOINT(COPY(IP,1,POS('.',ip)-1));
DELETE(IP,1,POS('.',ip));
I3:=STRTOINT(COPY(IP,1,POS('.',ip)-1));
DELETE(IP,1,POS('.',ip));
I4:=STRTOINT(IP);
calcbroad:=inttostr(i1 or s1)+'.'+inttostr(i2 or s2)+'.'+inttostr(i3 or s3)+'.'+inttostr(i4 or s4);
end;

///////////////////////////////////////////////////
procedure TForm1.Button1Click(Sender: TObject);
var C,broad,MAC,ip,sub:string;
i:integer;
S1,S2,S3,S4:INTEGER;
I1,I2,I3,I4:INTEGER;
begin
MAC:=edit1.Text;
broad:=calcbroad(edit2.Text,edit3.Text) ;
udp1.active:=false;
udp1.Port:=strtoint(edit4.Text);
udp1.Active:=true;
//showmessage(broad+':'+mac);
if length(MAC)=12 then wakeupcomputer(broad,MAC) ELSE SHOWMESSAGE('ERROR ON MAC');
udp1.Active:=false;
end;


end.
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Hocam Teşekkür Ederim.

Anladığım kadarıyla daha doğrusu sözlük ingilizcesiyle TCP protokolunun alternatifi.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Misafir

Mesaj gönderen Misafir »

3ncü edit box subnet maskını //Bu nedemek
Ayrıca Benim veriğim koddaki sorunu sormuşdum ben , ben int cafede çalışıyorum ayrıca bilgisayar yanımda wake online özelliği falan herşey tamam ip adresini mac adresinide biliyorum bilgisayarın
//IdUDPClient1.Send('255.255.255.255', '80', Data); bu kodun neresinde yanlışlık var 255.255.255.255 olan yer ip adresimi vs. vs açıklarmınız yanımdaki bilgisayarın ip adresi 10.0.0.3 mac adresi ise
00-0C-76-38-8C-D2 şimdi benim ne yapmam lazım ?? Ethenet kartı ana kart ile birleiş zaten harici değil
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Merhaba

IdUDPClient1.Send('255.255.255.255', '80', Data) bu kodun 255 ile başlayan kısmını kapatmak istediğin makinada Winipcfg yazarak makinanın ağdaki ip adresini al (win98 için geçerli) ve yaz mesala şu şekilde bir ip olmalı 192.168.0.1 gibi...

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Misafir

Mesaj gönderen Misafir »

ip adresini alıyorum yazıyorum ama olmuyor

Kod: Tümünü seç


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
  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]));
      Delete(temp, 1, 2);
    end;
  end;
  IdUDPClient1.Send('10.0.0.3', '80', Data); {Bu kısm hata veriyor burayı silince ama çalışıyor ama bunu silersemde kod bi işe ayramaz yani ip adresini yazsamda gine hata veriyor  }
end;
Yardımmm
Misafir

Mesaj gönderen Misafir »

Resim

Resim Burda Hata veriyor
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

hocam ikinci parametre string degil bi kere
Integer diyor tanımında
yani ('10.0.0.3',80,Data) seklinde kullanacaksın
ÜŞENME,ERTELEME,VAZGEÇME
Misafir

Mesaj gönderen Misafir »

3ncü edit box subnet maskını // Bu nedemek ???
Armani
Üye
Mesajlar: 104
Kayıt: 18 Mar 2004 05:32
Konum: Ankara

Mesaj gönderen Armani »

zemin birde bu şekilde deneyebilirmisin

Kod: Tümünü seç

IdUDPClient1.Send('10.0.0.3:80', Data); 
Armani
Üye
Mesajlar: 104
Kayıt: 18 Mar 2004 05:32
Konum: Ankara

Mesaj gönderen Armani »

pardon
bu şekilde dene
benim networkde hareketlenme oldu

Kod: Tümünü seç

IdUDPClient1.Send('10.0.0.1',80,Data);
deneme çansım olmadığı için tam sonuç alamadım
Cevapla