EnderUNIX Team.


EnderUNIX İpucu

Arkadaşıma gönder , Ana Sayfa

[ Konsol ]

"tcpserver kullanimi" - Necati Ersen ŞİŞECİ - (2006-04-26 13:27:54)   [3595]

DJB nin yazdigi tcpserver programi, herhangi bir programla tcpserver a parametre olarak verilen soket in arasindaki baglantiyi kurar.
Yani soket ozelligi olmayan, standart input ve output tan haberlesen programlari sokete baglayarak,
karsi taraf ile haberlesmesini saglar.

qmail-smtp nin run dosyasina bakalim.

devel~$ cat /var/qmail/supervise/qmail-smtpd/run
#!/bin/sh
QDUID=`id -u qmaild`
QDGID=`id -g qmaild`

exec /usr/local/bin/softlimit -m 4000000 /usr/local/bin/tcpserver -v -p -H -R -l 0 -x /etc/tcp.smtp.cdb -c 256 -u "$QDUID" -g "$QDGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1

Qmail in kendisi sirek soketi kullanmaz, bunun yerine tcpserver la halleder.

softlimit, process in kullanabilecegi bellek ile ilgili ayarlamalar yapiyor.

/usr/local/bin/tcpserver -v -p -H -R -l 0 -x /etc/tcp.smtp.cdb -c 256 -u "$QDUID" -g "$QDGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1

bu kisim kaldi. burda en sondaki /var/qmail/bin/qmail-smtpd sokete baglanilacak (bind) olan program.
Bunun yerine kendi yazdigimiz herhangi bir programi verebiliriz.
qmail-smtpd den onceki parametre de hangi port u kullanacagini belirtiyor (smtp=25 sonucta)

devel~$ cat olmaz.sh
#!/bin/sh

echo "Buraya baglanamazsiniz..."

seklinde bir shell script imiz olsun.

Bu script i tcpserver ile 10000 inci port a baglayalim.


/usr/local/bin/tcpserver -v -p -H -R -l 0 -x /etc/tcp.smtp.cdb -c 256 -u "$QDUID" -g "$QDGID" 0 10000 /home/siseci/olmaz.sh 2>&1

Qmail in supervise lari root ile calistirildigi icin UID ve GID ye process in owner ini setlemek icin ihtiyac duyuyor.
Bizim ihtiyacimiz yok, cunku >1024 olan portlari tum kullanicilar bind edebiliyor.

/usr/local/bin/tcpserver -v -p -H -R -l 0 -x /etc/tcp.smtp.cdb -c 256 0 10000 /home/siseci/olmaz.sh 2>&1

burada -c kac tane anlik baglantiyi kabul edecegini gosteriyor.
-x de tcprules icin gerekiyor.

/usr/local/bin/tcpserver -v -p -H -R -l 0 -c 256 0 10000 /home/siseci/olmaz.sh

seklinde kullanirsak isimizi gorecektir.
Bu sekilde calistirinca loglari da ekranda gorebiliriz.

Diger parametreler icin tcpserver in parametrelerine bakabilirsiniz.

telnet ile deneyelim.

uekae:~$ telnet devel.enderunix.org 10000
Trying 193.255.128.5...
Connected to devel.enderunix.org.
Escape character is '^]'.
Buraya baglanamazsiniz...
Connection closed by foreign host.

tcpserver in kendisi calistirdigi programa bazi env degiskenlerini aktarir.
Bunlardan bir tanesi TCPREMOTEIP dir ve istemcinin IP sini tutar.

Scriptimizi guncelleyelim.

devel~$ cat olmaz.sh
#!/bin/sh

echo "Buraya baglanamazsiniz... IP: $TCPREMOTEIP"

seklinde kullanilabilir.

tekrar telnet denedigimizde bu sefer IP adresini de gorebiliriz.

Baglanti yapan IP ye gorede bu betik sayesinde islem yaptirabiliriz. Ornegin
telnet ile calisan bir uygulamamiza sadece belli IP adreslerinden erisim icin izin verebiliriz.
Yada farkli IP adresleri icin farkli programlar calistirabiliriz.

Bu sokete baglanacak olan tum client lar bizim yazdigimiz mesaji goreceklerdir.
Telnet, yada outlook gibi clientlar ile baglandigimizda bu mesajlari gorebiliriz.



Arkadaşıma gönder , Ana Sayfa