TServerSocket ile ip yasaklama mümkün mü?
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
TServerSocket ile ip yasaklama mümkün mü?
Merhaba arkadaşlar TClientSocket ile TServerSocket kullanıyorum diyelim adam saldırı yapsa 1 salisede bir login olup çıksa form'u dondurma şansı var acaba burada ben ayni saniyede 5 kere giriş yapanı kontrol edip ip bloke etme şansım varmı port dan yasaklama gibi bişi yardımcı olabılırseniz sevinirim.
Re: TServerSocket ile ip yasaklama mümkün mü?
Fikir olarak şunu diyebilirim . Server soket ile client soket birbirinle nasıl anlaşıyor,Bir clientten bağlantı isteği, server sokettin onwork kısmına yakalıyorsak. Buradan gelen bağlantı taleplerini kontrol edebilirsin.
Fikir olarak iki basit seçenek
1) Birinci yol madem bir saniyede bir bağlantı isteği saldırısı yapabileceğini düşünüyorsun ozaman sende server kısmında bağlantı isteklerini 5 saniyede bir kabul et.
2) İkinci yol : bu daha mantıklı. Server soketin onwork kısmından bağlanmak isteyenleri ve iplerini al ve bir döngüye sok. Eğer benzer ip görürsen bağlantıyı reddet.
Fikir olarak iki basit seçenek
1) Birinci yol madem bir saniyede bir bağlantı isteği saldırısı yapabileceğini düşünüyorsun ozaman sende server kısmında bağlantı isteklerini 5 saniyede bir kabul et.
2) İkinci yol : bu daha mantıklı. Server soketin onwork kısmından bağlanmak isteyenleri ve iplerini al ve bir döngüye sok. Eğer benzer ip görürsen bağlantıyı reddet.
Re: TServerSocket ile ip yasaklama mümkün mü?
Hocam şimdi dediğin şeyi tam olarak anlayamadım google'da araştırdım buna benzer birşeyde bulamadım mesela 5 saniyede bir kabul et demişsin bu nasıl olacak bir örnek verirmisin ve onwork kısmına baglanmak ısteyenleri ip leri al bir döngüye sok demişsin eğer 1 internet kafeden 10 kişi giriorsa örnek verelim nasıl olucak herkezin bağlantı reddedilir?
Re: TServerSocket ile ip yasaklama mümkün mü?
Server sokete bağlanan client in ipsini alabiliyorsunuz herhalde, mesela 10.0.0.10 numaralı IP saat : 15:10:20 de bağlandı diyelim, bağlandığında bunu bir yere kaydedin, daha sonra 10.0.0.10 numaralı IP tekrar bağlanmak istedi mesela, kaydettiğiniz önceki kayıtlarda bu IP yı arayın varsa kayıttaki saati 5 sn ileri alın, şimdiki saat ile karşılaştırın, eğer kayıttaki saat şu anki saatten daha büyükse bilinki daha 5 sn geçmemiş ve client e sen bağlanamazsın deyin, yok eğer geçmişse bağlanabilirsin deyin olsun bitsin.
Re: TServerSocket ile ip yasaklama mümkün mü?
Server soketin onconnect kısmına aşağıdaki gibi yazarsan , bağlanan bilgisayarın ip sini ve bilgisayar adını Listboxa eklemiş olursun. Bundan sonra tek yapman gereken listbox içindekileri bir döngüye alıp benzer kayıt varmı diye bakmak. Varsa bağlantısını reddet.
İlk yapman gereken misal incele diye bir fonksiyon oluştur bu fonksiyon şu işi yapsın. Gelen bağlantılar içinde aynı bilgisayar adı ve ip numarasından kaç tane var ona baksın. 1 den fazla ise sana bilgi versin.
İncele fonksiyonumuz
Fonksiyonumuz hazır, şimdi gelelim kullanmaya. Server soketin özelliklerindeki onconnect kısmında fonksiyonumuzu çağırıyoruz.
Ben örnek olsun diye showmessage yaptım sen orada bağlantıyı kes diyeceksin. Dilersen bu onconnect kısmına yazdığımız if incele kısmını da direk fonksiyon içine yaz ve fonksiyonu prosedür haline çevirip işi tek kalemde de hallet o da sana kalmış
)
Sana örneği ekte gönderiyorum. Kolay anlaşılsın diye ben Listboxta yaptım sen istersen listbox kullanmayıp TStringlist veya başka bir değişken tanımlayarak yapabilirsin oda sana kalmış. Log tutmak istersen indy bileşenlerinde idlog vardı sanırım dilersen onuda kullanabilirsin. Kolay gelsin.
Örnek Dosya burada http://www.dosya.tc/server/pbm5x0/ornek ... i.rar.html
Kod: Tümünü seç
ListBox1.Items.Add(athread.Connection.Socket.Binding.PeerIP+' numarası ile '+ (athread.Connection.Socket.LocalName)+' bilgisayarı baglandı ');
İncele fonksiyonumuz
Kod: Tümünü seç
function incele(Gelen:string) :boolean;
var
lisboxtaki_satir, sayi :integer;
begin
Form1.ListBox1.Items.Add(Gelen); // gelen bağlantının bilgilerini listboxa ekle
sayi:=0;
for lisboxtaki_satir := 0 to Form1.Listbox1.items.Count -1 do begin //Listboxın ilk kaydından son kaydına kadar yap
if Pos(Gelen,Form1.Listbox1.items.Strings[lisboxtaki_satir])>0 then Inc(sayi); // Gelen bilgiyi listboxta ara varsa sayi değişkenini bir arttır
end;
if sayi>1 then Result:=true else Result:=false; // Eğer sayi birden büyükse fonksiyonın çıktısı true değilse false olsun
end;
Kod: Tümünü seç
procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
begin
if incele(athread.Connection.Socket.Binding.PeerIP+' numarası ile '+ (athread.Connection.Socket.LocalName)+' bilgisayarı baglandı ') = true then
ShowMessage('bu bağlantıdan birden fazla var') ;
/// işte sen burada show mesaj yerine bağlantıyı kes diyeceksin.
end;

Sana örneği ekte gönderiyorum. Kolay anlaşılsın diye ben Listboxta yaptım sen istersen listbox kullanmayıp TStringlist veya başka bir değişken tanımlayarak yapabilirsin oda sana kalmış. Log tutmak istersen indy bileşenlerinde idlog vardı sanırım dilersen onuda kullanabilirsin. Kolay gelsin.
Örnek Dosya burada http://www.dosya.tc/server/pbm5x0/ornek ... i.rar.html
En son Lord_Ares tarafından 28 Nis 2015 11:12 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Re: TServerSocket ile ip yasaklama mümkün mü?
Hocam yardımınız için çok teşekkür ederim konu açılmışken diyelim adam 100000 kere connect olunca biz burada disconnect edince kasma veya lag gibi durum olur mu? Hocam dosyalar eksik koymuşsunuz düzeltirseniz sevinirim unit dosyaları eksık.
Birde bir sorunum daha var connect olanların tümünü TListWiew'e kaydediyorum 1'ci caption kısmı handle numarası girenlerin SubItems[0] olan yerde pc adi yapiyorum örnek vereyim for ile bunun içinde arama yapıp disconnect de TListWiew den sildirtmek istiyorum ama bir türlü beceremedim yardımcı olurmusunuz?
Birde bir sorunum daha var connect olanların tümünü TListWiew'e kaydediyorum 1'ci caption kısmı handle numarası girenlerin SubItems[0] olan yerde pc adi yapiyorum örnek vereyim for ile bunun içinde arama yapıp disconnect de TListWiew den sildirtmek istiyorum ama bir türlü beceremedim yardımcı olurmusunuz?
Re: TServerSocket ile ip yasaklama mümkün mü?
Örneği düzelttip ekledim üstteki gönderimde paylaştım yine.
Dediğiniz kadar connect olamayacak çünkü siz zaten clientin bağlanma aşamasında bu kontrolu yapıyorsunuz onconnect kısmında kodu yazdığınız için bağlanmaya başladığı anda siz kontrol edip sen daha önce bağlanmıştın diyoruz ve bağlantıyı red ediyoruz. Orada listboxa almamız sanırım kafanızı karıştırdı. O yüzden şöyle açıklayayım.
Listboxta olan ipler size bağlanmış olan ipler. Mesela 10 tane farklı pc bağlandı diyelim. Bizde bağlı olanların listesini Listboxta tutuyoruz. Yeni bir bağlantı geldiği anda ( yani onconnect kısmı ) diyoruz ki gelen kişinin ip ve adını al bize bağlanmış olanlarda ara daha önce bağlandıysa bu kişi reddet.
Dediğiniz kadar connect olamayacak çünkü siz zaten clientin bağlanma aşamasında bu kontrolu yapıyorsunuz onconnect kısmında kodu yazdığınız için bağlanmaya başladığı anda siz kontrol edip sen daha önce bağlanmıştın diyoruz ve bağlantıyı red ediyoruz. Orada listboxa almamız sanırım kafanızı karıştırdı. O yüzden şöyle açıklayayım.
Listboxta olan ipler size bağlanmış olan ipler. Mesela 10 tane farklı pc bağlandı diyelim. Bizde bağlı olanların listesini Listboxta tutuyoruz. Yeni bir bağlantı geldiği anda ( yani onconnect kısmı ) diyoruz ki gelen kişinin ip ve adını al bize bağlanmış olanlarda ara daha önce bağlandıysa bu kişi reddet.
Re: TServerSocket ile ip yasaklama mümkün mü?
Hocam şimdi anlamadım burada sizin yaptığınız olay sorun çıkarıyor bakın bağlanıyorum sora disconnect oluyorum 10 dk sora girmeye çalışınca siz bağlanmışsınız diyor yani sistem böyle olmadı bunu zaman kontrolu nasıl yaparız 10 dakika içinde en fazla 10 kere baglansın die yani 10 kereden fazla baglanırsa 10 dk engel yesin gibi birşey mantık üretemedim yardımcı olursanız sevinirim.
Re: TServerSocket ile ip yasaklama mümkün mü?
Demesi çok normal çünkü siz şunu yapıyorsunuz. Clienta bağlantıyı kes diyorsunuz sonra tekrar bağlan diyorsunuz. Dolayısı ile serverdaki listbox temizlenmiyor. Bu yüzden ikinci defa bağlanmaya kalktığınızda o uyarıyı alıyorsunuz. Serverıda durdurup başlatırsanız o uyarıyı almayacağınızı göreceksiniz. Paylaştığım örneğin amacını unutmayın.. !!! Örneğin amacı size gelen bağlantı ip ve bilgisayar adını alıp listenizde varmı diye karşılaştırmak. Yani
Örneği kullanım şekli :
1) Server exeyi çalıştırın.
2) Client exe den iki tane çalıştırın ve sonra her birinde sırayla bağlan tuşuna tıklayın.
Saygılarımla iyi çalışmalar
demektense ben kullanırken hatalımıyım diye düşünmelisiniz. O uyarıyı almak istemiyorsanız Server kısmının onconnet kısmına dersiniz ki bağlamış bir client yoksa listboxı temizle. Size fonksiyonu ve nasıl kullanacağınızı gösteren bir örnek sundum. İşinizi yaramıyorsa kullanmaya bilir başka tercihler arama yoluna gidebilirsiniz.yani sistem böyle olmadı
Örneği kullanım şekli :
1) Server exeyi çalıştırın.
2) Client exe den iki tane çalıştırın ve sonra her birinde sırayla bağlan tuşuna tıklayın.
Saygılarımla iyi çalışmalar
Re: TServerSocket ile ip yasaklama mümkün mü?
Yok hocam onu demek istemedim ben bu programı açıcam diyelim 1 ay açık kalıcak vps de yani mantık üretiyorum ve 10 dk içinden 10 dan fazla bağlanırsa 10 dk engel yemesini istiyorum bunu tarih ve saat alıp her baglanan handleyi nasıl kaydederim yani var kısmında illaki handle numarası koymam gerekiyor ama oda mümkün degil listbox kullansam 10 dk giriş süresi doldumu sildirmem gerekıor onu anlatmak istedim.
Hocam şimdi burada şöyle birşey yaptım şuanki ilk giren ip alıp diyelim 1 den 9 girişe kadar kaydettiriyorum tarih ay gun ve saat dakika olarak buraya kadar tamam 9 dan sora tekrar 1 e dönüyor ve kalıyor diyelim birde bunun yanına ip adresi kontrolü eklemek istiyorum + 10 dakika geçtikten sora adam tekrar girebilsin demek istiyorum o kısımları bir türlü beceremedim yardımcı olursanız sevinirim.
Kod: Tümünü seç
a:= (a+1);
if (inttostr(a) = '1') then begin q:= FormatDateTime('yymmddhhnn', Now); end;
if (inttostr(a) = '9') then begin w:= FormatDateTime('yymmddhhnn', Now); end;
c:=(integer(FormatDateTime('yymmddhhnn', Now))); // şuanki zaman.
c:=integer(c)-integer(w); // şuanki zaman ile 9cuyu çıkart.
if (q = w) then begin Log.Lines.Add('Saldiri yapiyorlar.'); a:=0; exit; end;
Re: TServerSocket ile ip yasaklama mümkün mü?
Şöyle bir mantıkla ilerleye bilirsin.
1)Onconnect kısmında bağlanan kişinin özelliklerini zaten alıyoruz. Bunları bir ini dosyasına kaydet.
2)10 dakikalık süre içerisinde ,yeni bir bağlanma isteği geldiğinde, bağlanmak isteyen kişinin bilgilerini al ve ini dosyasındakiler ile karşılaştır. Bağlanmak isteyen kişi , kayıt tuttuğun bu ini dosyasında varmı bak varsa bağlantı kurduğu son iki bağlantısının sürelerini karşılaştır. Aralarında ki süre fazlaysa birşey yapma az ise gelen bağlantıyı reddet.
3)ilk on dakikalık süre dolduğunda kayıt tuttuğun ini dosyasındaki eski kayıtları boşalt yeni 10 dakikalık dilimdekileri kaydetmeye başla
Kolay gelsin
1)Onconnect kısmında bağlanan kişinin özelliklerini zaten alıyoruz. Bunları bir ini dosyasına kaydet.
2)10 dakikalık süre içerisinde ,yeni bir bağlanma isteği geldiğinde, bağlanmak isteyen kişinin bilgilerini al ve ini dosyasındakiler ile karşılaştır. Bağlanmak isteyen kişi , kayıt tuttuğun bu ini dosyasında varmı bak varsa bağlantı kurduğu son iki bağlantısının sürelerini karşılaştır. Aralarında ki süre fazlaysa birşey yapma az ise gelen bağlantıyı reddet.
3)ilk on dakikalık süre dolduğunda kayıt tuttuğun ini dosyasındaki eski kayıtları boşalt yeni 10 dakikalık dilimdekileri kaydetmeye başla
Kolay gelsin