Türkiye'nin En Eski Webmaster Forumu İyinet'e Hoşgeldiniz!

Cause IRC Güvenlik Botu

ReksNet

0
Onaylı Üye
Üye
Katılım
11 Temmuz 2005
Mesajlar
415
Açılan Konu
30
Tepki puanı
0
Türkiye'nin en iyi mIRC Coderi olarak gösterilen DefauLt un yazmış olduğu NoMercy botunun bir benzerini artık tüm irc serverlarına kiralıyoruz. Cause botu ile IRC'de güvenlikde bir devrim açıyoruz. Cause botu serverda admin oper olmasada tüm serverin güvenliğini sağlamaktadır. Şu anda Cause botunu Birçok büyük IRC serveri kullanmaktadır.

Ayrıntılı bilgi için: http://www.reksnet.com/ircsecurity.php
 

Raiden

0
Onaylı Üye
Üye
Katılım
13 Ocak 2005
Mesajlar
339
Açılan Konu
23
Tepki puanı
0
Ben bu hizmeti PHP ve mysql e (dogru duydunuz web uzerinden calistiracağınız php dosyası ile) bedavaya isteyenlere veriyorum. kiralamak saçma olmamış mı?
 

selim61

0
Onaylı Üye
Üye
Katılım
10 Mayıs 2006
Mesajlar
5,299
Açılan Konu
252
Tepki puanı
13
Konum
<?=selim61?>
Raiden' Alıntı:
Ben bu hizmeti PHP ve mysql e (dogru duydunuz web uzerinden calistiracağınız php dosyası ile) bedavaya isteyenlere veriyorum. kiralamak saçma olmamış mı?
taaa 5 ay önceki konu nerden buldun :D
 

DeviLLe

0
Onaylı Üye
Üye
Katılım
13 Kasım 2004
Mesajlar
594
Açılan Konu
35
Tepki puanı
0
olsun sonuçta birisi free yapıyor birisi $ alıyor. 5 ay bile geçse bence iyi yapmış yazmakla.
 

Die

0
Onaylı Üye
Üye
Katılım
27 Aralık 2005
Mesajlar
240
Açılan Konu
8
Tepki puanı
0
Raiden su yazdıgını paylasabilirmisin bizimle ?
 

Raiden

0
Onaylı Üye
Üye
Katılım
13 Ocak 2005
Mesajlar
339
Açılan Konu
23
Tepki puanı
0
tabiki

PHP:
<?
  //Caesar tarafından derlenmiştir.
 //msn: [email protected]
 //irc: irc.ttnet.net.tr
 //HunTeR e yardımlarından dolayı teşekkür ederiz.
  class CN_Bot
      {
    # Genel Tanımlamalar (Degerler CN_Bot methodu ıcınde verılmelı)
      var $localhost;  // Yerel Sunucu Adı
      var $remotehost; // Uzak Sunucu Adı (Baglanılacak sunucunun adı)
      var $port;       // Baglantı Noktası
      var $timeout;    // Baglantı Suresi (0 Sınırsız)
      var $channel;    // Kanal
      var $nick;       // Botun Nıckı
      var $closecode;  // Kapanma Kodu (kanala gırıldıgınde bot calısmayı durdurdur)
      var $logfile;    // Log dosyasının yolu ve adı

    # Baglantılar
      var $server;
      var $log;

    # Sınıf Cagrıldıgında Calıstırılacak Fonksıyon
      function CN_Bot()
         {
         define(n, "\n"); // Satır Sonu Karakterı

         $this->localhost  = 'adsluser-2866.adsl.ttnet.net.tr';
         $this->remotehost = 'irc.ttnet.net.tr';
         $this->port       = 6667;
         $this->timeout    = 0;
         $this->channel    = 'zurna';
         $this->nick       = 'PHPBot';
         $this->closecode  = 'byebye';
         $this->logfile    = 'log.txt';
         }

    # Baglantıları Kur..
      function Connect()
         {
         # Baglantı Suresını Ayarla
         set_time_limit($this->timeout);
         //set_time_limit(30);

         # Sunucu Baglantısı
         $this->server = fsockopen ($this->remotehost, $this->port, $hatano, $hatastr, $this->timeout) or
                         die('Sunucuya Bağlanamadı');

         # Log Dosyası Baglantısı
         $this->log    = fopen ($this->logfile, 'w+') or
                         die('Dosya Yaratılamadı');

         # Sırasıyla nıckı ve kullanıcı adını belırle, kanala gır ve ardından selam ver..
         fputs($this->server, 'NICK '.$this->nick.n);
         fputs($this->server, 'USER '.$this->nick.' '.$this->localhost.' '.$this->remotehost.' :'.$this->nick.n);
         fputs($this->server, 'IDENTIFY <şifre>'.n); //identify şifresi
         fputs($this->server, 'JOIN #'.$this->channel.n);
         fputs($this->server, 'PRIVMSG #'.$this->channel.' :PHPbot v1.0... loading...'.n);
         fputs($this->server, 'PRIVMSG #'.$this->channel.' :i am back'.n);
         return;
         }
         function op_ver($nick) {
         fputs($this->server, 'MODE #'.$this->channel.' +o $nick'.n);
         }


    # Baglantıları Kapat..
      function Disconnect($nick)
         {
         if ($nick=="Caesar") {
         fclose($this->server);
         fclose($this->log);
         exit;
         } else {
         fputs($this->server, 'PRIVMSG #'.$this->channel.' :yava$ ol yava$'.n);
         }
         return;
         }

    # Mesaj Gonderıldıgınde...
      function PrivMsg($nick,$cmd,$arg)
         {
         # Eger mesaj kanala gonderıldıyse bu mesajı log dosyasına ekle
         if($cmd[1] == '#'.$this->channel)
         fputs($this->log, '<'.date("H:i").' '.$nick.'> '.$arg.n);

         # Eger bır gorev mesajı gonderıldıyse
         if(preg_match("'(.*?)'U",$arg,$set))
            {
            switch($set[1])
               {

               case substr($set[1],0,5)=='selam': fputs($this->server, 'PRIVMSG #'.$this->channel.' :sanada selam '.$nick.' nasılsın?'.n); break;
               }
            }

         return;
         }

    # Gorev Mesajı Gonderıldıgınde..
      function TaskMsg($nick,$mesaj)
         {
         $ymesaj=substr($mesaj,6,10000);
         $link=ereg_replace(' ','+',$ymesaj);
         $alink=trim($link);
         $oku=fopen("http://localhost/irc/sql.php?query=$alink","r");
         $yaz=fgets($oku);
         fputs($this->server, 'PRIVMSG #'.$this->channel.' :'.$ymesaj.'-> '.$yaz.n);
         }

    # Botu Calıstır
      function Run()
         {
         $this->Connect();

         # Sonsuz dongumuzu baslatıyoruz
         while (!feof($this->server))
            {
            # Sunucudan gelen her datayı log dosyamıza aktarıyoruz (test amaclı)
            $data = fgets ($this->server,1024);
            //fputs($this->log,$data);

            # PING geldıgınde pong gonderıyoruz
            if(preg_match("'PING(.*?)'si", $data, $set))
            fputs($this->server,'PONG '.trim($set[1]).n);

            # Kodun kılıt noktası.. Sunucdan gelen datayı parcalara ayırıyoruz
            if(preg_match("':(.*?)!([^\s]*?)\s(.*?)\s:(.*?)'U", $data, $set))
               {
               $nick = trim($set[1]);
               $host = trim($set[2]);
               $cmd = explode(" ",trim($set[3]));
               $arg = trim($set[4]);

               # Ardından $cmd (yanı komuta) baglı olarak ılgılı methodu calıstırıyoruz
               switch($cmd[0])
                  {
                  case "PRIVMSG": $this->PrivMsg($nick,$cmd,$arg); break; // Mesaj Gonderıldıgınde
                  case "PART":  break; // Tamamlanmadı..
                  case "JOIN":  break; // Tamamlanmadı..
                  case "NICK":  break; // Tamamlanmadı..
                  case "QUIT":  break; // Tamamlanmadı..
                  }

               }
            }
         }
      }

 $CN_Bot = new CN_Bot();
 $CN_Bot->Run();
?>

en basit halidir. geliştirmeye aciktir.
 

DefauLt

0
Onaylı Üye
Üye
Katılım
16 Kasım 2004
Mesajlar
284
Açılan Konu
27
Tepki puanı
0
Konum
İstanbul
Raiden' Alıntı:
tabiki

PHP:
<?
  //Caesar tarafından derlenmiştir.
  //HunTeR e yardımlarından dolayı teşekkür ederiz.
  class CN_Bot
      {
    # Genel Tanımlamalar (Degerler CN_Bot methodu ıcınde verılmelı)
      var $localhost;  // Yerel Sunucu Adı
      var $remotehost; // Uzak Sunucu Adı (Baglanılacak sunucunun adı)
      var $port;       // Baglantı Noktası
      var $timeout;    // Baglantı Suresi (0 Sınırsız)
      var $channel;    // Kanal
      var $nick;       // Botun Nıckı
      var $closecode;  // Kapanma Kodu (kanala gırıldıgınde bot calısmayı durdurdur)
      var $logfile;    // Log dosyasının yolu ve adı

    # Baglantılar
      var $server;
      var $log;

    # Sınıf Cagrıldıgında Calıstırılacak Fonksıyon
      function CN_Bot()
         {
         define(n, "\n"); // Satır Sonu Karakterı

         $this->localhost  = 'adsluser-2866.adsl.ttnet.net.tr';
         $this->remotehost = 'irc.ttnet.net.tr';
         $this->port       = 6667;
         $this->timeout    = 0;
         $this->channel    = 'zurna';
         $this->nick       = 'PHPBot';
         $this->closecode  = 'byebye';
         $this->logfile    = 'log.txt';
         }

    # Baglantıları Kur..
      function Connect()
         {
         # Baglantı Suresını Ayarla
         set_time_limit($this->timeout);
         //set_time_limit(30);

         # Sunucu Baglantısı
         $this->server = fsockopen ($this->remotehost, $this->port, $hatano, $hatastr, $this->timeout) or
                         die('Sunucuya Bağlanamadı');

         # Log Dosyası Baglantısı
         $this->log    = fopen ($this->logfile, 'w+') or
                         die('Dosya Yaratılamadı');

         # Sırasıyla nıckı ve kullanıcı adını belırle, kanala gır ve ardından selam ver..
         fputs($this->server, 'NICK '.$this->nick.n);
         fputs($this->server, 'USER '.$this->nick.' '.$this->localhost.' '.$this->remotehost.' :'.$this->nick.n);
         fputs($this->server, 'IDENTIFY <şifre>'.n); //identify şifresi
         fputs($this->server, 'JOIN #'.$this->channel.n);
         fputs($this->server, 'PRIVMSG #'.$this->channel.' :PHPbot v1.0... loading...'.n);
         fputs($this->server, 'PRIVMSG #'.$this->channel.' :i am back'.n);
         return;
         }
         function op_ver($nick) {
         fputs($this->server, 'MODE #'.$this->channel.' +o $nick'.n);
         }


    # Baglantıları Kapat..
      function Disconnect($nick)
         {
         if ($nick=="Caesar") {
         fclose($this->server);
         fclose($this->log);
         exit;
         } else {
         fputs($this->server, 'PRIVMSG #'.$this->channel.' :yava$ ol yava$'.n);
         }
         return;
         }

    # Mesaj Gonderıldıgınde...
      function PrivMsg($nick,$cmd,$arg)
         {
         # Eger mesaj kanala gonderıldıyse bu mesajı log dosyasına ekle
         if($cmd[1] == '#'.$this->channel)
         fputs($this->log, '<'.date("H:i").' '.$nick.'> '.$arg.n);

         # Eger bır gorev mesajı gonderıldıyse
         if(preg_match("'(.*?)'U",$arg,$set))
            {
            switch($set[1])
               {

               case substr($set[1],0,5)=='selam': fputs($this->server, 'PRIVMSG #'.$this->channel.' :sanada selam '.$nick.' nasılsın?'.n); break;
               }
            }

         return;
         }

    # Gorev Mesajı Gonderıldıgınde..
      function TaskMsg($nick,$mesaj)
         {
         $ymesaj=substr($mesaj,6,10000);
         $link=ereg_replace(' ','+',$ymesaj);
         $alink=trim($link);
         $oku=fopen("http://localhost/irc/sql.php?query=$alink","r");
         $yaz=fgets($oku);
         fputs($this->server, 'PRIVMSG #'.$this->channel.' :'.$ymesaj.'-> '.$yaz.n);
         }

    # Botu Calıstır
      function Run()
         {
         $this->Connect();

         # Sonsuz dongumuzu baslatıyoruz
         while (!feof($this->server))
            {
            # Sunucudan gelen her datayı log dosyamıza aktarıyoruz (test amaclı)
            $data = fgets ($this->server,1024);
            //fputs($this->log,$data);

            # PING geldıgınde pong gonderıyoruz
            if(preg_match("'PING(.*?)'si", $data, $set))
            fputs($this->server,'PONG '.trim($set[1]).n);

            # Kodun kılıt noktası.. Sunucdan gelen datayı parcalara ayırıyoruz
            if(preg_match("':(.*?)!([^\s]*?)\s(.*?)\s:(.*?)'U", $data, $set))
               {
               $nick = trim($set[1]);
               $host = trim($set[2]);
               $cmd = explode(" ",trim($set[3]));
               $arg = trim($set[4]);

               # Ardından $cmd (yanı komuta) baglı olarak ılgılı methodu calıstırıyoruz
               switch($cmd[0])
                  {
                  case "PRIVMSG": $this->PrivMsg($nick,$cmd,$arg); break; // Mesaj Gonderıldıgınde
                  case "PART":  break; // Tamamlanmadı..
                  case "JOIN":  break; // Tamamlanmadı..
                  case "NICK":  break; // Tamamlanmadı..
                  case "QUIT":  break; // Tamamlanmadı..
                  }

               }
            }
         }
      }

 $CN_Bot = new CN_Bot();
 $CN_Bot->Run();
?>

en basit halidir. geliştirmeye aciktir.

Cause mu mu şimdi Yusuf :=)

Cause: 1451 satır, 61 KB, win32 paylaşımlı mirc script (dedicated: p4 3.0 gb ram, 100 mbit netdirekt)
 

Raiden

0
Onaylı Üye
Üye
Katılım
13 Ocak 2005
Mesajlar
339
Açılan Konu
23
Tepki puanı
0
default ben en basit versiyonu nu gosterdim kullanıcılar geliştirsin şeklinde yoksa Caesar'ın şu an TTNette kullandığı bot koruma dışında ayrıca bir yapay zeka taşıyor. sorulan sorulara cevap verebiliyor ayrıca sözlük sistemi olarakta kullanılıyor.

önemli olan bunu açık kaynak olarak dağıtılması senin gibi irc adresinizi verin şu kadar paraya sokuyum denmesi degil. ayrica php ile yapilmiş olmasida cabasi senin sunucun laga girerse botta laga girecek ama bunu heryerden calistirabilirsiniz hatta localhostunuza kurdugunuz bir apache bile yeterlidir.

gerekli yorumu zaten kullanıcılar yapacaktır.
 

Caesar

0
Onaylı Üye
Üye
Katılım
5 Haziran 2006
Mesajlar
1,894
Açılan Konu
83
Tepki puanı
7
evet TTNet üzerinde bu şekilde bir botum mevcut velakin hala geliştirmekteyim. görmek isteyenler direk özelime gelip belirtirlerse botu sunucuya sokmaktayim. Bu arada @Default 1451 satir kod ve 61kb boyutu olmasi 1 mysql eder mi sizce?

Unutmayalim bu bot php ile uretildiği için arkasında mysql gibi bir sql database sistemi bulunmaktadir. eggdrop u bunun yerine koymayin komik olur.
 

ReksNet

0
Onaylı Üye
Üye
Katılım
11 Temmuz 2005
Mesajlar
415
Açılan Konu
30
Tepki puanı
0
Raiden' Alıntı:
senin sunucun laga girerse botta laga girecek ama bunu heryerden calistirabilirsiniz
Bizim Windows sunucumuz ile Linux sunucularımız aynı datacenter üzerindedir.

Ceaser her güvenliğin bir geçiş noktası vardır. Senin yapabileceğin tüm güvenlikleri DefauLt geçebileceğini sende iyi biliyorsundur düşünebileceğin her güvenliği geçebilecek birisinin nasıl bir güvenlik botu yazabileceğini sen düşün.
 

Caesar

0
Onaylı Üye
Üye
Katılım
5 Haziran 2006
Mesajlar
1,894
Açılan Konu
83
Tepki puanı
7
ben defaultu tanimiyorum bile isminide ilk defa kullaniyorum ve görüyorum. buyrun ttnet teki güvenlik authcode duvarını geçsin. hatta bir açık size web kullanıcılarına authcode sorulmuyor. @Reksnet hep beraber izleyelim geçecek mi yoksa geçemeycek mi:)


edit: çok boş konusuyorsunuz karşinizdakini tanimadan bile neyse... en büyük sizsiniz.
edit 2: Ceaser değil Caesar dir.
 

DefauLt

0
Onaylı Üye
Üye
Katılım
16 Kasım 2004
Mesajlar
284
Açılan Konu
27
Tepki puanı
0
Konum
İstanbul
Caesar' Alıntı:
ben defaultu tanimiyorum bile isminide ilk defa kullaniyorum ve görüyorum. buyrun ttnet teki güvenlik authcode duvarını geçsin. hatta bir açık size web kullanıcılarına authcode sorulmuyor. @Reksnet hep beraber izleyelim geçecek mi yoksa geçemeycek mi:)


edit: çok boş konusuyorsunuz karşinizdakini tanimadan bile neyse... en büyük sizsiniz.
edit 2: Ceaser değil Caesar dir.

Güzel degisken fullname falan filan biz bunlarla yıllar evvel oynardık :) Çok basit bir sistem kurmuşsunuz, kıramazsınız diyorsunuz. O zaman sen de karşındakileri iyi tanı.

Sadece /ttnetw yazın... sunucuda auth code girilmiş halde olacaksınız. Zurna kanalına otomatik girişte benden hediye :=)

Kod:
alias ttnetw {
  sockclose ttnetw
  sockopen ttnetw irc.ttnet.net.tr 80
}
on *:sockopen:ttnetw: {
  var %s sockwrite -nt $sockname
  %s POST /sohbet/ HTTP/1.1
  %s Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */*
  %s Referer: http://irc.ttnet.net.tr/sohbet/
  %s Accept-Language: tr
  %s Content-Type: application/x-www-form-urlencoded
  %s Accept-Encoding: gzip, deflate
  %s User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; i-NavFourF)
  %s Host: irc.ttnet.net.tr
  %s Content-Length: 60
  %s Connection: Keep-Alive
  %s Cache-Control: no-cache
  %s
  %s nick=alsanagiris&sifre=&port=6667&kanal=%23zurna&B1=Ba%F0lan
}
on *:sockread:ttnetw: {
  sockread %s
  tokenize 32 %s
  if $1-2 == <param name="name" {
    set %fullname $gettok($3,2,34)
    sockclose $sockname
    ttnet
  }
}
alias ttnet {
  sockclose ttnet
  sockopen ttnet irc.ttnet.net.tr 6667
}
on *:sockopen:ttnet: {
  var %s sockwrite -nt $sockname
  %s NICK alsanagiris
  %s USER alsanagiris 0 0 : $+ %fullname
  %s
}
on *:sockread:ttnet: {
  sockread %s
  tokenize 32 %s
  if $4 == :VERSION {
    sockwrite -nt $sockname NOTICE IRC :VERSION PJIRC 2.2.1
    window -a @KAPAK
  }
  if TTNet IRC iyi sohbetler diler isin $1- {
    sockwrite -nt $sockname JOIN #zurna
  }
  aline @KAPAK %s
}


Bu arada, MySQL çok güvenli bir haltmış gibi konuşmuşsunuz. 3306 portuna bir kaç yüz socket açarak SQL bağlantılarını kilitleyebilirsiniz. Ben hash sistemlerimle SQL'den çok daha hızlı veri alışverişi sağlayabiliyorum.

Sidik yarışına dönmesin konu. Saygılar.
 

Caesar

0
Onaylı Üye
Üye
Katılım
5 Haziran 2006
Mesajlar
1,894
Açılan Konu
83
Tepki puanı
7
tebrikler:) seni tanımaya calisiyorum.
 

DefauLt

0
Onaylı Üye
Üye
Katılım
16 Kasım 2004
Mesajlar
284
Açılan Konu
27
Tepki puanı
0
Konum
İstanbul
Tesekkurler. Zamanla olacak seyler bunlar :)
 

Caesar

0
Onaylı Üye
Üye
Katılım
5 Haziran 2006
Mesajlar
1,894
Açılan Konu
83
Tepki puanı
7
default u tebrik ediyoruz:) başından bu işi yaparken sock acilacağını webe tahmin etmiştik default lada konustuk bu kunuyu. kullanıcılara zorluk olmasin dige güvenlik kodu uygulaması getirilmemişti bu uygulamada getirilmiş sayılabilir.
 

DefauLt

0
Onaylı Üye
Üye
Katılım
16 Kasım 2004
Mesajlar
284
Açılan Konu
27
Tepki puanı
0
Konum
İstanbul
TTNet kullanicilari zaten giris zorluklarina alismis kullanicilar. 2000-3000'li kitlelere hitap etmesi de beklenemez. Kirilmasi istenmiyorsa IRC'deki gibi, web'de de GD olayina gidilmeli.

Bu arada, Raiden, ben 1451 satirda onu yaziyorsam, PHP ile datalarin SQL girdi ciktilariyla beraber 10.000 satirdan asagi yazamazsin + cok hantal birsey olur. Cause'da 3-4 bin adet bu tur girdi ciktilarla birlikte oynuyorum. Yok ben heveslendim doldum tastim diyorsan yaz o turevde birsey, bedava olarak yayimla, biz de alkislayalim. PHP'den IRC'ye baglantiyi dunku cocukta yapar. Onemli olan uretebilecegin saldiri senaryolari ve yazabilecegin guvenlik filtreleri.

Yeni birseyler yapmak hos birsey, visual birseyler uretirseniz ben de elimden geldigi kadar destek veririm.
 

Mack

0
Onaylı Üye
Üye
Katılım
17 Eylül 2005
Mesajlar
302
Açılan Konu
25
Tepki puanı
0
Konum
AntaLya
özcan bu konularda uzman:) dencek söz yok...
 
Üst