Membuat Regex diproxy

apa fungsi helper storeurl atau storeid?
fungsi storeurl atau storeid adalah untuk menulis ulang “URL-URL dinamis” ke alamat “URL statis” supaya bisa di-“HIT” oleh SQUID
ini versi saya lho penjelasannya, boleh beda dengan versi kawan2. Lha wong Quick Count Capres aja boleh beda koq :-D
Apakah URL dinamis tidak bisa di-“HIT” oleh SQUID?
mari kita lihat contoh dibawah ini
saya coba download MP3 surat yasin dari 4shared di alamat http://www.4shared.com/mp3/WWBGUKwf/036_Surat_Yasin_.htm
ternyata untuk konten mp3 surat yasin yang kita download diarahkan ke mesin-mesin CDN dengan alamat URL yang dinamis
http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-220825-db6d3b73&lgfp=2000
http://dc474.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-222355-d60ed0a8&lgfp=2000
http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-230027-59959c01&lgfp=2000
URL diatas itu URL “dinamis” dengan konten yg “sama”
TAPI SQUID akan menganggap kedua konten diatas adalah berbeda, sehingga akan selalu “MISS” , padahal sudah didownload berulang-ulang
cek access.log
1405030243.320 110241 192.168.0.251 TCP_MISS/200 12753873 GET http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-220825-db6d3b73&lgfp=2000 – ORIGINAL_DST/199.101.133.64 audio/mpeg
1405031073.012  14070 192.168.0.251 TCP_MISS/200 12753873 GET http://dc474.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-222355-d60ed0a8&lgfp=2000 – ORIGINAL_DST/78.140.186.28 audio/mpeg
1405033362.093 114522 192.168.0.251 TCP_MISS/200 12753873 GET http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-230027-59959c01&lgfp=2000 – ORIGINAL_DST/199.101.133.64 audio/mpeg
Bagaimana supaya bisa ter-“HIT” ?
Nah, seperti udh disebutkan diatas, disini kita butuh helper storeurl/storeid
helper ini akan mencocokkan pola URL-URL dinamis diatas dengan “regex” dan menulis ulang/mengganti URL diatas ke “URL statis”
Apa itu Regex?
Regular Expression atau regex adalah pattern/pola yg digunakan untuk mencocokkan teks
Alat bantu
Saya sih msh bodoh buat regex beginian jadi mesti pake alat bantu :-D. Alat bantu saya ketika membuat regex adalah website rubular.com. ntar kalo sudah terbiasa, ga perlu alat bantu lagi.
Analisa log
OK, lanjut kita buat regex dari URL-URL diatas. Kalo saya biasanya ambil beberapa URL dari access.log untuk dianalisa pola URL nya
Link 1 : http://www.4shared.com/mp3/WWBGUKwf/036_Surat_Yasin_.htm
http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-220825-db6d3b73&lgfp=2000
http://dc474.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-222355-d60ed0a8&lgfp=2000
http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-230027-59959c01&lgfp=2000
Pertama adalah, kita cari dulu bagian dari ketiga URL diatas yang “dinamis” atau yang berubah-ubah. yang saya cetak tebal adalah bagian2 dari URL yang dinamis
1. dc436,dc474
2. tsid=20140710-220825-db6d3b73&lgfp=2000 , 20140710-222355-d60ed0a8&lgfp=2000 , 20140710-230027-59959c01&lgfp=2000 
lanjut, kita buka website rubular.com
1. masukin ketiga URL diatas pada kolom “Your test string”



2. copy 1 URL dari kolom “Your test string” , lalu paste di kolom “Your Regular Expression”



3. Ok. Sekarang liat ada pesan error “Forward slashes must be escaped”. tambahkan karakter “\” sebelum karakter “/” pada semua bagian URL di kolom “Your Regular Expression”



4. sekarang muncul pesan “No Matches” artinya regex yang kita buat belum cocok. Tenang saudara-saudara. Mari kita utak atik :-D. hapus “dc436.” ganti menjadi “.*



5. masih muncul pesan “No Matches” artinya regex yang kita buat belum cocok. Sabar-sabar :-D . sekarang hapus “?tsid=20140710-220825-db6d3b73&lgfp=2000” ganti menjadi “.*



6. Asyeek asyeek..udh muncul di kolom “Match result” berarti regex yang kita buat sudah benar. Mudah pake banget ya ? :-D
pertanyaan berikutnya adalah apa sih arti dari “.*” ? 

 
saya ambil arti karakter . dan * dari website rubular jg sebagai referensi pada bagian regex quick reference
. = Any single character ( 1 karakter apa saja) misal d c 1 2 3 & * + – (termasuk spasi)



* = Zero or more (nol atau lebih). tanda bintang diletakkan setelah sebuah karakter, yang artinya karakter tersebut dapat ada nol atau lebih perulangan yang diharapkan dalam pola.
jadi .* artinya nol atau lebih pengulangan karakter apa aja boleh
Kalau sudah cocok, maka regex yang sudah kita buat tadi yaitu ^http:\/\/.*4shared\.com\/(download\/WWBGUKwf\/036_Surat_Yasin_.mp3).* tinggal kita masukkan ke script helper storeurl atau storeid
Membuat helper storeid (SQUID3X)
pico /etc/squid/pembantuku.pl
copy paste script dibawah ini
#!/usr/bin/perl
$|=1;
while (<>) {
@X = split;
$x = $X[0] . ” “;
if ($X[1]=~m/^http:\/\/.*4shared.com\/(download\/WWBGUKwf\/036_Surat_Yasin_.mp3).*/) {
print $x . “OK store-id=http://download.di4shared.squidlover.internal/$1\n”;
} else {
print $x . “OK store-id=$X[1]\n”;
}
}
simpan file
jalankan command chmod +x /etc/squid/pembantuku.pl
backup script jg bisa diliat di >> http://pastebin.com/4VNnVahb
buka file squid.conf, masukkan config dibawah ini :
#buat ACL dengan url_regex untuk 4shared
acl 4shared url_regex -i ^http:\/\/.*4shared.com\/(download\/WWBGUKwf\/036_Surat_Yasin_.mp3).*
store_id_program /etc/squid/pembantuku.pl
store_id_children 1 startup=1 idle=1 concurrency=10000
store_id_access allow 4shared
store_id_access deny all
Simpan squid.conf
jalankan command squid -k reconfigure lalu service squid restart
test dah buka http://www.4shared.com/mp3/WWBGUKwf/036_Surat_Yasin_.htm  
Hasilnya
access.log
Anda bisa liat dibawah ini dari domain dc474.4shared.com atau dc436.4shared.com bisa HIT
1405086972.677   2133 192.168.6.5 TCP_HIT/200 12753688 GET http://dc474.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140711-065534-7242007a&lgfp=2000 – HIE
R_NONE/- audio/mpeg
1405087089.933   1875 192.168.6.5 TCP_HIT/200 12753688 GET http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140711-065739-9d6cb268&lgfp=2000 – HIE
R_NONE/- audio/mpeg
cache.log dengan debug options 84,9
dibawah ini terlihat proses rewriting URL dinamis ke URL statis yang kita buat di helper storeid
2014/07/11 13:56:10.544 kid1| helper.cc(415) helperSubmit:  buf[153]=http://dc474.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140711-065534-7242007a&lgfp=2000 192.168.6.5/- – GET myip=78.140.186.28 myport=80
2014/07/11 13:56:10.544 kid1| helper.cc(906) helperHandleRead: helperHandleRead: 99 bytes from store_id #Hlpr0
2014/07/11 13:56:10.544 kid1| helper.cc(915) helperHandleRead:  accumulated[99]=0 OK store-id=http://download.di4shared.squidlover.internal/download/WWBGUKwf/036_Surat_Yasin_.mp3
2014/07/11 13:58:08.140 kid1| helper.cc(415) helperSubmit:  buf[154]=http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140711-065739-9d6cb268&lgfp=2000 192.168.6.5/- – GET myip=199.101.133.64 myport=80
2014/07/11 13:58:08.140 kid1| helper.cc(906) helperHandleRead: helperHandleRead: 99 bytes from store_id #Hlpr0
2014/07/11 13:58:08.140 kid1| helper.cc(915) helperHandleRead:  accumulated[99]=0 OK store-id=http://download.di4shared.squidlover.internal/download/WWBGUKwf/036_Surat_Yasin_.mp3
Apakah problem download dari 4shared selesai?
Tentu saja belum, saat ini mungkinAnda senang karena download dari link http://www.4shared.com/mp3/WWBGUKwf/036_Surat_Yasin_.htmsudah bisa “HIT”, bagaimana jika Anda coba download dari 4shared link yanglain misalnya http://www.4shared.com/mp3/9yI4I09b/Al-Quran_Surah_Ar_rahman-_Ahma.htm
Opsss….MISSlagi. Anda tau kenapa MISSlagi? Ya..karena kita hanya buat regex khusus link ini http://www.4shared.com/mp3/WWBGUKwf/036_Surat_Yasin_.htm  saja. OK, berarti kita harus modifikasilagi regex yang sudah kita buat supaya semua download dari 4shared bisater-“HIT”.
Bagaimanacaranya?
Kita harus kumpulkan log (ambildari file access.log) dari download di 4shared sebanyak-banyaknya sehingganantinya mempermudah kita membuat regex-nya.
Berikut dibawah ini adalah log URL dinamis dari download di 4shared :
http://dc313.4shared.com/download/wZqn2XnC/Padi_-_Kasih_Tak_Sampai.mp3?tsid=20140712-020244-61c996d&lgfp=2000
http://dc100.4shared.com/download/wZqn2XnC/Padi_-_Kasih_Tak_Sampai.mp3?tsid=20140712-021130-345586b3&lgfp=2000
http://dc480.4shared.com/download/9yI4I09b/Al-Quran_Surah_Ar_rahman-_Ahma.mp3?tsid=20140710-232225-d77b2969&lgfp=2000
http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-220825-db6d3b73&lgfp=2000
http://dc474.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-222355-d60ed0a8&lgfp=2000
Sekarang coba buka kembali website rubular.com
1. Copy semua URL diatas ke kolom “Your test string”


2. Masukkan regex yang sudah kita buat sebelumnya kekolom “Your regular expression”



Anda bisa lihat bahwa hanya download dari link surat yasin yang baru“match”
3. Coba lihat pada URL dinamis diatas, path dan nama file yangberubah-ubah pada setiap link download di 4shared adalah setelah download/.coba perhatikan yang saya cetak tebal:
http://dc313.4shared.com/download/wZqn2XnC/Padi_-_Kasih_Tak_Sampai.mp3?tsid=20140712-020244-61c996d&lgfp=2000
http://dc100.4shared.com/download/wZqn2XnC/Padi_-_Kasih_Tak_Sampai.mp3?tsid=20140712-021130-345586b3&lgfp=2000
http://dc480.4shared.com/download/9yI4I09b/Al-Quran_Surah_Ar_rahman-_Ahma.mp3?tsid=20140710-232225-d77b2969&lgfp=2000
http://dc436.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-220825-db6d3b73&lgfp=2000
http://dc474.4shared.com/download/WWBGUKwf/036_Surat_Yasin_.mp3?tsid=20140710-222355-d60ed0a8&lgfp=2000
4. Nah, bagian ini yang akan kita buat regexnya. Masih sama dengansebelumnya kita gunakan saja regex .* untuk menggantikan path dan namafile yang berubah-ubah tadi. Mudah kan ? :-D
5. Hapus WWBGUKwf\/036_Surat_Yasin_.mp3

6. Ganti dengan .*
Taaaraaaaa…sukses :-D . Semua URL dinamis sudah match

Tugas berikutnya adalah mengganti config pada squid.conf dan merubahscript pada file pembantuku.pl
Filepembantuku.pl UPDATE!
#!/usr/bin/perl
$|=1;
while (<>) {
@X = split;
$x = $X[0] . ” “;
if ($X[1]=~m/^http:\/\/.*4shared.com\/(download\/.*).*/) {
print $x . “OKstore-id=http://download.di4shared.squidlover.internal/$1\n”;
} else {
print $x . “OKstore-id=$X[1]\n”;
}
}
Filesquid.conf UPDATE!
#buat ACL dengan url_regex untuk4shared (ambil dari regex 4shared diatas)
acl4shared url_regex -i ^http:\/\/.*4shared.com\/(download\/.*).*
Jalankancommand squid -k reconfigure dan service squid restart
Sekarang test download dari link apapundi 4shared. Aktifkan debug options 84,9 dan cek cache.log , pastikan semua URL dinamis dari 4shared sudah di tulisulang ke URL statis http://download.di4shared.squidlover.internal/path/namafile
Sepertidibawah ini :
http://download.di4shared.squidlover.internal/download/wZqn2XnC/Padi_-_Kasih_Tak_Sampai.mp3
http://download.di4shared.squidlover.internal/download/9yI4I09b/Al-Quran_Surah_Ar_rahman-_Ahma.mp3
http://download.di4shared.squidlover.internal/download/WWBGUKwf/036_Surat_Yasin_.mp3
UPDATE
Website lain sejenis rubular.com adalah regexr.com. Di websiteregexr.com, Anda juga bisa menampilkan langsung replacement/substitution ataualamat URL statis yang akan kita masukkan di helper storeurl atau storied.
http://s2.postimg.org/dk5cbf7jd/regexr.png

0 Response to "Membuat Regex diproxy"

Post a Comment

Ilmu ibarat sempax, kita harus menggunakannya, tapi tak perlu memamerkannya