BAB 3 PERANCANGAN SISTEM 3.1 Perancangan Program Program yang dibuat penulis bertujuan untuk menangkap paket-paket data yang penulis inginkan pada komputer di jaringan berbeda. Agar tujuan dari pembuatan program dapat berjalan sesuai yang diinginkan, maka penulis membuat 3 buah program yang masing-masing mempunyai kegunaannya tersendiri. Program-program yang dibuat penulis yaitu : Program Sniffer. Program ini nantinya akan dijalankan di komputer yang ingin dipantau paketpaket datanya. Program ini bertujuan untuk menangkap paket-paket data yang keluar masuk pada komputer tersebut dan mengirimkan paket-paket data tersebut ke program server. Program Server. Program ini bertujuan sebagai penghubung antara program sniffer dan program admin. Dikarenakan penulis ingin memantau paket-paket data pada komputer di jaringan berbeda, maka diperlukanlah sebuah program untuk sebagai penghubung antara program sniffer dan program admin yang berada pada jaringan berbeda tersebut. Jika kedua jaringan yang berbeda melalui perantara internet, maka program server ini harus ditempatkan pada komputer yang mempunyai IP Public. 44
45 Program Admin Program ini bertujuan untuk penerima paket-paket data hasil pantauan dari program sniffer. Program ini juga sebagai program yang memerintahkan program sniffer untuk bekerja. 3.2 Perancangan Proses penulis : Berikut adalah cara kerja secara umum dari tiga program yang dibuat oleh Gambar 3.1 Proses Kerja Program Secara Umum Secara singkat, cara kerja secara umum dari program-program yang dibuat oleh penulis adalah sebagai berikut : Untuk memberi perintah pada program sniffer, maka program admin harus mengirim data yang berupa perintah ke server. Program server bertugas sebagai perantara program sniffer dan program admin. Data yang berupa perintah tersebut dikirimkan kembali oleh program server ke program sniffer. Program sniffer menerima perintah lalu melaksanakan perintah itu. Apabila perintahnya berupa menjalankan penangkapan paket-paket data, maka
46 program sniffer mulai memantau paket-paket data yang keluar masuk dari komputer tersebut. Paket-paket data yang keluar masuk dari komputer dimana program sniffer dijalankan ditangkap oleh program sniffer. Hasil tangkapan paket-paket data tersebut dikirim oleh program sniffer menuju ke program server. Paket-paket data kiriman dari program sniffer diterima oleh program server. Program server kemudian meneruskan paket-paket data tersebut ke program admin. Program admin menerima paket-paket data tersebut dan kemudian menampilkannya. Secara singkat cara kerja proses penangkapan paket-paket data sebagai berikut : Ketika NIC (Network Interface Card) bekerja secara normal (mode promiscuous tidak menyala), NIC tersebut memeriksa semua paket-paket data yang lewat. NIC tersebut memeriksa apakah berisi MAC Address NIC tersebut pada paket-paket yang lewat. Jika MAC Address tersebut cocok maka paket data tersebut boleh lewat ke layer selanjutnya. Apabila paket data tersebut tidak cocok maka paket data tersebut tidak dipedulikan. Program packet sniffer bekerja diatas layer physical (NIC), jadi hanya paketpaket yang telah lewat layer tersebut yang bisa ditangkap oleh packet sniffer. Berikut adalah gambar yang akan terjadi jika mode promiscuous dimatikan.
47 Gambar 3.2 Mode Promiscuous Mati Ketika mode promiscuous pada NIC dinyalakan, NIC akan menerima semua paket-paket data yang datang tanpa melihat paket tersebut berisi MAC Address NIC tersebut atau tidak. Semua paket data bisa melewati NIC untuk menuju ke layer selanjutnya. Jadi promiscuous mode pada NIC berarti membuat NIC untuk menerima semua data yang lewat. Program Packet sniffer menunggu adanya paket data yang telah melewati layer physical, jika ada maka paket data tersebut akan ditangkap oleh packet sniffer. Gambar 3.3 Mode Promiscuous Hidup
48 3.3 Flowchart 3.3.1 Flowchart Program Sniffer Gambar 3.4 Flowchart Program Sniffer
49 3.3.2 Flowchart Program Server Gambar 3.5 Flowchart Program Server
50 3.3.3 Flowchart Program Admin Gambar 3.6 Flowchart Program Admin
51 3.4 Diagram Aliran Data 3.4.1 Context Diagram 3.4.2 Diagram Nol Gambar 3.7 Context Diagram Gambar 3.8 Diagram Nol
52 3.4.3 Diagram Rinci Gambar 3.9 Diagram Rinci 1.0 3.5 Perancangan Format Pesan Untuk memudahkan komunikasi data antara program sniffer, program server dan program admin, maka penulis merancang format pesan yang berisi perintah yang dapat dimengerti masing-masing program. Adapun format pesan tersebut adalah sebagai berikut : 3.5.1 Format Pesan Pada Program Sniffer Program sniffer mengenali pesan yang berisi perintah-perintah dengan format sebagai berikut :
53 Perintah untuk mendeteksi interface-interface Perintah untuk mendeteksi interface-interface yang ada di komputer dimana program sniffer berjalan yaitu list. Sebagai catatan, karena library yang penulis pakai dalam program ini terdapat beberapa bug maka ada beberapa interface yang tidak terdeteksi. Berikut adalah format perintahnya : Gambar 3.10 Format Perintah List Pada Program Sniffer Format perintah ini merupakan format perintah yang tetap, dalam arti program sniffer ini hanya mau mendeteksi interfaceinterface yang ada hanya jika menerima perintah list. Tanda ~ diperlukan untuk sebagai pemisah. Jadi walaupun misalnya diberi perintah berupa list~hapus, program sniffer hanya akan memproses list~ saja sesuai dengan format perintahnya sedangkan kata-kata setelah list~ akan tidak dianggap. Perintah untuk memulai penangkapan paket data Perintah untuk memulai penangkapan paket-paket data yang keluar masuk pada komputer dimana program sniffer berjalan yaitu start. Berikut adalah format perintahnya : Gambar 3.11 Format Perintah Start Pada Program Sniffer
54 Untuk start dan ~ merupakan format tetap. Sedangkan untuk interface yang dipilih ini berupa tipe data angka yang berisi mengenai interface keberapa yang ingin dipantau. Lalu untuk penyaringan paket data pada port yang dipilih ini berupa tipe data angka yang berisi mengenai port keberapa yang ingin dipantau. Penulis memakai penyaringan paket data pada port karena jika penulis tidak memakai penyaringan paket data maka program ini akan menangkap semua paket-paket data dan memberatkan kinerja program ini sendiri. Berikut adalah contoh dari format perintah ini. Misalkan perintah start~1~80 diterima oleh program sniffer, maka program sniffer akan memulai penangkapan paket data pada interface pertama dan melakukan penyaringan paket data pada port 80 (HTTP). Perintah untuk menghentikan penangkapan paket data Perintah untuk menghentikan penangkapan paket-paket data yaitu stop. Perintah stop digunakan untuk menghentikan proses penangkapan paket-paket data. Berikut adalah format perintahnya : Gambar 3.12 Format Perintah Stop Pada Program Sniffer Sama seperti perintah untuk mendeteksi interface-interface yang ada, format perintah ini merupakan format perintah yang tetap dalam arti program sniffer ini hanya mau menghentikan proses penangkapan paket-paket data jika menerima perintah stop.
55 Perintah untuk mengumpulkan informasi mengenai komputer sniffer Perintah untuk mengumpulkan informasi mengenai komputer sniffer dan mengirimkan informasi tersebut ke program admin yaitu info. Berikut adalah format perintahnya : Gambar 3.13 Format Perintah Info Pada Program Sniffer Sama seperti perintah untuk mendeteksi interface-interface yang ada, format perintah ini merupakan format perintah yang tetap dalam arti program sniffer ini hanya mau mengumpulkan informasi mengenai komputer sniffer dan mengirimkan informasi tersebut ke program admin jika menerima perintah info. Informasi-informasi yang dikumpulkan ketika menerima perintah info yaitu sistem operasi yang digunakan, nama komputer, nama user yang sedang dipakai, lama sistem operasi berjalan, dan list detail mengenai jaringan yang menyala. Informasi-informasi ini dikumpulkan dan dikirim ke program admin dengan bantuan program server. Perintah untuk menampilkan pesan dari admin Perintah untuk menampilkan pesan dari program admin yaitu message. Berikut adalah format perintahnya : Gambar 3.14 Format Perintah Message Pada Program Sniffer
56 Untuk message dan ~ merupakan format tetap. Sedangkan untuk pesan yang ingin ditampilkan bisa berupa apa saja sesuai keinginan dari pemakai program admin. Agar program sniffer dapat berjalan dengan lancar dalam menangkap paket-paket data yang keluar masuk maka perintah-perintah list, start, dan stop harus diberikan secara berurutan. Jika perintah-perintah diberikan secara acak misalnya stop, start, lalu list maka program sniffer tidak akan berjalan lancar. Untuk mengatasi hal ini maka penulis melakukan validasi pada program admin agar program admin memberikan perintah secara berurutan. Sedangkan untuk perintah info dan message dapat diberikan secara acak karena tidak mempengaruhi kinerja program sniffer. 3.5.2 Format Pesan Pada Program Server Khusus untuk program server, penulis membagi format pesan menjadi dua berdasarkan asal pesan tersebut, yaitu : 3.5.2.1 Format Pesan yang Dikirim Oleh Sniffer Pada Server Program server mengenali pesan yang dikirim oleh program sniffer dengan format sebagai berikut : Pesan yang berisi list interfaces Berikut adalah format pesan yang berupa data yang berisi mengenai list interfaces pada komputer dimana program sniffer dijalankan :
57 Gambar 3.15 Format Perintah List Interfaces Pada Program Server Ketika program server menerima pesan start_list_interfaces, maka program server menganggap pesan-pesan berikutnya merupakan pesan yang berisi data list interfaces sampai program server menerima pesan end_list_interfaces. Semua pesan tersebut dikirimkan oleh program server ke program admin tanpa mengalami pengubahan. Pesan yang berisi info mengenai komputer dimana program sniffer dijalankan Program server selalu meneliti data yang datang ke program server. Ketika program server menerima data yang berisi pesan yang berupa info mengenai komputer dimana program sniffer berjalan, program server otomatis menambahkan data tersebut. Berikut adalah format pesan yang berupa informasi yang dikirimkan oleh program sniffer :
58 Gambar 3.16 Format Perintah Info Sebelum Diubah Program Server Setiap kali program server mendeteksi pesan yang berisi info~, maka program server akan mengubah pesan tersebut menjadi seperti berikut : Gambar 3.17 Format Perintah Info Setelah Diubah Program Server Program server menambahkan pesan tersebut dengan informasi dari program sniffer yang mana yang mengirimkan informasi tersebut. Hal ini dilakukan agar program admin dapat mengetahui darimana asal pesan tersebut. Berikut adalah contohnya. Misalnya program sniffer ke-2 mengirimkan informasi yang diminta program admin. Program sniffer tersebut mengirim pesan info~os:windows. Ketika pesan tersebut sampai di program server, program server mendeteksi bahwa pesan tersebut berisi info~. Program server kemudian mengubah pesan tersebut menjadi 2~info~OS:Windows. Setelah pesan mengalami pengubahan, pesan dikirimkan program server ke program admin. Setelah itu tugas program adminlah yang bertugas menerjemahkan isi dari pesan tersebut.
59 Pesan yang berisi data berupa hasil penangkapan paket-paket data Hampir sama dengan kejadian program server yang mendeteksi adanya pesan yang berisi informasi mengenai komputer dimana program sniffer berjalan, maka ketika program server mendeteksi adanya pesan yang berisi data~ dalam data-data yang datang ke program server, program server kemudian menambahkan informasi mengenai dari program sniffer mana pesan itu berasal. Berikut adalah format pesan yang berupa informasi yang dikirimkan oleh program sniffer : Gambar 3.18 Format Perintah Data Sebelum Diubah Program Server Setiap kali program server mendeteksi pesan yang berisi data~, maka program server akan mengubah pesan tersebut menjadi seperti berikut : Gambar 3.19 Format Perintah Data Setelah Diubah Program Server Program server menambahkan pesan tersebut dengan informasi dari program sniffer yang mana yang mengirimkan informasi tersebut. Hal ini dilakukan agar program admin dapat mengetahui darimana asal pesan tersebut.
60 3.5.2.2 Format Pesan yang Dikirim Oleh Admin Pada Server Program server mengenali pesan yang dikirim oleh program admin dengan format sebagai berikut : Pesan yang berisi perintah untuk mengirim list sniffer yang terdeteksi oleh program server Perintah untuk mengirim list sniffer yang terdeteksi oleh program server yaitu list. Berikut adalah format perintahnya : Gambar 3.20 Format Perintah List Sniffer Pada Program Server Berbeda dengan program sniffer dimana untuk pemisah perintah digunakan tanda ~, pada program server pemisah perintah menggunakan tanda.:.. Ketika mendapat perintah list, program server segera mengirimkan list sniffer yang terdeteksi ke program admin. Pesan yang berisi perintah untuk melanjutkan perintah dari program admin ke program sniffer Perintah untuk melanjutkan perintah dari program admin ke program sniffer yaitu send. Program admin tidak akan mampu memberi perintah kepada program sniffer tanpa perintah send ini. Berikut adalah format perintahnya :
61 Gambar 3.21 Format Perintah Send Pada Program Server Untuk send dan.:. merupakan format tetap. Sedangkan untuk Sniffer ke-n ini berupa tipe data angka yang berisi mengenai program sniffer keberapa yang ingin dikirimi perintah. Lalu untuk perintah untuk sniffer ini berupa isi perintah untuk program sniffer. Misalnya pesan yang berupa send.:.3.:.list~, pesan tersebut berarti menyuruh agar program server mengirim perintah list~ ke program sniffer ke-3. Pesan yang berisi perintah untuk mengakhiri koneksi Perintah untuk mengakhiri koneksi antara program admin dengan program server yaitu quit. Berikut adalah format perintahnya : Gambar 3.22 Format Perintah Quit Pada Program Server Format perintah ini merupakan format perintah yang tetap, dalam arti program server ini hanya mau mengakhiri koneksi dengan program admin hanya jika menerima perintah quit. 3.5.3 Format Pesan Pada Program Admin Program server mengenali pesan dengan format sebagai berikut :
62 Pesan yang berisi list sniffer yang terdeteksi oleh program server Berikut adalah format pesan yang berupa data yang berisi mengenai list sniffer yang terdeteksi oleh program server : Gambar 3.23 Format Perintah List Sniffer Pada Program Server Ketika program admin menerima pesan start_list_sniffer, maka program admin akan menganggap pesan-pesan berikutnya merupakan pesan yang berisi data list sniffer sampai program server menerima pesan end_list_sniffer. Hanya isi list sniffer yang akan ditampilkan, sedangkan pesan start_list_sniffer dan pesan end_list sniffer tidak akan ditampilkan karena kedua pesan itu hanya berfungsi penanda apakah pesan yang datang merupakan isi list sniffer atau bukan. Pesan yang berisi list interfaces Berikut adalah format pesan yang berupa data yang berisi mengenai list interfaces pada komputer dimana program sniffer dijalankan :
63 Gambar 3.24 Format Perintah List Interfaces Pada Program Server Ketika program admin menerima pesan start_list_interfaces, maka program admin akan menganggap pesan-pesan berikutnya merupakan pesan yang berisi data list interfaces sampai program server menerima pesan end_list_interfaces. Hanya isi list interfaces yang akan ditampilkan, sedangkan pesan start_list_interfaces dan pesan end_list interfaces tidak akan ditampilkan karena kedua pesan itu hanya berfungsi penanda apakah pesan yang datang merupakan isi list interfaces atau bukan. Pesan yang berisi hasil capture paket-paket data oleh program sniffer Berikut adalah format pesan yang berupa hasil capture paketpaket data oleh program sniffer : Gambar 3.25 Format Perintah Data Pada Program Server Ketika program admin mengecek pesan dan ternyata pesan tersebut mengandung kata kunci data, program admin akan
64 menerjemahkan pesan yang berisi hasil capture paket-paket data tersebut dan menampilkannya. 3.6 Perancangan Sistem Penyaringan Paket-Paket Data Yang Ditangkap Agar program dapat berjalan secara efektif maka penulis merancang suatu sistem penyaringan agar program sniffer menangkap hanya paket-paket data yang tertentu saja. Jika tidak dilakukan penyaringan maka program sniffer akan menangkap semua paket data termasuk paket data yang dikirimkan ke program admin, akibatnya akan terjadi pengulangan pengiriman dan penangkapan paket data secara terus menerus. Gambar 3.26 Proses Yang Terjadi Jika Tidak Adanya Penyaringan Data Diatas adalah contoh jika tidak terdapat penyaringan paket-paket data yang ditangkap. Program akan menjadi tidak stabil karena terjadi pengulangan
65 tanpa henti. Oleh karena itu, penulis merancang suatu sistem penyaringan yang terbagi menjadi beberapa tahap, yaitu : Tahap pertama, penyaringan berdasarkan protocol Tahap pertama dalam sistem penyaringan yang dirancang oleh penulis adalah penyaringan berdasarkan protocol. Protocol-protocol yang digunakan dalam sistem penyaringan tahap ini adalah protocol TCP dan UDP. Alasan penulis memakai kedua protocol tersebut karena penulis merasa kedua protocol tersebut yang memiliki sebagian besar data yang penting. Jika data yang datang bukan merupakan data yang memakai protocol TCP dan UDP maka data tidak akan ditangkap. Sebaliknya, jika data yang datang memakai protocol TCP dan UDP maka akan dilanjutkan ke penyaringan tahap kedua. Tahap kedua, penyaringan berdasarkan port number Tahap kedua penyaringan berdasarkan port number. Port number ini ditentukan oleh pemakai program admin. Misalnya pemakai program admin menentukan penyaringan berdasarkan port 80 maka hanya data yang memakai port 80 yang ditangkap dan tentu saja juga berprotocol TCP dan UDP karena untuk sampai ke tahap kedua penyaringan ini harus lolos dari penyaringan tahap pertama. Pemakai program admin juga bisa menentukan penyaringan terhadap semua port jadi semua data yang lolos dari penyaringan tahap pertama akan ditangkap semua tapi dengan pengecualian terhadap satu port yaitu port number yang dipakai program-program yang dirancang penulis. Settingan awal untuk port number pada program-program yang dirancang penulis adalah
66 port 7080. Penulis merancang agar data yang menggunakan port 7080 tidak akan bisa ditangkap karena port yang digunakan dalam program sniffer, program admin, dan program server untuk berkomunikasi adalah port 7080 (port ini bisa diubah). Pengecualian terhadap port tersebut dirancang agar tidak terjadi pengulangan penangkapan dan pengiriman paket-paket data yang tanpa henti. Jadi jika settingan awal port number memakai port 7080 maka port yang bisa digunakan dalam tahap penyaringan ini adalah port 1-7079 dan port 7081-65535. Tahap ketiga, penyaringan berdasarkan kata kunci Tahap ketiga penyaringan ini dilakukan khusus untuk data yang lolos tahap kedua dan berport 80 (HTTP) dan 21(FTP). Alasan penulis merancang penyaringan yang khusus untuk port 80 dan 21 adalah karena kedua port ini yang paling sering digunakan untuk mendownload file. Ketika komputer dimana program sniffer berjalan itu mendownload file, program sniffer akan menangkap paket-paket data tersebut lalu mengirimkannya ke program admin. Paket-paket data tersebut tidak berguna bagi pemakai program admin karena paket-paket data tersebut ketika diterjemahkan ke dalam bentuk text akan tidak berarti apa-apa. Agar tidak banyak data yang tidak berguna yang dikirim oleh program sniffer maka penulis merancang penyaringan lebih lanjut terhadap kedua port ini. Penulis menyadari penyaringan pada tahap ini kurang sempurna karena masih ada port-port lain yang dapat digunakan untuk download file
67 Untuk data yang memakai port 80 (HTTP), penulis merancang agar data-data tersebut disaring berdasarkan kata kunci GET, HEAD dan POST. Data-data yang datang dicek isinya apakah mengandung kata kunci GET atau HEAD atau POST atau tidak. Jika mengandung kata kunci tersebut maka data tersebut ditangkap. Jika tidak mengandung kata kunci tersebut maka data tersebut tidak ditangkap. Protocol HTTP terbagi menjadi empat versi, yaitu HTTP/0.9, HTTP/1.0, HTTP/1.1 dan HTTP/1.2. Versi HTTP/1.0 ke atas merupakan spesifikasi protocol HTTP yang paling sering digunakan. Versi HTTP/0.9 hanya mampu menangani perintah GET sehingga spesifikasi ini sudah jarang digunakan karena client tidak bisa mengirim informasi ke server. Berikut adalah perintah-perintah yang didukung oleh versi HTTP/1.0 : GET. Perintah ini digunakan untuk mengambil file dari web server. HEAD. Perintah ini digunakan untuk meminta informasi-informasi. POST. Perintah ini digunakan untuk mengirimkan informasi ke web server. Versi HTTP/1.1 dan HTTP/1.2 mempunyai beberapa perintah tambahan. Oleh dikarenakan versi HTTP/1.0 masih banyak dipakai maka penulis merancang penyaringan pada tahap ini berdasarkan perintah-perintah pada HTTP/1.0. Untuk data yang memakai port 21 (FTP), penulis merancang agar data-data tersebut disaring berdasarkan kata kunci USER dan PASS. Data-data yang datang dicek isinya apakah mengandung kata kunci USER dan PASS atau tidak. Jika mengandung kata kunci tersebut maka data
68 tersebut ditangkap. Jika tidak mengandung kata kunci tersebut maka data tersebut tidak ditangkap. Perintah USER pada FTP digunakan untuk mengirimkan username pada FTP server. Sedangkan perintah PASS digunakan untuk mengirimkan password dari username yang dikirimkan. 3.7 Perancangan Layar 3.7.1 Perancangan Layar Pada Program Admin 3.7.1.1 Perancangan Layar Menu Utama Gambar 3.27 Perancangan Layar Menu Utama Program Admin
69 Gambar 3.27 merupakan rancangan layar Menu Utama pada program admin. Pada layar Menu Utama ini terdapat berbagai fitur-fitur yang dirancang oleh penulis, antara lain : Connect/Disconnect. Menu ini untuk membuat/memutuskan koneksi dengan program server. Refresh List. Menu ini berguna untuk memperbaharui list sniffer. Menu ini bisa diakses hanya ketika koneksi dengan program server telah terbuat. Start Capture. Menu ini berfungsi untuk memerintahkan program sniffer untuk segera memulai proses penangkapan paket-paket data. Menu ini hanya bisa diakses ketika koneksi dengan program server telah terbuat dan proses penangkapan paket-paket data pada program sniffer tersebut belum dimulai. Stop Capture. Menu ini berfungsi untuk memerintahkan program sniffer untuk segera menghentikan proses penangkapan paket-paket data. Menu ini hanya bisa diakses ketika koneksi dengan program server telah terbuat dan proses penangkapan paket-paket data pada program sniffer tersebut sudah dimulai. Info Sniffer. Menu ini untuk memanggil layar Menu Info Sniffer. Open Folder Log. Menu ini untuk membuka folder dimana log file berada.
70 Hide To Tray. Menu ini berguna untuk menyembunyikan layar Menu Utama ini ke dalam tray bar (pada Desktop Windows ada di sebelah kanan bawah). Exit. Menu ini untuk menghentikan program admin. Kirim Pesan. Menu ini untuk mengirim pesan ke program sniffer Option. M enu ini untuk mengeset sistem penyaringan paketpaket data dengan port number yang dipilih. 3.7.1.2 Perancangan Layar Menu Info Sniffer Gambar 3.28 Perancangan Layar Menu Info Program Admin Layar Menu Info Sniffer akan muncul ketika Menu Info Sniffer Pada Menu Utama diklik. Menu Info Sniffer ini berisi mengenai informasi-informasi mengenai komputer dimana program sniffer dijalankan, misalnya : sistem operasi yang digunakan, nama komputer, nama user yang sedang dipakai, lama
71 sistem operasi berjalan, dan list detail mengenai jaringan yang menyala. 3.7.2 Perancangan Layar Pada Program Server Dikarenakan program server berjalan tanpa membutuhkan interaksi dengan pemakai maka penulis membuat program server dalam bentuk Console Application, bukan dalam bentuk Form Application. Sehingga penulis tidak merancang User Interface untuk program server. Gambar 3.29 Perancangan Layar Menu Message Program Sniffer 3.7.3 Perancangan Layar Pada Program Sniffer Program sniffer dirancang sedemikian rupa sehingga program sniffer berjalan secara diam-diam. Oleh karena itu program sniffer tidak mempunyai tampilan layar kecuali ketika progam admin mengirimkan pesan ke program sniffer. Gambar 3.30 Perancangan Layar Menu Message Program Sniffer