|
Tahun II, Nomor 8, Mei 2000
|
|||
Membangun Billing System untuk Server Warnet |
||||
Home
Halaman Muka |
PendahuluanEdisi yang lalu telah dibahas tentang konfigurasi untuk server internet cafe (warnet). Pengembangan berikutnya seputar server warnet yang dapat dilakukan adalah meminimalkan pekerjaan operator. Server warnet harus dapat bertindak layaknya server wartel (warung telekomunikasi) dimana begitu gagang telepon ditutup, server melakukan pencetakan tagihan.Sebelum kita mulai mengembangkan billing system untuk warnet, ada beberapa isu atau syarat kelayakan suatu server warnet, baik yang terkait dengan billing system ataupun teknik networking lainnya: MultiplatformServer yang baik sanggup menjadi gateway bagi berbagai platform sehingga memberi kebebasan bagi para pengguna untuk memilih. Kebebasan ini begitu penting mengingat kita tidak bisa memaksakan pelanggan untuk menggunakan platform tertentu.Thin-Client Sedapat mungkin setting-up di sisi client tidak terlalu banyak. Hindari instalasi atau pembuatan program yang sangat spesifik untuk suatu platform, setidaknya itulah langkah awal menuju universalitas. Dari sisi hardware, suatu server yang berisi program billing beserta printer-nya perlu dibackup dengan UPS (uninterrupable power supply). Hal ini untuk mengantisipasi padamnya listrik saat pelanggan sedang menggunakan internet. Dengan demikian tagihan tetap dapat dicetak. Skenario Ketika pelanggan datang ke internet cafe dan duduk di depan komputer,
dia harus menjalankan script berikut:
Selanjutnya program akan menampilkan pesan (di layar telnet): ``CLOSE YOUR TELNET PROGRAM TO LOGOUT'' atau ``TUTUP PROGRAM TELNET ANDA JIKA SUDAH SELESAI BERINTERNET''. Setelah pesan tersebut, pelanggan tadi secara otomatis dapat menggunakan komputer yang ada di hadapannya untuk surfing ke internet dan mulailah awal pemakaian dicatat. Tanpa proses di atas, komputer yang digunakannya tidak dapat dipakai untuk internet karena ada kontrol dari program ipchains. Setelah pelanggan puas bermain internet atau memang karena uangnya pas untuk sekian jam pemakaian, si pelanggan harus mematikan program telnet tadi, dan secara otomatis terdengar suara printer mencetak tagihan. Informasi yang tertera dalam tagihan adalah: nomor IP komputer yang dipakai, waktu awal dan akhir pemakaian, serta jumlah rupiah yang harus dikeluarkan berdasarkan selisih waktu awal dan akhir tadi. Jangan lupa menyertakan pesan terima kasih serta nama internet cafe Anda. Dengan demikian, layaknya operator wartel, operator warnet hanya menunggu
pelanggan selesai bermain internet, menerima uang pembayaran, serta memberikan
uang kembali (kalau perlu).
Teknis Pelaksanaan Untuk memenuhi skenario di atas, bukanlah suatu hal yang sulit. Dengan Linux semuanya dapat terjawab dan bahannya tersedia di berbagai distribusi seperti SuSE, RedHat, Slackware, dsb. Kebutuhan Program Ada beberapa paket atau program yang dibutuhkan untuk program yang dijalankan di server, antara lain: Python
ipchains
dialer
pidof
ifconfig
netstat
ping
lpr
Menjalankan ProgramJalankan sebagai root script warnetd-simple.py dengan cara:#pythonwarnetd-simple.py& Atau jika Anda telah mengubahnya menjadi executable dengan:
maka dapat langsung dijalankan dengan:
warnetd-simple.py Script berikut juga dapat diambil di
000|#!/usr/bin/python 001| 002|importsocket#Forgethostbyaddr() 003|importSocketServer 004|importos 005|importsys 006|importstring 007|importtime 008| 009|classServerWARNET(SocketServer.ForkingTCPServer): 010|defserver_bind(self): 011|"""Overrideserver_bindtostoretheservername.""" 012|SocketServer.TCPServer.server_bind(self) 013|host,port=self.socket.getsockname() 014|ifnothostorhost=='0.0.0.0': 015|host=socket.gethostname() 016|hostname,hostnames,hostaddrs=socket.gethostbyaddr(host) 017|if'.'notinhostname: 018|forhostinhostnames: 019|if'.'inhost: 020|hostname=host 021|break 022| 023|self.ip=hostaddrs[0] 024|self.nama=hostname 025|self.port_squid=3128 026| 027|#Hapussemuaperaturanipchains 028|os.system('ipchains-F') 029| 030|#tutupportsquid 031|os.system('ipchains-Ainput-s192.168.1.0/24-ptcp\ 032|-jDENY-d%s%s'%(self.ip,self.port_squid)) 033| 034|#SuSE 035|self.dialer="wvdial" 036|self.KillDialer="killallwvdial" 037|self.IsDialerOn="pidofwvdial" 038| 039|#RedHat 040|#self.dialer="ifupppp0" 041|#self.KillDialer="ifdownppp0" 042|#self.IsDialerOn="pidofpppd" 043| 044| 045|classKendaliWARNET(SocketServer.StreamRequestHandler): 046|defhandle(self): 047|ip_client=self.client_address[0] 048|port_client=self.client_address[1] 049| 050|forward_str="ipchains-%%sforward-jMASQ-s%s"%ip_client 051|squid_str="ipchains-%%sinput-s%s-ptcp-jACCEPT-d%s%s"\ 052|%(ip_client,self.server.ip,self.server.port_squid) 053| 054|self.wfile.write("\n\rHello%s\n\r"%ip_client) 055|self.wfile.write("Selamatdatangdiserver%s\n\r"%self.server.nama) 056| 057|#Apakahdialersudahrunning? 058|DialerOn=os.system(self.server.IsDialerOn)==0 059|ifnotDialerOn: 060|os.system(self.server.dialer) 061| 062|#TunggusampaiservermendapatIPdariISP 063|self.wfile.write("\n\rTunggusampaimodemtersambungkeISP") 064|whileos.system("ifconfig|grepppp0")>0: 065|pass 066| 067|#Penggunaanipchainsberikutmungkinmembuatandaperlu 068|#menjalankanserverinisebagairoot 069|os.system(forward_str%"A") 070|os.system(squid_str%"I") 071| 072|self.wfile.write("\rSilahkanber-internet.TutupprogramTELNET\ 073|Andajikasudahselesai.") 074| 075|awal=time.time() 076| 077|#Logoutjikakoneksiterputus 078|logout=0 079|whilenotlogout: 080|#pantaukonektivitasport 081|logout=os.system('netstat-n|grepESTABLISH|\ 082|grep"%s:%s"'%(ip_client,port_client))<>0 083|ifnotlogout: 084|#pantaukonektivitasjaringan 085|logout=os.system('ping-c1%s|grep"1packetsreceived"'%\ 086|ip_client)<>0 087| 088|akhir=time.time() 089| 090|t=time.localtime(awal) 091|s_awal="%d-%d-%d%d:%d:%d"%(t[2],t[1],t[0],t[3],t[4],t[5]) 092|t=time.localtime(akhir) 093|s_akhir="%d-%d-%d%d:%d:%d"%(t[2],t[1],t[0],t[3],t[4],t[5]) 094| 095|#Rp5000/jam 096|rp=int(5000*(akhir-awal)/3600) 097| 098|cetak="No.Komputer:%s\nAwal:%s\nAkhir:\ 099|%s\nBiaya(Rp):%s"\ 100|%(ip_client,s_awal,s_akhir,rp) 101| 102|os.system('echo"%s"|lpr'%cetak) 103| 104|#Cabuthakakses 105|os.system(forward_str%"D") 106|os.system(squid_str%"D") 107| 108|#Disconnectdialerjikatidakadayanglogin 109|AdaYgLogin=os.system("ipchains-L|grep-nMASQ")==0 110|ifnotAdaYgLogin: 111|os.system(self.server.KillDialer) 112| 113|return 114| 115| 116|#Blokutama 117| 118|ifsys.argv[1:]: 119|port=string.atoi(sys.argv[1]) 120|else: 121|port=8000 122| 123|AlamatServer=('',port) 124| 125|warnetd=ServerWARNET(AlamatServer,KendaliWARNET) 126| 127|print"LayananWARNETpadaport",port,"..." 128|warnetd.serve_forever() Referensi
|
|||
Email : jakarta@jakarta.linux.or.id