[ Nothingman @ 19.04.2008. 17:47 ] @
Kao prvo, izvinjavam se sto ovo postavljam u cekaonicu, ali ne znam na koji bih forum postavio. Tema bi najbolje "legla" u "Network programming" (nevezano za bilo koji programski jezik) ali takva ne postoji trenutno. Takodje mozda postoje vec gotova softverska resenja, pa onda tema ne mora da bude vezana za programiranje, vec za upotrebu softvera.

Problem je sledeci:

Rec je o klijent/server aplikaciji koja u sebi sadrzi i jednostavni chat. Korisnici se putem klijenta konektuju na server iz raznih delova sveta, i izmedju ostalog tamo i chatuju. Chat je u aplikaciji lose odradjen, tako da ako posaljete tacno odredjeni string serveru svi klijenti koji ga prime dozive neku vrstu buffer overflow-a koja zamrzne klijentsku aplikaciju. Klijent i server komuniciraju putem TCP protokola.
Mene interesuje najbolji nacin da se "zakacim" izmedju svog klijenta i servera (da osluskujem odredjeni port) i u paketima koji mi stizu trazim dati string (ili neki pattern). Ako paket u sebi ne sadrzi string (ili pattern) onda propustim paket klijentu, a ako ga sadrzi onda da uradim nesto sa njim (npr. da javim serveru da je primljen, a da sam paket odbacim, ili da izmenim string u paketu i propustim ga klijentu).

Nemam mnogo iskustva sa mreznim programiranjem, ali poznajem neke osnove. Svi saveti i linkovi odakle mogu da saznam vise o ovoj temi su dobrodosli. Takodje ako postoje gotova resenja za ovakve stvari ona bi bila vise nego pozeljna.

Hvala unapred.
[ Nothingman @ 19.04.2008. 19:51 ] @
Evo, mislim da sam uspeo da nadjem jedno resenje vezano za linux.

http://wiztelsys.com/Article_iptables_bob2.html

Nisam probao jos, ali to mi daje najprostiju opciju, tj. da eliminisem sve pakete sa zelejenim stringom vec na nivou kernela.
Sada me zanimaju i resenja koja mi omogucavaju da specifiram zeljenu akciju ako je pronadjen dati string u paketu. Npr. da prepravim paket i pustim ga da prodje, ili da dam odredjeni odgovor serveru (npr. da posaljem komandu koja kikuje usera koji je poslao maliciozni string, a podrazumeva se da imam moderatorske privilegije u tom trenutku).
Nadam se da nisam previse zakomplikovao :)
[ misk0 @ 19.04.2008. 20:31 ] @
Kao sto si i sam rekao, iptables radi na sistemskom nivou. Ako mozes mjenjati pakete sa iptables-om (nisam to nikad radio, mozda je moguce) - to je ono sto ti treba.
Sve ostalo je komplikovano, tj trebao bi imati aplikaciju koja bi se uvalila prije servera (znaci opet na sistemskom nivou) i koja bi za odredjene vrste paketa radila njihovu modifikaciju. Nije to ni malo jednostavno, a ne znam da postoji nesto gotovo.
Pokusaj sa iptables, ali najbolje ti je da jednostavno dropujes taj paket i to je to. Pusti osvetu :)
[ Nothingman @ 20.04.2008. 13:40 ] @
Hvala na odgovoru. Drug mi sinoc reche da iptables osim dropa moze i da forwarduje pakete kada nadje odredjeni string. Tako da cu da ga podesim da umesto da dropuje pakete, da ih posalje mojoj aplikaciji, koja ce iz istih da izvuce user id i da posalje serveru paket koji ga kikuje. :)

Pozdrav.
[ misk0 @ 20.04.2008. 17:01 ] @
Super rjesenje, nadam se da ces uspjeti. Jedini problem koji vidim tu je da li ces moci da identifikujes korisnika na osnovu sadrzaja paketa. Nemoj se bazirati na IP adresi jer moze vishe korisnika da je ima istu. Javi sta si napravio.