25 September 2012

Twitter Webbase Client

Bermula dari permintaan si cinta @DiahEstiani yg meminta via/from custom dari apps twitter, maka yang terpikir oleh saya adalah bagaimana menyajikan bentuk webbase yang kompatibel dan mudah digunakan. Sebelomnya saya sudah membikinnya tapi hanya posting saja tentunya ini bikin ribet dan sulit untuk pemakai.

Maka saya iseng-iseng mencari webbase untuk client webbase dan tentunya bertajuk Open Source, setelah berhari-hari saya mendapatkan Dabr, untuknya bukan cuma webbase untuk digunakan di Desktop saja, featurenya bisa untuk mobile juga. Setup Dabr ini tidaklah terlalu sulit, hanya 3 langkah saja (Register Apps di dev.twitter.com, setup webserver di hostingan, dan Dabr itu sendiri).

Yang dibutuhkan untuk register API Twitter:
  • Name: (yg selanjutnya menjadi nama app anda, via/from di twitter)
  • Website: (Jika diklik di apps via/from akan dilinkan kemana)
  • Application type: Read, Write and Access direct messages
  • Consumer key:
  • Consumer secret:
Selanjutnya kita siapkan hostingan, Dabr tidak menyimpan Username/Password, melainkan langsung diproses oleh Oauth twitter. System yang dibikin oleh dev Twitter untuk keamanan dan menghindari pihak ke 3 untuk mencuri data-data yang bersifat privasi. Beberapa persyaratan yg harus dipenuhi untuk ngehosting Dabr adalah:
dsb) Setup Dabr, yg diperlukan hanya Consumer key dan Consumer secret, kita letakan di config.php.
budsz:~/a$ fetch http://dabr.googlecode.com/files/dabr-r430.zip dabr-r430.zip
budsz:~/a$ ls -l
total 88
drwxr-xr-x   3 budsz  poison    512 Sep 25 14:31:38 2012 .
drwxr-xr-x  26 budsz  poison   1536 Sep 25 14:30:47 2012 ..
drwxr-xr-x   5 budsz  poison    512 Sep 25 14:31:34 2012 dabr
-rw-r--r--   1 budsz  poison  82709 Aug 16 19:15:20 2011 dabr-r430.zip
budsz:~/a$ unzip dabr-r430.zip
Archive:  dabr-r430.zip
d dabr
extracting: dabr/.htaccess
extracting: dabr/.project
extracting: dabr/about.html
d dabr/browsers
extracting: dabr/browsers/bigtouch.css
extracting: dabr/browsers/bigtouch.php
extracting: dabr/browsers/blackberry.php
extracting: dabr/browsers/desktop.php
extracting: dabr/browsers/list.csv
extracting: dabr/browsers/text.php
extracting: dabr/browsers/touch.css
extracting: dabr/browsers/touch.js
extracting: dabr/browsers/touch.php
extracting: dabr/browsers/worksafe.php
d dabr/common
extracting: dabr/common/advert.php
extracting: dabr/common/Autolink.php
extracting: dabr/common/browser.php
extracting: dabr/common/Embedly.php
extracting: dabr/common/Extractor.php
extracting: dabr/common/HitHighlighter.php
extracting: dabr/common/lists.php
extracting: dabr/common/menu.php
extracting: dabr/common/OAuth.php
extracting: dabr/common/Regex.php
extracting: dabr/common/settings.php
extracting: dabr/common/theme.php
extracting: dabr/common/twitter.php
extracting: dabr/common/user.php
extracting: dabr/config.sample.php
d dabr/images
extracting: dabr/images/dabr.png
extracting: dabr/images/dm.png
extracting: dabr/images/dmL.png
extracting: dabr/images/map.png
extracting: dabr/images/mapL.png
extracting: dabr/images/q.png
extracting: dabr/images/qL.png
extracting: dabr/images/reply.png
extracting: dabr/images/replyall.png
extracting: dabr/images/replyallL.png
extracting: dabr/images/replyL.png
extracting: dabr/images/retweet.png
extracting: dabr/images/retweeted.png
extracting: dabr/images/retweetedL.png
extracting: dabr/images/retweetL.png
extracting: dabr/images/star.png
extracting: dabr/images/starL.png
extracting: dabr/images/star_grey.png
extracting: dabr/images/star_greyL.png
extracting: dabr/images/trash.gif
extracting: dabr/images/trashL.png
extracting: dabr/images/twitter_button_2_lo.gif
extracting: dabr/index.php
Rubah permission untuk setiap filenya dulu:
budsz:~/a/$ cd dabr
budsz:~/a/dabr$ find . -type f -exec chmod 644 *.* {} \;
budsz:~/a/dabr$ cp config.sample.php config.php
Edit file config.php, isi dengan data-data yg sudah didapatkan ketika kita registrasi apps di Twitter:
// OAuth consumer and secret keys. Available from http://twitter.com/oauth_clients
define('OAUTH_CONSUMER_KEY', 'Isi_dengan_Consumer_key_anda');
define('OAUTH_CONSUMER_SECRET', 'Isi_dengan_Consumer_secret_anda');
Sisanya bisa anda setting sesuai dengan kebutuhan anda seperti
// API key for Twitpic - sign up at http://dev.twitpic.com/
define('TWITPIC_API_KEY', '');
// bit.ly login and API key for URL shortening
define('BITLY_LOGIN', '');
define('BITLY_API_KEY', '');
Setelah itu kita perlu melakukan Rewrite dari webserver kita, tergantung webserver apa yang anda pake, saya menggunakan Lighttpd dengan syntax sbb:
$HTTP["host"] =~ "subdomain\.domain\.tld" {
    dir-listing.exclude = ( "favicon.ico" )
    server.document-root = "/path/to/wwwdir"
    url.rewrite-if-not-file = (
                                "^/w/(.*)\?(.*)$"   => "/w/index.php?q=$1&$2",
                                "^/w/(.*)$"         => "/w/index.php?q=$1",
    )
}
DONE!

22 Juli 2012

Shell Scripting Twitter's Bot

Iseng-iseng gak ada kerjaan, saya coba untuk ngetwit auto dengan menggunakan scripting sederhana digabung dengan Python Twitter Tools, ujungnya menghasilkan kinerja yang lumayan memuaskan. Berikut deskripsinya: "The Minimalist Twitter API for Python is a Python API for Twitter, everyone's favorite Web 2.0 Facebook-style status updater for people on the go".

Pertama login di shell lalu lakukan download dan pengekstrakan:
budsz:~$ fetch http://pypi.python.org/packages/source/t/twitter/twitter-1.8.0.tar.gz
budsz:~$ tar zxvf  twitter-1.8.0.tar.gz
Sehingga terbentuk direktori twitter-1.8.0
budsz:~$ ls -ld twitter-*
drwxr-xr-x  6 budsz  poison  512 Jul 22 15:27:08 2012 twitter-1.8.0
Ada beberapa hal yang perlu anda edit, jika anda menggunakan Twitter API, yaitu file-file yang digunakan untuk autentifikasi Oauth twitter. Disini saya tidak akan menjelaskan pembuatan Twitter API, silahkan ngerefer ke site Twitter Developers. Pertama silahkan edit file:
budsz:~$ vim twitter-1.8.0/twitter/cmdline.py
Edit bagian CONSUMER_KEY dan CONSUMER_SECRET, isi nilainya dengan Apps yang sudah anda buat sebelomnya.
CONSUMER_KEY='your_consumer_key'
CONSUMER_SECRET='your_consumer_secret'
Untuk penginstallan dibutuhkan SetupTools, silahkan sesuaikan dengan kebutuhan anda. Selanjutnya tinggal lakukan proses penginstalan dengan root access untuk SetupTools/twitter-1.8.0.tar.gz:
root:~# cd /usr/ports/devel/py-setuptools
root:~# make install clean
root:~# pkg_info | grep py26
py26-setuptools-0.6c11_3 Download, build, install, upgrade, and uninstall Python packages
root:~# easy_install ~budsz/twitter-1.8.0
Note: Jika anda tidak mempunyai Apps silahkan langsung loncat proses instalasi saja yang anda kerjakan.

Uji coba, login kembali menggunakan user biasa:
budsz:~$ twitter -h (Untuk command line help)
budsz:~$ twitter (Login spt diweb, masukan user/password, setelah itu exit maka akan diminta PIN cukup tekan enter saja, defaultnya disimpan di ~$HOME/$USER/.twitter_oauth)
Untuk menggunakan di console/shell:
budsz:~$ twitter set "Hello World!" (Posting new twit)
budsz:~$ twitter search "cinta" (Seaching keyworld di public)
budsz:~$ twitter rate
Remaining API requests: 350 / 350 (hourly limit)
Next reset in 3544s (Sun Jul 22 17:38:01 2012)
Implementasi untuk auto posting anda tinggal gabungin dengan fasilitas cron(8) dan Shell scripting.

18 Juni 2012

Liku-liku Sebuah Perjalanan Hidup

Kadang kita tidak pernah mengetahui apa yang ada didepan kita, termasuk rencana kita sendiri kedepannya. Liku-liku kehidupan itulah "seni" dalam menjalankan ibadah sebagai umat yang sudah dianugrahi kehidupan dari Tuhan, kewajiban dalam mengemban tugas, kewajiban sebagai penganut agama. Kadang kita melalui tanjakan/turunan yang curam, belokan yang berbahaya. Namun dengan segala konsekwensi dan resikonya kita harus melalui itu dengan senyum dan semangat tentunya dengan ucapan syukur juga. Itu semua sudah "satu paket" dalam kehidupan, baik suka dan duka, kita hanya bisa menjalaninya saja. Adapun dalam proses yang "terjal" ini, Tuhan selalu melengkapinya dengan solusinya juga, jadi gak perlu kuatir dan takut akan ini semua. 

Penghiburan daripadaNya sudah diberikan walau diberikan sementara waktu saja. Seseorang yang bisa membuat kita tersenyum walau sesaat, bisa bahagia walau sesaat itulah salah satu "persinggahan" saja dalam kehidupan ini. Kadang kita sebagai manusia sulit dan terlena akan semua hal yg bersifat sementara ini; "Hello, kamu belom sampe tujuan kamu, ini cuma tempat istirahat saja. Disana ada hal yang lebih indah daripada disini. Ayo tetep semangat untuk mencapai tujuan akhir ini.". Memang kita sakit/pedih ketika kehilangan orang yang benar-benar kita cintai/sayangi, tetapi kita juga harus bisa bijaksana dalam menelaah ini, lebih baik jika dia pergi meninggalkan kita, daripada dia juga tidak mempunyai masa depan bersama kita. Kita harus bisa belajar iklas/rela dengan semua kejadian ini dan semua sudah diatur yang Maha Kuasa.

Ini sekedar lirik lagu kenangan manis bersamamu walau sesaat dan aku tidak akan pernah bisa lupa:

...
"Just close your eyes
The sun is going down
You'll be alright
No one can hurt you now
Come morning light
You and I'll be safe and sound"
...

"Thank you for all the love that you give a while, you may be happy with him, good luck"

16 Mei 2012

Jailbreak dan Unlock

Kadang saya tidak mau menuntaskan beberapa kerjaan oprekan jadi kena penyakit lupa :-). Saya mempunyai iPhone dari adik saya dengan provider Vodafone Australia tentu jika dipake di Indonesia jelas tidak dapat digunakan karena dilock baik software (SU) dan Basebandnya. Setelah google beberapa hari ternyata menemukan tool yang bertebaran di internet dan proses ini dinamakan JailBreak untuk bisa menggunakan iPhone dan Unlock untuk bisa menggunakan baseband (Keperluan Telp, SMS).

Ada beberapa kesimpulan untuk dipahami sebelom pengerjaan ini:
  1. Upgrade firmware hanya bisa dilakukan dengan versi terbaru.
  2. Downgrade firmware hanya bisa dilakukan jika anda menyimpan SHSH Blobs atau custom firmware.
  3. Jika anda mengupgrade firmware maka secara otomatis versi baseband ikut naik juga (Sekali sudah terupdate maka tidak akan bisa kembali ke versi sebelomnya).
  4. Agar versi baseband tidak ikut naik anda harus mengcustom firmware anda terlebih dahulu.
  5. JailBreak ada 2 macam yaitu Untethered dan TetheredUntethered merupakan JailBreak sempurna dalam artian tidak perlu dipancing/booting dengan PC/Laptop untuk masuk menu, sedangkan Tethered harus dipancing/dibooting dengan menggunakan PC/Laptop tiap kali iPhone Restart/Shutdown.
Untuk JailBreak ada beberapa tool yang bisa digunakan:
  1. RedSn0w (Recommended).
  2. Sn0wbreeze.
  3. GreenPois0n.
  4. JailbreakMe.
Untuk Unlock bisa menggunakan Software/Hardware, kelebihan hardware lebih banyak mensupport versi baseband dibanding versi softwarenya, adapun tool yang bisa digunakan:
  1. Gevey Simcard (Hardware Base).
  2. Ultrasn0w (Software Base).
  3. SAM Unlock (Software Base).
Untuk keperluan tambahan seperti custom firmware, saving SHSH Blobs bisa menggunakan tool:
  1. iFaith (Custom firmware, saving SHSH Blobs) (Recommended).
  2. RedSn0w (Custom firmware, saving SHSH Blobs) (Recommended).
  3. TinyUmbrella (Saving SHSH Blobs).

05 April 2012

Jiarah ke makam ibu tercinta

Tidak terasa udah ampir 1 tahun kepergian mamih (7 April 2011), tadi pagi kita sekeluarga nyempetin jiarah ke makan ibu kami tercinta. Semuanya sudah beres dari pembangunan makamnya. Ada beberapa foto yang saya kumpulkan untuk diabadikan bersama papi endut/uwi :)






18 Maret 2012

H264 Streaming Dengan Lighttpd

Selama ini saya menggunakan file-file yang berformat FLV untuk streaming video LAN. Sayangnya ada beberapa video bagus tapi berformat MP4, nah permasalahannya bagaimana jika ingin menggunakan file berformat MP4. Berikut saya akan share beberapa caranya, seperti biasa saya bertanya ke Google, akhirnya dapet juga trik jitu. Saya menggunakan Lighttpd H264 untuk streaming MP4-nya. Untuk mempercepat produktifitas saya menggunakan ports saja. Install Lighttpd via ports (Cukup dibuild saja).
root:~# cd /usr/ports/www/lighttpd
root:/usr/ports/www/lighttpd# make
Download module versi terakhir:
root:~# fetch http://h264.code-shop.com/download/lighttpd-1.4.18_mod_h264_streaming-2.2.9.tar.gz
root:~# tar zxvf lighttpd-1.4.18_mod_h264_streaming-2.2.9.tar.gz
root:~# cd lighttpd-1.4.18/src/
root:~# cp mod_h264_streaming.c /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp mod_streaming_export.h /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp moov.c /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp moov.h /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp mp4_io.c /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp mp4_io.h /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp mp4_reader.c /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp mp4_reader.h /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp mp4_writer.c /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp mp4_writer.h /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp mp4_process.c /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp mp4_process.h /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp output_bucket.c /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp output_bucket.h /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp output_mp4.c /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
root:~# cp output_mp4.h /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
Tambahkan Makefile.am di /usr/ports/www/lighttpd/work/lighttpd-1.4.30/src/
lib_LTLIBRARIES += mod_h264_streaming.la
mod_h264_streaming_la_SOURCES = mod_h264_streaming.c \
mod_streaming_export.h \
moov.c moov.h \
mp4_io.c mp4_io.h \
mp4_reader.c mp4_reader.h \
mp4_writer.c mp4_writer.h \
mp4_process.c mp4_process.h \
output_bucket.c output_bucket.h \
output_mp4.c output_mp4.h
mod_h264_streaming_la_CFLAGS = $(AM_CFLAGS) -DBUILDING_H264_STREAMING
mod_h264_streaming_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
mod_h264_streaming_la_LIBADD = $(common_libadd)
Lakukan penginstalan Lighttpd
root:/usr/ports/www/lighttpd# make install clean
Edit/tambahkan option yang diperlukan untuk lighttpd.conf
root:~# vim /usr/local/etc/lighttpd/lighttpd.conf
server.modules              = (....................
                              "mod_h264_streaming",
                               ....................
)

# MP4 streaming
h264-streaming.extensions = ( ".mp4" )
Edit dan jalankan startup script
root:~# vim /usr/local/etc/rc.d/lighttpd
Edit : ${lighttpd_enable="NO"} menjadi : ${lighttpd_enable="YES"}
root:~# /usr/local/etc/rc.d/lighttpd start
root:~# ps ax | grep lighttpd
72915  ??  S       0:00.74 /usr/local/sbin/lighttpd -f /usr/local/etc/lighttpd/lighttpd.conf
9444  p0  S+     0:00.00 grep lighttpd

03 Februari 2012

Pembangunan Kuburan Mami

Secara pribadi aku sudah tidak ada budget untuk pembangunan ini, tapi Tuhan tau kondisi keuangan keluarga kami. Puji Tuhan, akhirnya tepat pada waktunya berkat selalu ada meskipun kondisi seperti ini. Kami sekeluarga memutuskan pembangunan kuburan ini sesederhana mungkin. Pada akhir Januari 2012 pembangunan dimulai, ada beberapa foto-fotonya dan konsep tulisan untuk batu nisan (Bongpay).

Konsep Bongpay.


Lambang salib dibikin lebih lebar rationya.


Dingding tanpa besi, ditujukan agar lebih awet (Besi sering karatan kalo sudah tahunan).


Untuk tempat kembang cukup di bagian kaki saja, biar nantinya bekas-bekas bunga tidak merusak pemandangan.


Tampak dari atas.


Tampak dari samping.


Tembok bagian belakang.

02 Februari 2012

Bikin Mirror Update Kaspersky Antivirus

Sering kali kita direpotkan dengan update Kaspersky Antivirus yang cukup makan waktu, ditambah koneksi yang lemot mungkin bikin anda pegel-pegel. Banyak aplikasi yang memudahkan untuk kebutuhan ini, tapi saya mencoba dengan cara lain ( Yang ada di otak saya.baca ) dan terbilang cara ini manual, tapi cukup ampuh dan sederhana. Pertama-tama untuk kebutuhan ini perlu anda siapkan:
  • Webserver local.
  • Scripting.
  • Otomatis update per satuan waktu dengan cron.
Diasumsikan webserver sudah ready ( Saya menggunakan Lighttpd under FreeBSD ), saya coba memonitor path file apa saja yang diperlukan untuk update Kaspersky Antivirus 2011, anda bisa menggunakan bitanalyzer, tcpdump, URLSnooper, Wireshark dsb. Setelah itu saya coba bikin script sederhana:
budsz:~$ mkdir kav ; cd kav
budsz:~/kav$ cat kav.sh
#!/bin/sh
WGETBIN="wget -m -nH -N -R *.html"
BASEURL="ftp://dnl-00.geo.kaspersky.com"
CURDIR="/home/budsz/kav"
cd $CURDIR
for LISTDIR in \
        AutoPatches/kav11 \
        bases/apu \
        bases/av/ark \
        bases/av/emu \
        bases/av/kdb/i386 \
        bases/av/qscan \
        bases/av/wa \
        bases/blst \
        bases/dnscln \
        bases/ids \
        bases/info \
        bases/klifppcfg \
        bases/ksn \
        bases/pdm \
        bases/sco/i386/win \
        bases/ssa \
        bases/sw2 \
        bases/uds \
        bases/upd \
        bases/vlns \
        bases/wmuf \
        diffs/bases/apu \
        diffs/bases/av/emu/i386 \
        diffs/bases/av/kdb/i386 \
        diffs/bases/blst \
        diffs/bases/dnscln \
        diffs/bases/klifppcfg \
        diffs/bases/ksn \
        diffs/bases/pdm \
        diffs/bases/sco/i386/win \
        diffs/bases/uds \
        diffs/bases/wmuf \
        index
do

# Looping untuk downloading
$WGETBIN $BASEURL/$LISTDIR
        echo "----------------------------------"
        echo " Mirroring beres untuk: "$LISTDIR
        echo "----------------------------------"
done

# Hapus file '.listing'
find . -name ".listing" -delete
Script itu diberi nama kav.sh, lalu disimpan di directory kav. Setelah itu dijalankan secara automatic dengan menggunakan cron:
budsz:~$ crontab -l
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/root/
SHELL=/bin/sh
MAILTO=""
HOME=/var/log
0      7        *      *      *      /home/budsz/kav/kav.sh > /dev/null
Setiap jam 7.00 melakukan update dengan main server. Biar lebih enak dilihat, anda bisa bikin virtual domain/host di lighttpd.conf:
$HTTP["host"] =~ "av\.example\.net" {
     dir-listing.exclude = ( "favicon.ico" )
     server.document-root = "/home/budsz/kav"
}
Dan A Record atau CNAME di Bind:
budsz:~$ host av.example.net
av.example.net has address 172.16.135.145
Setelah selesai tinggal arahkan setting update server pada Kaspersky Antivirus:
  • Setting.
  • Update Setting.
  • Update Source.
  • Isikan http://av.example.net/ ( Checklist ).
  • Jangan lupa unchecklist Kaspersky Lab Update Server.
Nah, sudah deh beres -;)

15 Januari 2012

PF Dilema Rules

Saya mempunyai PF rules spt ini di /etc/pf.conf:
porthttp = "80"           # HTTP Port
portsquid = "7080"        # Squid Port
ifint0 = "rl0"            # Ethernet ke LAN
rdr pass on $ifint0 proto tcp from 192.168.0.0/24 to any port $porthttp -> $ipproxy port $portsquid
Rules diatas berguna untuk Redirection (RDR)/Transparent Proxy. Lalu saya mempunyai rules spt ini:
ipwebmodem = "{ 10.0.0.1/32, 10.1.0.1/32 }"
block  in     quick on $ifint0 proto tcp from 192.168.0.0/24 to $ipwebmodem port = 80
Hasil: block rules ke 2 tidak akan bekerja alias tidak akan keblock. Jika rules diatas dituker tentu tidak akan bisa karena Statement Order tidak valid. Cara ini bisa diakali dengan menambahkan Exception (Pengecualian) menggunakan table unproxy pada RDR rules, sehingga rules menjadi:
table  { 0.0.0.0/0, !10.0.0.0/30, !10.1.0.0/30 }
porthttp = "80"              # HTTP Port
portsquid = "7080"           # Squid Port
ifint0 = "rl0"               # Ethernet ke LAN

rdr pass on $ifint0 proto tcp from 192.168.0.0/24 to  port $porthttp -> $ipproxy port $portsquid

ipwebmodem = "{ 10.0.0.1/32, 10.1.0.1/32 }"
block in quick on $ifint0 proto tcp from 192.168.0.0/24 to $ipwebmodem port = 80
Terus terang dengan sistem seperti ini lumayan agak repot juga, jika ingin ngeblock site tertentu harus meng-unproxy dulu site tersebut. Lebih fleksible menggunakan IPFW untuk kepentingan spt ini, saya belum menemukan cara yg simple dengan menggunakan PF.

08 Januari 2012

Malas memahami ipfw(8)

Setelah otak atik, bahkan sampe switch untuk redirect packet untuk proxy-squid via packet filter OpenBSD, akhirnya ketemu juga cara yg lebih efesien/efektif, intinya "Terlalu malas untuk memahami man page ipfw(8)" :-(. Berikut salah satu study-casenya:
${fwcmd} add 30 fwd ${ipproxy},${portproxy} tcp from ${ipclproxy} to any dst-port ${porthttp} in via ${ifint0}
${fwcmd} add 52 pipe 2 ip from any to ${ipclient} via ${ifint0}
${fwcmd} add 53 pipe 3 ip from ${ipclient} to any via ${ifint0}
${fwcmd} pipe 2 config bw ${bwcldown} mask dst-ip 0xffffffff
${fwcmd} pipe 3 config bw ${bwclup} mask src-ip 0xffffffff
Kendala dengan ruleset spt diatas adalah traffic control loss artinya traffic yg lewat transparent proxy gak kena limit. Jika saya tuker ruleset diatas menjadi:
${fwcmd} add 52 pipe 2 ip from any to ${ipclient} via ${ifint0}
${fwcmd} add 53 pipe 3 ip from ${ipclient} to any via ${ifint0}
${fwcmd} pipe 2 config bw ${bwcldown} mask dst-ip 0xffffffff
${fwcmd} pipe 3 config bw ${bwclup} mask src-ip 0xffffffff
${fwcmd} add 70 fwd ${ipproxy},${portproxy} tcp from ${ipclproxy} to any dst-port ${porthttp} in via ${ifint0}
Kendalanya adalah traffic yg lewat kena limit tetapi transparent proxynya tidak jalan. Nah, dilematis memang jika running dalam satu masin yang sama. Cara yg ampuh adalah ngeset sysctl variable net.inet.ip.fw.one_pass=0, dengan ini artinya "paket yg masuk melalui dummynet/pipe
akan diterukan ke rule berikutnya.", jadi tetep rule dummynet harus sebelom rule transparent proxy ( Ruleset no 2 ). ( Big Thank To: Ian Smith ).

07 Januari 2012

Sting - Fields Of Gold

Satu lagu yang cukup `dingin` di telinga saya ketika diputar. "Sting - Fields Of Gold", salah satu lagu favourit saya, jaman SMA dapet lagu ini hasil rekaman dari temen alias dibajak :D. Kebetulan iseng-iseng dapet Lyrics-nya:

You'll remember me when the west wind moves upon the fields of barley
You'll forget the sun in his jealous sky as we walk in fields of gold
So she took her love for to gaze awhile upon the fields of barley
In his arms she fell as her hair came down among the fields of gold


Will you stay with me, will you be my love among the fields of barley?
We'll forget the sun in his jealous sky as we lie in fields of gold
See the west wind move like a lover so upon the fields of barley.
Feel her body rise when you kiss her mouth among the fields of gold


I never made promises lightly and there have been some that I've broken
But I swear in the days still left we'll walk in fields of gold
We'll walk in fields of gold


Many years have passed since those summer days among the fields of barley
See the children run as the sun goes down among the fields of gold
You'll remember me when the west wind moves upon the fields of barley
You can tell the sun in his jealous sky when we walked in fields of gold
When we walked in fields of gold, when we walked in fields of gold

06 Januari 2012

PC game VS PS game

Salah satu yang mencolok dalam hal kebiasaan dan hasrat untuk bermain game di Willsz.net - Cyber Internet Station adalah PC game selalu diidentikan dengan PS game, akibatnya request game-game baru di Warnet yang saya kelola selalu berpatokan dengan game yang ada di PS. Itu wajar karena mereka berpengalaman hanya di game PS, sedangkan di game basis PC mereka dalam tahan penyesuaian.

Maka dari itu saya coba mencarikan game-game yang ada di PS agar bisa diimplementasikan di PC, ada beberapa game yang saya hindari menggunakan emulator PS, jadi saya cari saja game yang benar-benar compatible dengan PC.

Diantaranya karena disini populer Winning Eleven, GTA San Andreas, mungkin sementara segitu dulu. Nanti saya tambah lagi biar gak pada bosan :)

05 Januari 2012

DNS dan MRTG

Kalo lagi melamun kadang kebiasaan saya demen monitoring ini itu :-). Sekarang saya coba nambahin DNS request dan successful query. Pertama-tama ada perbedaan generate log stats untuk beberapa versi dari Bind. Disini saya menggunakan versi BIND 9.8.1-P1.
Di named.conf bagian options pastikan ada entry spt ini:
statistics-file "/var/stats/named.stats";
Setelah itu bikin sedikit script sederhana kurang lebih seperti ini:
#!/bin/sh
STATSTMP="/tmp/dnsstats"
STATSFILE="/var/named/var/stats/named.stats"
OLDQ=`grep QUERY $STATSFILE | awk '{print $1}'`
OLDS=`grep successful $STATSFILE | awk '{print $1}'`
rm -f /var/named/var/stats/named.stats
rndc stats
NEWQ=`grep QUERY $STATSFILE | awk '{print $1}'`
NEWS=`grep successful $STATSFILE | awk '{print $1}'`
DIFFQ=$(($NEWQ-$OLDQ))
DIFFS=$(($NEWS-$OLDS))
echo $DIFFQ
echo $DIFFS
Lalu, save file tersebut dan chmod 755. Bikin entry di file CFG MRTG anda kurang lebih spt ini:
Target[dnsstat]: `/usr/local/bin/dnsstat`
Title[dnsstat]: DNS Query/Success Answer
Colours[dnsstat]: DODGERBLUE#1E90FF,BLUE#0000FF,DODGERBLUE#1E90FF,BLUE#0000FF
RouterUptime[dnsstat]: local@localhost
MaxBytes[dnsstat]: 800
AbsMax[dnsstat]: 800
YTics[dnsstat]: 10
PageTop[dnsstat]: DNS Query/Success Answer
YLegend[dnsstat]: Query/Answer
ShortLegend[dnsstat]: Query/5 Min
LegendI[dnsstat]: Query
LegendO[dnsstat]: Answer
Options[dnsstat]: gauge, growright, avgpeak, integer, absolute, pngdate

Silahkan dicoba - Semoga berhasil :)

02 Januari 2012

Hitung packets IPFW untuk TCP/UDP

Dulu pernah terpikir dibenak saya untuk menghitung packet yang lewat IPFW dan seperti biasa hasilnya saya phasing ke MRTG. Tapi kendalanya packet selalu bertambah jumlahnya sesuai dengan output rules dari IPFW; dengan ini grafik yang dihasilnya bersifat naik terus sampe ketika mesin reboot barulah ia kembali ke nol. Jadi, perhitungan rata-rata packet yang masuk/keluar lewat router per-satuan waktu tidak didapatkan alias tidak dinamis. Barulah setelah saya ingat beberapa teknik lama pemograman yaitu dengan variable dummy dengan mencatat packet awal/akhir, lalu dihitung selisihnya per-satuan waktu, hasil grafik terlihat lebih manusiawi :-). Ini adalah satu contoh sederhana scripting yang saya buat:
#!/bin/sh
# TmpFile
TEMPFILE="/tmp/ipfw.tu"
# TCP/UDP grab to file
OLDT1=`ipfw -a list | grep 00300 >  $TEMPFILE`
OLDT2=`ipfw -a list | grep 00301 >> $TEMPFILE`
OLDT3=`ipfw -a list | grep 00302 >> $TEMPFILE`
OLDT4=`ipfw -a list | grep 00303 >> $TEMPFILE`
OLDU1=`ipfw -a list | grep 00400 >> $TEMPFILE`
OLDU2=`ipfw -a list | grep 00401 >> $TEMPFILE`
OLDU3=`ipfw -a list | grep 00402 >> $TEMPFILE`
OLDU4=`ipfw -a list | grep 00403 >> $TEMPFILE`

# Fetch old packets
OLDTI1=`grep 00300 $TEMPFILE | awk '{print $2}'`
OLDTI2=`grep 00301 $TEMPFILE | awk '{print $2}'`
OLDTI3=`grep 00302 $TEMPFILE | awk '{print $2}'`
OLDTI4=`grep 00303 $TEMPFILE | awk '{print $2}'`
OLDTO1=`grep 00300 $TEMPFILE | awk '{print $3}'`
OLDTO2=`grep 00301 $TEMPFILE | awk '{print $3}'`
OLDTO3=`grep 00302 $TEMPFILE | awk '{print $3}'`
OLDTO4=`grep 00303 $TEMPFILE | awk '{print $3}'`
OLDUI1=`grep 00400 $TEMPFILE | awk '{print $2}'`
OLDUI2=`grep 00401 $TEMPFILE | awk '{print $2}'`
OLDUI3=`grep 00402 $TEMPFILE | awk '{print $2}'`
OLDUI4=`grep 00403 $TEMPFILE | awk '{print $2}'`
OLDUO1=`grep 00400 $TEMPFILE | awk '{print $3}'`
OLDUO2=`grep 00401 $TEMPFILE | awk '{print $3}'`
OLDUO3=`grep 00402 $TEMPFILE | awk '{print $3}'`
OLDUO4=`grep 00403 $TEMPFILE | awk '{print $3}'`

# Clean TmpFile
rm -f $TEMPFILE

# Summ TCP old packets
SOLDTIO=$(($OLDTI1+$OLDTI2+$OLDTI3+$OLDTI4 \
+$OLDTO1+$OLDTO2+$OLDTO3+$OLDTO4))

# Summ UDP old packets
SOLDUIO=$(($OLDUI1+$OLDUI2+$OLDUI3+$OLDUI4 \
+$OLDUO1+$OLDUO2+$OLDUO3+$OLDUO4))

# Fetch TCP curr packets
NEWTI1=`ipfw -a list | grep 00300 | awk '{print $2}'`
NEWTI2=`ipfw -a list | grep 00301 | awk '{print $2}'`
NEWTI3=`ipfw -a list | grep 00302 | awk '{print $2}'`
NEWTI4=`ipfw -a list | grep 00303 | awk '{print $2}'`
NEWTO1=`ipfw -a list | grep 00300 | awk '{print $3}'`
NEWTO2=`ipfw -a list | grep 00301 | awk '{print $3}'`
NEWTO3=`ipfw -a list | grep 00302 | awk '{print $3}'`
NEWTO4=`ipfw -a list | grep 00303 | awk '{print $3}'`

# Summ TCP curr packets
SNEWTIO=$(($NEWTI1+$NEWTI2+$NEWTI3+$NEWTI4 \
+$NEWTO1+$NEWTO2+$NEWTO3+$NEWTO4))

# Fetch UDP curr packets
NEWUI1=`ipfw -a list | grep 00400 | awk '{print $2}'`
NEWUI2=`ipfw -a list | grep 00401 | awk '{print $2}'`
NEWUI3=`ipfw -a list | grep 00402 | awk '{print $2}'`
NEWUI4=`ipfw -a list | grep 00403 | awk '{print $2}'`
NEWUO1=`ipfw -a list | grep 00400 | awk '{print $3}'`
NEWUO2=`ipfw -a list | grep 00401 | awk '{print $3}'`
NEWUO3=`ipfw -a list | grep 00402 | awk '{print $3}'`
NEWUO4=`ipfw -a list | grep 00403 | awk '{print $3}'`

# Summ UDP curr packets
SNEWUIO=$(($NEWUI1+$NEWUI2+$NEWUI3+$NEWUI4 \
+$NEWUO1+$NEWUO2+$NEWUO3+$NEWUO4))

# Diff old/curr packets
DIFFTIO=$(($SNEWTIO-$SOLDTIO))
DIFFUIO=$(($SNEWUIO-$SOLDUIO))

# Prob all result
echo $DIFFTIO
echo $DIFFUIO
Selanjutnya hasilnya tinggal ditampilkan ke MRTG atau RRDTool. Dibawah ini saya coba menggunakan MRTG:
Target[ipfw.tu]: `/usr/local/bin/ipfw.tu`
Title[ipfw.tu]: IPFW TCP/UDP Packets Summary
Colours[ipfw.tu]: DODGERBLUE#1E90FF,BLUE#0000FF,DODGERBLUE#1E90FF,BLUE#0000FF
RouterUptime[ipfw.tu]: local@localhost
MaxBytes[ipfw.tu]: 30000
AbsMax[ipfw.tu]: 30000
YTics[ipfw.tu]: 10
PageTop[ipfw.tu]: IPFW TCP/UDP Packets Summary
YLegend[ipfw.tu]: Packets/5 Min
ShortLegend[ipfw.tu]:
LegendI[ipfw.tu]: TCP
LegendO[ipfw.tu]: UDP
Legend1[ipfw.tu]:
Legend2[ipfw.tu]:
Options[ipfw.tu]: gauge, growright, avgpeak, integer, absolute, pngdate


Selamat mencoba :-)