III. PERANCANGAN SISTEM
3.4 Perancangan Perangkat Lunak
Pada perancangan perangkat lunak ini penulis membuat program untuk meng-capture data chatting dalam Yahoo Messenger dengan diberi nama snifit. Program snifit ini terdapat beberapa program yang saling berkaitan.
Snifit adalah suatu program untuk meng-capture data yang dikirimkan sebagai bagian dari koneksi TCP (arus), dan menyimpan data dengan cara yang tepat untuk analisa protokol atau debugging. Suatu program seperti “tcpdump” yang menunjukkan ringkasan dari paket-paket di atas jaringan, tetapi biasanya tidak menyimpan data.
Snifit menyimpan semua data yang ditangkap dan menyimpannya di dalam file-file dan mempunyai nama-nama dari form
128.129.130.131.02345-010.011.012.013.45103
di mana isi-isi dari file akan menjadi data tersebut dikirimkan dari host
128.129.131.131 port 2345, kepada host 10.11.12.13 port
45103.
3.4.1. Sistem Utama
Perancangan program Snifit ini mengontrol 4 proses yang ada didalam sistem utama. Empat proses tersebut meliputi :
1. Proses 1 adalah main.c 2. Proses 2 adalah flow.c 3. Proses 3 adalah datalink.c 4. Proses 4 adalah tcpip.c
Pada sistem utama ini, keyboard akan menginputkan karakter. Lalu program akan melihat interface. Setelah pengecekan interface selesai maka program akan melihat paket data yang melewati jaringan, pada proses ini program akan membedakan apakah paket berupa IP atau paket berupa data. Setelah paket data ter-capture maka proses selanjutnya adalah membuat struktur arus data dari hasil capture file.
Compile program akan menghasilkan file berextension .exe, seperti halnya pada program installan dalam windows. Program Snifit terbuat dari beberapa file sumber, maka harus menjalankan utility "make". Maka harus menulis sesuatu yang dinamakan makefile, yang mana memberitahu kompiler tentang keterkaitan/ketergantungan antara file sumber(source
Gambar 3.4. Flowchart Sistem Utama.
3.4.2. Proses pada Sistem Utama
1. Proses 1 adalah main.c
Program ini berfungsi untuk menginputkan masukan dari keyboard yang kemudian dari inputan tersebut akan muncul sebuah statement yang sesuai dengan apa yang diinputkan.
Dalam program main.c ini terdapat fungsi print usage, yang berfungsi untuk menampilkan data yang dapat diinputkan melalui keyboard serta penjelasan fungsi masing-masing inputan tersebut. Terdapat pernyataan switch dalam proses main.c. Pernyataan switch ini digunakan untuk menjalankan salah satu pernyataan dari beberapa kemungkinan pernyataan, berdasarkan nilai dari sebuah ungkapan dan nilai penyeleksi.
2. Proses 2 adalah flow.c
Program ini berfungsi untuk membuat struktur arus data. Dalam program ini terdapat 3 fungsi, yaitu :
a. Create flow state, fungsi ini befungsi untuk menentukan letak tiap paket data.
b. Open file, fungsi ini berfungsi untuk membuka file yang sudah tercapture. Termasuk membuka paket data ataukah membuka paket IP. Open file tidak seharusnya dipanggil jika file sudah terbuka. c. Close file, fungsi ini berfungsi untuk menutup file pada struktur
3. Proses 3 adalah datalink.c
Program ini berfungsi untuk melihat/ mengecek interface pada sistem ini. DLT_PPP untuk modem, DLT_ETHERNET untuk wirelles ataupun ethernet, dan DLT_NULL jika tidak terdapat interface. 4. Proses 4 adalah tcpip.c
Program ini berfungsi untuk melihat paket-paket yang sedang melewati jaringan, khususnya paket pada saat aktivitas chatting Yahoo Messenger berlangsung.
Dalam program ini terdapat 4 fungsi yaitu :
a. Proses IP, fungsi ini dipanggil ketika menerima suatu IP datagram. Kita memeriksa paket untuk meyakinkan bahwa ada beberapa data yang lewat. Kita meyakinkan bahwa berisi suatu TCP, jika demikian maka pengolahan data yang lewat akan diproses oleh proses_tcp(). Dalam proses ini menggunakan ip_total_len, karena mungkin dalam memproses paket kita akan menangkap byte didalam lapisan ethernet.
b. Proses TCP, fungsi ini hanya mencari TCP, selain itu akan dibuang. Jika tidak mempunyai data apapun maka kembalikan paket. Setelah mendapat sebuah TCP maka mengkalkulasi total panjangnya TCP header. Mengisi struktur arus dengan info yang mengidentifikasikan arus ini. Serta mengkonversi data yang tidak terbaca menjadi karakter titik(.).
c. Store paket, fungsi ini untuk menyimpan paket data ke dalam file. Sebelumnya kita melihat dulu apakah paket ini mempunyai arus struktur, jika belum maka akan diciptakan dulu struktur arus untuk paket tersebut.
d. Print paket, fungsi ini mencetak muatan paket kedalam console.
3.4.3. Flowchart Proses Yang Berjalan Pada Sistem Utama
3.4.3.1. Flowchart Proses 1 main.c
Start Switch (arg) Case ‘b’ ; If Byte_per_flow-atoi(optarg)<0 Debug “capturing max of byte per
traffic” Debung” warning:invalid
value used with -b ignored “
Break True
False
Case ‘c’
Console only=1 Debug “ printing packet to
console only”
Case ‘s’
Strip_nonprint=1 Debug “concerting non printable character to ’.’ “
Break
1 Case ‘h’ Print usage Exit Break Default Debug “ error : unrecognized switch” Need_usage=1 Break End Gambar 3.7 Switch
3.4.3.2. Flowchart Proses 2 “ Flow.c “
End Start
If flow_state->fp
Debug “ …. Trying to open already open file”
Return flow_state->fp
If flow state, filename!=NULL
Open file succeeded
Open failed sebab terlalu banyak file yang sedang
dibuka True False True False While (!done) True If flow_state->fp==NULL
Set finished, dan jangan mencoba untuk membuka
file kembali Mengurutkan arus dari yang
lama ke yang baru
Close file
False
True False
Return NULL
Start
If flow_state->==NULL
Return 0
Debug “closing file “
Menutup file
Return 1
End True
False
3.4.3.3. Flowchart Proses 3 “ Tcpip.c “ Start If Panjang paket<TCP header Debug "received truncated TCP segment!" Return Mengkalkulasi total panjangnya TCP header If tidak mempunyai data Debug “got TCP segment with no data: Return
Mengisi struktur flow dengan info yang mengidentifikasi arus
Mengkalkulasi lagi permukaan data dan panjangnya TCP header
If Strip nonprint
If (console only)
Mencetak output Menyimpan output
End True False True False True False True False Data=(data, panjangnya)
3.4.3.4. Proses 4 “ Datalink.c “
Start
If (length!=caplen)
Debug “warning : only captured byte of byte
ether frame” If (caplen<sizeof(struct ether_header) Return if (ntohs(eth_header->ether_type) != ETHERTYPE_IP) Debug “warning : received
incomplete ethernet frame”
Debug “ warning received ethernet frame with unknown type”
Return Proses IP End True True False False True False
Start
If (length!=caplen)
Debug “warning : only captured byte of byte null
frame“
If (caplen < NULL_HDRLEN)
Debug “warning : received incomplete null frame “
Return Proses IP end True True False If (fammily!+AF_INET)
Debug “warning :received non AF_INET null frame “
return