Tam Sürümünü Görmek İçin : ircd de koruma botu yazmak istiyorum!..
merhabalar ircd ye şimdilik büyük ilgim var sizlerden ricam bana ircd hakkında ki incelikleri öğretmeniz olacaktır!..
ve şuan bi koruma botu yazmak istiyorum... eminim aranızdan amerikayi ikinci kez keşfetmeye ne gerek var diyenler oalcaktır!..
Başarı merdivenleri Elleri Cebinde Çıkılmıyor MaLeSeF!..
Herkese Tesekkürler!..
CrazyCat
21/07/2003, 13:29
soket programlama ile ilgili bilgin varsa irc için çok özel bişeler bilmen gerekmiyor
tek yapman gereken irc nin rfc sini okuyup komutları hakkında bilgi toplamak.
Ben de bir iki gündür merak saldım irc bot işine oldukça keyifli görünüyor. irc hakkında pek bişey bilmiyordum rfc sini okuyarak çözmeye çalışıyorum. araya başka iş girmesse 1 -2 güne kadar çalışan bir örnek yazarım diye düşünüyorum.
hangi derleyici için yasmayı düşünüyorsun?
belki daha sonra bu koduda çalışmak isteyenler için faydalı bir örnek çıkarabilirsin.
özellikle oop düşünürsen tasarladığın sınıflar sonra başka programcılar tarafından kullanılabilir.
işin doğrusu benim aklımdan geçen de bu :)
bu konuda çalışmak isteyelere bir örnek oluşturmak
tabi yaz üşengeçliği ağır basmassa :D
kolay gelsin :)
Valla sizden gördüm benimde ilgimi çekti urascak bisiler ariyodum sanirim buldum hemen bir client yazdim calistridim
bash-2.05b$ ./a.out 193.109.122.67
NOTICE AUTH :*** Looking up your hostname
NOTICE AUTH :*** Checking Ident
NOTICE AUTH :*** Found your hostname
ERROR :Closing Link: by Ede.NL.EU.UnderNet.Org (Ping Timeout)
burda takildi tahminimce irc sunucu benden bilgi istiyo da nasil bir formatta istiyo
IP mi direkt olarak sendledim checking ident de kaldi bu seferde biraz aradim güsel bi rfc documents bulamadim bildiginiz böle bi dokuman yada kücük example code lar var ,ise paylasirsaniz sevinirim tesekkurler..
Sanirim IRC sunucunun sana gonderdigi PING ...'i yakalayamiyorsun. PING satirini yakalayip cevap olarak uygun bir PONG gondermen lazim.
Ornegin PING :5234523 geldiyse, cevap olarak PONG :5234523 gondermelisin.
IRC bot (http://forum.ceviz.net/showthread.php?s=&threadid=4362) topic'indeki orneklere bakabilirsin.
Ellerin dert görmesin acemi. Yine ilaç gibi geldin :)
Teşekkurler.
Verdiğin örneğide inceledim ancak perl'de yazildığı için pek mantık üretemedim.. sölediğini uyguladım.. PING'i yakalayip PONG olarak geri gönderdim..
Bu Asamayida geçtim ve server bana böyle bi uyari gönderdi
bash-2.05b$ ./a.out 62.235.13.228
NOTICE AUTH :*** Looking up your hostname
NOTICE AUTH :*** Checking Ident
NOTICE AUTH :*** Found your hostname
PING :773188104
:Elsene.Be.Eu.undernet.org 461 Abf4 USER :Not enough parameters
:Elsene.Be.Eu.undernet.org 461 Abf4 USER :Not enough parameters
USER komutunu rfc'den baktım bildirim olarak su sekilde verilmiş
USER guest 0 * :fullname
nick bildirimi olarakda NICK nickname seklinde verilmiş.
Bu sekilde gönderiyorum bende.
sockfd, "NICK Abf4\nUSER guest 0 *:fullname
Not enough parameters hatasi yada Register first gibi bi hata mesaj'ı geliyo server'dan.. gönderimi degisiyorum NICK nickname\nUSER guest
yapiyorum yine olmuyo.. umdugumdan fasfatali cikti bu iş :)
şimdi neyi yanlış yapiyorum acaba hersey rfc ye göre..
NICK ve USER satirlarini ayri ayri ve su formatta gonderip denesene:
NICK :Genjuro\n
USER Genjuro Genjuro Genjuro :Genjuro\n
Linkini verdigim topic'de HunTER'in koduna bakarsan daha faydali olur.
if (connect(sockfd, (struct sockaddr *)&their_addr,
sizeof(struct sockaddr)) == -1) {
perror("connect");
exit(1);
}
do {
if(send(sockfd, "NICK :Genjuro1\n", 16, 0) == -1) {
perror("send");
}
if(send(sockfd, "USER Genjuro Genjuro Genjuro :Genjuro\n", 39, 0) == -1) {
perror("send");
}
Bu şekilde yazinca burda kaliyorum :
bash-2.05b$ ./a.out 62.235.13.228
NOTICE AUTH :*** Looking up your hostname
NOTICE AUTH :*** Checking Ident
NOTICE AUTH :*** Found your hostname
PING :1621132696
send fonksionlarini do { onun ustune connect den hemen sonra koydugumdada burda
kaliyorum :
Elsene.be.eu.undernet.org Genjuro1 Register first
gibi bi hata veriyo ikisini yani user ile nick'i bi satirda gönderdigim zamanda
do { nun üstünde yada altinda fark etmeden direkt olarak register first hatasini veriyo
bu hatayi verdigine göre pingpong kismini geciyorum bunu gecmek icinde böle bi code ekledim
count = strlen(buf);
if(strstr(buf, pingpong) != NULL) {
// printf("%s\n",buf);
send(sockfd, buf, count, 0);
}
ama yine inat ediyo bu alet :)
strstr kisminda hata yapiyomusum onu duzelttim ping 243141 e pong 243141 aynen cevap vericek sekilde hazirladim gelen numaraya göre ondan sonra senin söledigin türden adim adim nick ve user gönderdim olmadi webden kücük bir code indirdim
ona baktim ordaki nick user gönderme formatinda gönderdim yine olmadi o webde buldugum codu derledim kurdum calisti ancak JOIN #kanal ekledim kanala girmedi msg ekledim msg atmadi.. o code ile codumu karsilastirdim cok fazla fark göremedim vs.. bu olayi bos verim ben iyisimi :)
Once NICK ve USER gondereceksin, sonra PING'leri yakalayip cevaplayacaksin.
Herne kadar bu olayi bos veriyim desemde dün gece sabaha kadar urastim en sonunda oldu gönderilen verilerin aralarina sleep komutlari ekledim sorun burdan kaynaklaniyomus hepsini bi anda server'a gönderince verimli olmuyo anlasilan sorunda
böyle basit bir sey ile cözülmüs oldu..
Teşekkurler
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.