Radius Server Hakkında

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
apex06
Üye
Mesajlar: 58
Kayıt: 19 Nis 2012 12:21

Radius Server Hakkında

Mesaj gönderen apex06 »

Arkadaşlar merhaba,

Radius'la ilgili bir çalışma yapmak istiyorum ama döküman sıkıntısı yaşadığım için fazla bir yol katedemedim.

Elimde Mikrotik RB333 bir cihaz var. Bu cihazın radius ayarlarını yapıp delphi XE4 tarafında UDPServer ile 1812 portunu dinleyerek cihazın gönderdiği hex verilerine ulaşabiliyorum. Gelen verinin uzunluğu değişiyor.

Resim

Gelen veriyi resimde gördüğümüz gibi

AVP: l=6 t=NAS-Port-Type(61): Wireless-802.11(19)
AVP: l=19 t=Calling-Station-Id(31): 12:34:56:A2
AVP: l=10 t=Called-Station-Id(30): hotspot1
AVP: l=7 t=NAS-Port-Id(87): wlan1
AVP: l=8 t=User-Name(1): APEX06
AVP: l=6 t=NAS-Port(5): 2152726534
AVP: l=10 t=Acct-Session-Id(44): 80500006
AVP: l=6 t=Framed-IP-Address(8): 10.0.1.247
AVP: l=12 t=Vendor-Specific(26) v=MikroTik(14988)
AVP: l=18 t=CHAP-Challenge(60): 1ac84b06bdef36b96f2928d15236518a
AVP: l=19 t=CHAP-Password(3): 7f64ad7cbc4a1fa22f445c56f211e30827
AVP: l=6 t=Service-Type(6): Login(1)
AVP: l=30 t=Vendor-Specific(26) v=Wireless Broadband Alliance Ltd (previous was 'Wi-Fi Alliance')(14122)
AVP: l=8 t=NAS-Identifier(32): merkez
AVP: l=6 t=NAS-IP-Address(4): 192.168.1.100

gruplayarak verileri ayrıştırıp gerekli verileri cihaza tekrar göndermem gerekiyor. Tabi verileri alma işini tam olarak çözemediğim için gönderme işi ayrı bir serüven gibi geliyor bana.

Delphi tarafında yaptığım kısım;

Kod: Tümünü seç

procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
  const AData: TIdBytes; ABinding: TIdSocketHandle);
begin
Memo1.Text:=ToHex(AData, length(AData)); // gelen datayı hex olarak görebiliyorum
end;
bu konuda bilgisi olan arkadaşlar yardım edebilirlerse çok memnun olurum.
apex06
Üye
Mesajlar: 58
Kayıt: 19 Nis 2012 12:21

Re: Radius Server Hakkında

Mesaj gönderen apex06 »

Türkiye'de delphi tarafında bu işi başarmış kimse varmı acaba? Çünkü konu ile ilgili hiç kaynak bulamadım. Birtane pas dosyası buldum ama yorumlayamadığım için birşey yapamadım.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Radius Server Hakkında

Mesaj gönderen mrmarman »

apex06 yazdı:Türkiye'de delphi tarafında bu işi başarmış kimse varmı acaba? Çünkü konu ile ilgili hiç kaynak bulamadım. Birtane pas dosyası buldum ama yorumlayamadığım için birşey yapamadım.
- Meydan okuma mı ilan ediyorsunuz :lol: Kaynak bulamadım demek ki başarılmamıştır mantığı tümüyle afaki. Gerekli ücreti verin size bunu yapacak yazılımcı bulursunuz. 8)

- Baktım MikroTik'in forumunda zaten oldukça detaylı sorular var. Yani kaynak sorunu yok. Delphi cephesinde bunu yapanın adresi ise Indy paketi.

- Gelen veriyi siz mi parse ettiniz yoksa resmini gördüğümü projeden mi copy/paste yaptınız.

- Gelen BINARY olduğunu görüyorum. Bunun STRUCTURE'ı nedir, yayınlanmış mıdır yoksa Router'a özel midir ? Sürüm farklılığı bu Structure yapıyı değiştirir mi ? O zaman başında hangi sürüm olduğunu ve ona göre bir structure yapı deşifresi yapılacağı gibi parse işleminden öte birşey değil.

- Şimdi bu noktada kaynak olmanız için asıl size bir fırsat veriyoruz. :bravo: :lol:
Resim
Resim ....Resim
apex06
Üye
Mesajlar: 58
Kayıt: 19 Nis 2012 12:21

Re: Radius Server Hakkında

Mesaj gönderen apex06 »

mrmarman yazdı:
apex06 yazdı:Türkiye'de delphi tarafında bu işi başarmış kimse varmı acaba? Çünkü konu ile ilgili hiç kaynak bulamadım. Birtane pas dosyası buldum ama yorumlayamadığım için birşey yapamadım.
- Meydan okuma mı ilan ediyorsunuz :lol: Kaynak bulamadım demek ki başarılmamıştır mantığı tümüyle afaki. Gerekli ücreti verin size bunu yapacak yazılımcı bulursunuz. 8)

- Baktım MikroTik'in forumunda zaten oldukça detaylı sorular var. Yani kaynak sorunu yok. Delphi cephesinde bunu yapanın adresi ise Indy paketi.

- Gelen veriyi siz mi parse ettiniz yoksa resmini gördüğümü projeden mi copy/paste yaptınız.

- Gelen BINARY olduğunu görüyorum. Bunun STRUCTURE'ı nedir, yayınlanmış mıdır yoksa Router'a özel midir ? Sürüm farklılığı bu Structure yapıyı değiştirir mi ? O zaman başında hangi sürüm olduğunu ve ona göre bir structure yapı deşifresi yapılacağı gibi parse işleminden öte birşey değil.

- Şimdi bu noktada kaynak olmanız için asıl size bir fırsat veriyoruz. :bravo: :lol:

Estağfurullah olurmu öyle şey, hiç bir zaman öyle bir iddaamız olmadı :)
Haklısınız gerçekten başaramadığım için kaynak arayışına girdim ama daha önce böyle bir çalışma yapmadığım için tıkandım.
bu projeyi ticari yada satış kaygısı ile yapmadığım için ücretini vererek yaptırmayı düşünmedim.

indy udp server ile gelen veriyi ancak hex ile görebiliyorum.
resimde gördüğünüz veriyi WireShark ile aldım. Anladığım kadarıyla oda HEX verileri tiplere ayırmış.

gelen veri routera özeldir. Mesela elimde birde Cyberoam UTM cihazı var onun gönderdiği veri daha kısa.

mikrotik ile gelen veri

Kod: Tümünü seç

010700BF8459BD80FFECFDE12E7F1C361D6D42873D06000000131F1331323A33343A35363A41323A33393A45361E0A686F7473706F74315707776C616E3101084150455830360506808000002C0A383038303030303008060A0001F51A0C00003A8C0A060A0001F53C122E3D645A3A4F1BEC713BD1B5B3E4E07C031370535804693C9E3C9042C67CDBA4B64E7C0606000000011A1E0000372A0318687474703A2F2F31302E302E312E312F6C6F676F757420086D65726B657A0406C0A80164
İşte burda o yapıya parse işlemi yapılması lazım :) ama o hex verileri resimdeki gibi nasıl anlamlı hale getirebilim çözemedim :)

bu arada cevap yazdığınız için teşekkür ederim.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Radius Server Hakkında

Mesaj gönderen mrmarman »

Merhaba.

- Rica ederim sadece bir nazire idi... :)

Sana gelen veriyi çözümlemende kolaylık olsun diye bir fonksiyon hazırladım. Bu fonksiyonu takip eden değerleri anlamlandırdıkça bir Decoder fonksiyone evrilecek şekilde zamanla düzenleyebilirsiniz. Şöyle ki... Username = APEX06 ve önünde 08h diyorsa bunun uzunluk olduğunu biliyorsunuz. Bunun Tip başlığı 01h isede login Name olduğu biliyorsunuz. Böyle böyle Structure içinde konumuları not edin. size decoder fonksiyon hazır.

Kullanımı :

Kod: Tümünü seç

   Memo1.Lines.Text := RadiusCozumle( Edit1.Text );
Fonksiyon :

Kod: Tümünü seç

Function RadiusCozumle( strGelenVeri: String ): String;
Var
  strBlok, strIkili : String;
  c : Char;
begin
  strBlok := strGelenVeri;
  Result := '';
  while Length(strBlok) > 1 do
  begin
    strIkili := Copy(strBlok, 1, 2);
    System.Delete(strBlok, 1, 2);
    c := Char( StrToInt( '$' + strIkili) );
    if c in ['A'..'Z', 'a'..'z', '0', '1'..'9']
      then Result := Result + c
      else Result := Result + #13 + ' '+ strIkili + 'h ';
  end;
end;
Çıktısı da şöyle :

Kod: Tümünü seç

 01h 
 07h 
 00h 
 BFh 
 84h Y
 BDh 
 80h 
 FFh 
 ECh 
 FDh 
 E1h 
 2Eh 
 7Fh 
 1Ch 6
 1Dh mB
 87h 
 3Dh 
 06h 
 00h 
 00h 
 00h 
 13h 
 1Fh 
 13h 12
 3Ah 34
 3Ah 56
 3Ah A2
 3Ah 39
 3Ah E6
 1Eh 
 0Ah hotspot1W
 07h wlan1
 01h 
 08h APEX06
 05h 
 06h 
 80h 
 80h 
 00h 
 00h 
 2Ch 
 0Ah 80800000
 08h 
 06h 
 0Ah 
 00h 
 01h 
 F5h 
 1Ah 
 0Ch 
 00h 
 00h 
 3Ah 
 8Ch 
 0Ah 
 06h 
 0Ah 
 00h 
 01h 
 F5h 
 3Ch 
 12h 
 2Eh 
 3Dh dZ
 3Ah O
 1Bh 
 ECh q
 3Bh 
 D1h 
 B5h 
 B3h 
 E4h 
 E0h 
 7Ch 
 03h 
 13h pSX
 04h i
 3Ch 
 9Eh 
 3Ch 
 90h B
 C6h 
 7Ch 
 DBh 
 A4h 
 B6h N
 7Ch 
 06h 
 06h 
 00h 
 00h 
 00h 
 01h 
 1Ah 
 1Eh 
 00h 
 00h 7
 2Ah 
 03h 
 18h http
 3Ah 
 2Fh 
 2Fh 10
 2Eh 0
 2Eh 1
 2Eh 1
 2Fh logout
 20h 
 08h merkez
 04h 
 06h 
 C0h 
 A8h 
 01h d
- Wiki'de protokolün yapısı bu linkte verilmiş

Aşağıdaki ana omurga...
Resim

bu da ana omurga içindeki istediğiniz değerlerin olduğu sub yapı.
Resim

- Resimde gösterdiğiniz proje büyük şans. Deneme yanılma ile anlamlı hale getirebilirsiniz. Elimde benzeri bir cihaz olsaydı çözmek için yardımcı olurdum. Şimdi gelen veri içerisinden karşılaştırma yaparak anlamlandırmaya çalışın.

Kod: Tümünü seç

Code	Assignment
1	Access-Request
2	Access-Accept
3	Access-Reject
4	Accounting-Request
5	Accounting-Response
11	Access-Challenge
12	Status-Server (experimental)
13	Status-Client (experimental)
255	Reserved

Kod: Tümünü seç

AVP Type	Assignment
1	User-Name
2	User-Password
3	CHAP-Password
4	NAS-IP-Address
5	NAS-Port
6	Service-Type
7	Framed-Protocol
8	Framed-IP-Address
9	Framed-IP-Netmask
10	Framed-Routing
11	Filter-Id
12	Framed-MTU
13	Framed-Compression
14	Login-IP-Host
15	Login-Service
16	Login-TCP-Port
17	(unassigned)
18	Reply-Message
19	Callback-Number
20	Callback-Id
21	(unassigned)
22	Framed-Route
23	Framed-IPX-Network
24	State
25	Class
26	Vendor-Specific
27	Session-Timeout
28	Idle-Timeout
29	Termination-Action
30	Called-Station-Id
31	Calling-Station-Id
32	NAS-Identifier
33	Proxy-State
34	Login-LAT-Service
35	Login-LAT-Node
36	Login-LAT-Group
37	Framed-AppleTalk-Link
38	Framed-AppleTalk-Network
39	Framed-AppleTalk-Zone
40	Acct-Status-Type
41	Acct-Delay-Time
42	Acct-Input-Octets
43	Acct-Output-Octets
44	Acct-Session-Id
45	Acct-Authentic
46	Acct-Session-Time
47	Acct-Input-Packets
48	Acct-Output-Packets
49	Acct-Terminate-Cause
50	Acct-Multi-Session-Id
51	Acct-Link-Count
52-59	(reserved for accounting)
60	CHAP-Challenge
61	NAS-Port-Type
62	Port-Limit
63	Login-LAT-Port
Resim
Resim ....Resim
apex06
Üye
Mesajlar: 58
Kayıt: 19 Nis 2012 12:21

Re: Radius Server Hakkında

Mesaj gönderen apex06 »

mrmarman yazdı:Merhaba.

- Rica ederim sadece bir nazire idi... :)

Sana gelen veriyi çözümlemende kolaylık olsun diye bir fonksiyon hazırladım. Bu fonksiyonu takip eden değerleri anlamlandırdıkça bir Decoder fonksiyone evrilecek şekilde zamanla düzenleyebilirsiniz. Şöyle ki... Username = APEX06 ve önünde 08h diyorsa bunun uzunluk olduğunu biliyorsunuz. Bunun Tip başlığı 01h isede login Name olduğu biliyorsunuz. Böyle böyle Structure içinde konumuları not edin. size decoder fonksiyon hazır.
Muharrem bey gerçekten çok teşekkür ederim, aynı yerlerde dolaşıp duruyordum. Çok güzel bir başlangıç oldu benim için. Çalışmalarımın sonucunu mutlaka bildireceğim.
Ali IBRAHIM
Üye
Mesajlar: 4
Kayıt: 06 Kas 2016 12:07

Re: Radius Server Hakkında

Mesaj gönderen Ali IBRAHIM »

apex06 Hocam aynı konu ile bende ilgileniyorum sayılır. Acaba bir sonuca varabildiniz mi ?
Cevapla