Anda di halaman 1dari 7

Network Monitoring Menggunakan Socket Programming

Nabila Mahastika Priadana, Dyah Ayu Marhaeningtyas Galuh Wisnu, Awangga Lazuardi Narendra Adiluhung email :bil.nabil.bil@gmail.com, dyahayumgw@gmail.com, awangga10@gmail.com ABSTRAK Saat ini telah banyak aplikasi network monitoring. Socket prgramming pun juga dapat digunakan untuk melkukan monitoring network traffic yang terdapat pada interface komputer atau laptop yang sedang kita gunakan. Pada makalah ini, kelompok kami membuat sebuah socket programming menggunakan bahasa pemograman C. Network Monitoring dibangun untuk meringankan beban monitoring atau pengawasan yang dilakukan oleh manusia. Sistem yang dimonitor terdiri dari berbagai macam device atau perangkat jaringan seperti router maupun server. "Monitor IP Scanner" adalah program yang digunakan untuk memonitor sumber daya sistem dan menunjukkan beberapa fungsi dasarnya. Program ini ditujukan untuk sistem administrator dan general user untuk memonitor dan mengatur jaringan.Setelah kita buat,aplikasi ini dapat melakukan scanning pada interface network yang kita gunakan. Hasil yang dianalisa meruapak bsar paket data yang masuk dan keluar dari PC kita. Selain itu juga dapat mendeteksi berapa IP addres kita. Kata kunci :IP Scanner, Socket Programming 1. Pendahuluan Saat ini telah banyak berkembang berbagai macam platform bahasa pemograman. Salah satunya ialah bahasa pemograman socket. Bahasa pemogrman socket memiliki kelibihan diantaranya kita dapat saling berkomunikasi antar PC lainnya yang terhubung dengan suatu jaringan. Misalnya kta dapat mekukan chatting dan sebagainya. Disamping itu kita dapat bertukar data antar PC yang lainnya. Dalam penegembangannya, socket programming dapat dikembangkan untuk melaukan network monitoring. Kata network monitoring menggambarkan bagaimana suatu sistem yang secara konstan memonitor kondisi jaringan (router, server maupuan device jaringan lainnya). Jika pada suatu sistem ada yang tidak berfungsi ataupun ada masalah pada security atau aplikasi dalam suatu sistem jaringan, maka sistem akan melakukan notifikasi kepada seorang network administrator atau system administrator melalui sistem alarm berupa email ataupun notifikasi lainnya.Oleh karena itu , penulis ingin mengambangkan bahasa pemograman socket ini utuk melakukan monitoring network. 2. Dasar Teori 2.1 Socket Programming Pemrograman Socket adalah cara untuk menggunakan komponen/API (Application Programming Interface) socket untuk membuat sebuah aplikasi. Aplikasi socket umumnya terdiri dari dua kategori berdasarkan pengiriman datanya, yaitu : 1. Datagram socket (menggunakan UDP). 2. Stream socket (menggunakan TCP). Terdapat perlakuan yang berbeda antara UDP dan TCP, walaupun sama-sama berfungsi sebagai protokol pertukaran data. UDP tidak memerlukan proses koneksi terlebih dahulu untuk dapat mengirimkan data, paket-paket data yang dikirimkan UDP bisa jadi melalui rute yang berbeda-beda, sehingga hasil yang diterima bisa jadi tidak berurutan. Contohnya jika aplikasi socket pengirim mengirimkan berturut-turut pesan 1, pesan 2, dan pesan 3, maka aplikasi socket penerima belum tentu mendapatkan pesan yang berurutan dimulai dari pesan 1, pesan 2, dan terakhir pesan 3. Bisa saja pesan 2 terlebih dulu diterima, menyusul pesan-pesan yang lain, atau berbagai kemungkinan lainnya. Bahkan, dapat terjadi pesan yang dikirimkan tidak sampai ke penerima karena kegagalan pengiriman paket data. Tidak demikian halnya dengan stream socket yang menggunakan TCP. Jenis ini mengharuskan terjadinya koneksi terlebih dahulu, kemudian mengirimkan paket-paket data secara berurutan, penerima juga dijamin akan menerima data dengan urutan yang benar, dimulai dari data pertama yang dikirimkan hingga data terakhir. TCP dapat menangani data yang hilang, rusak, terpecah, ataupun terduplikasi.

2.2 Bahasa Pemograman C Bahasa pemrograman C merupakan salah satu bahasa pemrograman komputer yang bisa dikatakan mudah untuk dipelajari dan mudah untuk dipahami karena bahasanya merupakan bahasa tingkat tinggi yang dimengerti oleh

manusia. Bahasa C dibuat pada tahun 1972 oleh Dennis Ritchie. Bahasa pemrograman C sama seperti bahasa pemrograman lainnya yang memiliki kerangka dasar. Kerangka Dasar Bahasa C adalah sebagai berikut : 2.2.1 Fungsi main(). Fungsi main merupakan fungsi utama yang wajib ada pada saat kita membuat program dengan bahasa C. Dalam sebuah project hanya boleh ada 1 buah fungsi main() saja. Namun dalam bahasa C, tidak membatasi hanya boleh 1 fungsi saja, melainkan kita juga diperbolehkan untuk membuat fungsi-fungsi lain selain fungsi main() yang bisa mempermudah kita dalam membuat sebuah program. 2.2.2 Deklarasi variabel Pendeklarasian variabel ini dilakukan untuk mendaftarkan variabel apa saja yang akan kita gunakan dalam program yang kita buat. Pendeklarasian variabel ini biasanya sekaligus dengan mencantumkan tipe data dari variabel tersebut. 2.2.3. Perintah (statement) Perintah merupakan deretan program yang kita buat dalam sebuah project. 2.2. 4. Akses library Digunakan untuk mengakses library apa saja yang kita perlukan dalam pembuatan sebuah program. 2.2. 5. Komentar Komentar merupakan sebuah kalimat yang biasanya dicantumkan oleh seorang programer sebagai sebuah catatan kecil yang mana komentar ini tidak akan ikut di compile atau diproses. Dibawah ini merupakan sebuah contoh project/program yang menggunakan bahasa C, yang hasilnya akan menampilkan tulisan Hello World!!!. Pada bahasa C kita akan menjumpai tipe data, variabel dan konstanta. Dibawah ini merupakan penjelasan singkat mengenai 3 hal tersebut. : 2.2.6 Tipe Data Tipe data merupakan sebuah bagian dari program yang menginisialisasikan sebuah variabel akan menampung data dengan jenis apa, yang nantinya akan berpengaruh terhadap hasil dari sebuah proses. Pada bahasa C, terdapat 5 buah tipe data dasar yaitu :

2.2.7 Variabel Variabel merupakan sebuah media unuk mendapatkan dan menyimpan data. Variabel bisa dianalogikan sebagai sebuah ember yang kita gunakan untuk mendapatkan dan menyimpan air(air merupakan analogi dari data). Setiap variabel yang akan kita gunakan harus dideklarasikan terlebih dahulu, berikut ini merupakan contoh pendeklarasian variabel.

2.2.8 Konstanta Konstanta merupakan suatu nilai yang tidak dapat diubah selama proses program berlangsung. Konstanta nilainya selalu tetap. Konstanta harus didefinisikan terlebih dahulu di awal program. Konstanta dapat bernilai integer, pecahan, karakter dan string. Contoh penggunaan konstanta :

Selain itu, bahasa C juga menyediakan beberapa karakter khusus yang disebut karakter escape, antara lain : \a : untuk bunyi bell (alert) \b : mundur satu spasi (backspace) \f : ganti halaman (form feed) \n : ganti baris baru (new line) \r : ke kolom pertama, baris yang sama (carriage return)

\v : tabulasi vertical \ : karakter petik tunggal \ : karakter petik ganda \\ : karakter garis miring 3. Network Monitoring Network Monitoring atau Sistem Pemantau Jaringan adalah aplikasi program yang dipergunakan untuk mengetahui ada tidaknya celah keamanan dalam suatu system. Network Monitoring biasanya dilakukan dengan menggunakan SNMP (Simple Network Management Protocol). SNMP versi 1 paling banyak dipergunakan meskipun saat ini sudah ada SNMP versi 2. Tingkat keamanan SNMP versi masih sangat rendah sehingga memungkinkan penyadapan oleh pihak yang tidak diinginkan. Adapun contoh dari aplikasi network monitoring adalah : HP OpenView (Windows) Etherboy (Windows) dan Etherman (Unix) SNMP Collector (Windows) Sedangkan pemantau jaringan yang tidak mempergunakan SNMP antara lain : iplog, yang merupakan bagian dari paket iplog untuk memantau paket IP, ICMP, UDP icmplog, yang merupakan bagian dari paket iplog untuk memantau paket IP, ICMP, UDP udplog, yang merupakan bagian dari paket iplog untuk memantau paket IP, ICMP, UDP iptraf, yang sudah termasuk dalam paket Linux Debian netdiag rafshow, yang menunjukan traffic antar host dalam bentuk text mode

tidak bisa berhubungan (established), yang kemudian terputus, yang kemudian sistem monitoring menghasilkan suatu pesan / notifikasi, notifikasi ini bermacam-macam : sebuah alarm suara mungkin di kirimkan kepada seorang net/sys admin. 4. Metode Penelitian Bab ini menjelaskan langkah-langkah yang akan ditempuh dalam penyusunan skripsi, yaitu perancangan, implementasi dan pengujian dari aplikasi perangkat lunak yang akan dibuat. Kesimpulan dan saran disertakan sebagai catatan atas aplikasi dan kemungkinan arah pengembangan aplikasi selanjutnya.

Network Monitoring System menggambarkan sebuah sistem yang terus menerus memonitor jaringan komputer sehingga jika terjadi gangguan dapat secepatnya melakukan notifikasi kepada seorang network administrator atau system administrator. Sebagai contoh untuk mengetahui status dari sebuah webserver, software monitoring secara periodik mengirim request http; atau untuk email server, pesan tes di kirimkan melalui sebuah SMTP untuk kemudian di ambil melalui IMAP ataupun POP3. Yang biasa dijadikan variabel dalam NMS ini adalah waktu respon dan ketersediaan (uptime), dan konsistensi serta reliability juga di perhatikan. Status request yang failure, seperti ketika koneksi

4.1. Tahap Pertama Pada tahap ini merupakan tahap pencarian informasi dan studi literatur yang diperlukan untuk pengumpulan data dan desain sistem yang akan dibuat. Informasi didapatkan dari buku, dan materi materi lain yang berhubungan yang didapat dari internet . Setelah itu kami menganalisa beberapa materi yang telah didapatkan sebelumnya. Studi Literatur adalah metode penelitian yang dilakukan dengan mempelajari dan mengumpulkan data-data dari berbagai macam catatan dalam perkuliahan, literatur yang berhubungan dengan masalah yang dialami, kumpulan tugas kuliah, dan semua hal yang dapat membantu penyusunan laporan Tugas pemograman jaringan ini. Hal-hal yang menjadi bahan studi literatur adalah sebagai berikut; Network Monitoring Socket Programing

Bahasa pemogrman C

4.2. Tahap Kedua Analisis kebutuhan bertujuan untuk mendapatkan semua kebutuhan yang diperlukan dari sistem yang akan dibangun mulai arsitektur system, diagram use case serta data flow diagram (DFD) . Diagram Use Case digunakan untuk mendeskripsikan kebutuhan-kebutuhan dan fungsionalitas sistem dari perspektif end-user. Analisis kebutuhan dilakukan dengan mengidentifikasi semua kebutuhan (requirements) system. 4. Hasil dan Pembahasan Monitor IP Scanner dapat digunakan untuk memonitor: penggunaan memory, konfigurasi IP, konfigurasi jaringan dengan statistik IP, informasi routing tables dan ARP tables. Program ini juga dapat memeriksa apakah komputer jaringan dalam status hidup atau tidak menggunakan alamat IP atau nama domain. Program ini bahkan juga bisa mengirim pesan antar komputer dalam suatu network dengan cara membentuk koneksi clientserver. Karena itu, server akan menunjang lebih banyak koneksi client. Hal ini juga digunakan untuk mendapatkan informasi dari PC yang lain yang berada dalam satu jaringan. Hal-hal seperti mendapatkan informasi routing table, IP statistic, ARP table dari komputer yang lain dan menampilkannya ke dalam komputer lain dengan membentuk koneksi TCP menggunakan alamat IP yang ditampilkan dalam routing table TCP atau user-defined IP address - semuanya mungkin dilakukan. 4.1 Componen Pada Aplikasi Monitor IP Scanner mendukung beberapa fitur utama berikut ini: 4.1.1. Host Config Fitur ini akan menampilkan informasi sistem meliputi penggunaan memori dan host name. Detail penggunaan memori seperti: Page file usage, virtual size usage dan Page fault count dan lainlain., informasi ini didapatkan dengan menggunakan "ZwQuerySystemInformation" API yang diimport dari file NTDLL.Lib. API ini digunakan untuk mendapatkan semua informasi proses yang sedang berjalan pada PC. Pengambilan struktur global berisi informasi penggunaan memori. Berikut source code nya :
typedef struct _VM_COUNTERS { SIZE_T PeakVirtualSize; SIZE_T VirtualSize; ULONG PageFaultCount; SIZE_T PeakWorkingSetSize; SIZE_T WorkingSetSize; SIZE_T QuotaPeakPagedPoolUsage;

SIZE_T SIZE_T SIZE_T SIZE_T SIZE_T } VM_COUNTERS;

QuotaPagedPoolUsage; QuotaPeakNonPagedPoolUsage; QuotaNonPagedPoolUsage; PagefileUsage; PeakPagefileUsage;

typedef struct _SYSTEM_THREAD_INFORMATION { LARGE_INTEGER KernelTime; LARGE_INTEGER UserTime; LARGE_INTEGER CreateTime; ULONG WaitTime; PVOID StartAddress; CLIENT_ID ClientId; KPRIORITY Priority; KPRIORITY BasePriority; ULONG ContextSwitchCount; LONG State; LONG WaitReason; } SYSTEM_THREAD_INFORMATION, * PSYSTEM_THREAD_INFORMATION; typedef struct _SYSTEM_PROCESS_INFORMATION { ULONG NextEntryDelta; ULONG ThreadCount; ULONG Reserved1[6]; LARGE_INTEGER CreateTime; LARGE_INTEGER UserTime; LARGE_INTEGER KernelTime; UNICODE_STRING ProcessName; KPRIORITY BasePriority; ULONG ProcessId; ULONG InheritedFromProcessId; ULONG HandleCount; ULONG Reserved2[2]; VM_COUNTERS VmCounters; IO_COUNTERS IoCounters; SYSTEM_THREAD_INFORMATION Threads[1]; } SYSTEM_PROCESS_INFORMATION, * PSYSTEM_PROCESS_INFORMATION; extern "C" NTSYSAPI NTSTATUS NTAPI ZwQuerySystemInformation( IN UINT SystemInformationClass, IN OUT PVOID SystemInformation, IN ULONG SystemInformationLength, OUT PULONG ReturnLength OPTIONAL );

"System Info ..." berfungsi untuk memberikan informasi pada: drives apa yang tersedia pada sistem, prosesor, kecepatan prosesor, dan sebagainya.
... if(GetSystemInfo(m_SysInfo)) { UINT Res = (UINT) ::ShellExecute(GetSafeHwnd(), _T("open"), m_SysInfo, NULL, NULL, SW_SHOWNORMAL); if( Res <= HINSTANCE_ERROR ) { AfxMessageBox( _T( "Error Executing \"MsInfo32.exe\" !" ), MB_OK | MB_ICONEXCLAMATION );

} } ...

MIB_IFTABLE *m_pTable; pGetIfTable=(TGetIfTable)GetProcAddress(LoadLib rary ("Iphlpapi.dll"), "GetIfTable"); pGetNumberOfInterfaces=(TGetNumberOfInterfaces) GetProcAddress (LoadLibrary("Iphlpapi.dll"),"GetNumberOfInterf aces"); m_pTable=NULL; if (!pGetIfTable || !pGetNumberOfInterfaces) { AfxMessageBox("Error loading Iphlpapi.dll"); return; } ULONG uRetCode = pGetIfTable(m_pTable,&m_dwAdapters,TRUE); m_pTable=new MIB_IFTABLE[m_dwAdapters]; pGetIfTable(m_pTable,&m_dwAdapters,TRUE); ... // Code to retrieve Protocol Statistics information ... MIB_IPSTATS IPStats; m_dwResult = GetIpStatistics(&IPStats); // Code to retrieve Routing Table information ... MIB_IPFORWARDROW IPForwardRow; m_dwResult = GetBestRoute(inet_addr(_T("207.219.70.31")), 0, &IPForwardRow); ... // Code to retrieve ARP Table information PMIB_IPNETTABLE pMib = (PMIB_IPNETTABLE) malloc(sizeof(MIB_IPNETTABLE)+sizeof(MIB_IPNETR OW)*nSize); DWORD dwRet = GetIpNetTable(pMib,&nSize,TRUE); ...

4.1.2. IP Config Fitur ini menampilkan semua informasi NIC/adapter card yang tersedia pada PC, dengan alamat IP lokal, MAC address, Subnet Mask, Default gateway dan informasi lain yang dikonfigurasi pada NIC/adapter card tertentu. Fitur ini juga menampilkan informasi DNS dan DHCP. Untuk mendapatkan informasi adapter dengan alamat IP, MAC address, subnet mask, dan default gateway:
... PIP_ADAPTER_INFO pAdapter = NULL; dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen); DNS information is retrieved using... PFIXED_INFO pFixedInfo; m_dwResult = GetNetworkParams((PFIXED_INFO)m_pBuffer,&m_ulSi ze);

4.13. MonAdmin Config Disini kita bisa mendapatkan informasi seperti statistik protokol. Informasi routing table dan ARP table dari komputer lain yang menjalankan Monitor IP pada waktu yang sama. kita dapat melakukan ini dengan: memilih alamat IP dalam table koneksi TCP yang ingin kita dapatkan informasinya dan memilih tipe informasi yang ingin diambil, dan kemudian klik tombol "Retrieve Info". Jika IP yang kita cari bukan IP yang ada pada table koneksi TCP, kemudian klik tombol "Other IP's" dan ketiklah secara manual. setelah progress bar selesai, informasi akan muncul pada kotak "Retrieved Info".
Structure and API used to get TCP Connection Table PMIB_TCPTABLE pTcpTable; GetTcpTable(pTcpTable, &dwSize, TRUE) ...

4.1.4. Network Config Fitur ini menampilkan aktivitas NIC/adapter jaringan dan menunjukkan berapa banyak byte yang sudah dikirim, berapa banyak byte yang telah dibuang, berapa banyak byte yang error, dan berapa banyak yang disertakan dengan detail paket unicast sejak NIC/adapter diaktifkan. fitur ini juga menampilkan informasi routing table, protocol statistic, dan ARP table. Kode untuk mendapatkan aktivitas network:

4.1.5. Ping Config Fitur ini memberikan kemampuan untuk memeriksa apakah koneksi antara komputer kita dan komputer lain up atau down. Kegunaannya pada dasarnya cukup jelas, tapi jika tidak, kita mempunyai pilihan untuk melakukan ping dengan nama domain atau alamat IP dan kita dapat mengatur timeout, TTL, dan jumlah paket yang akan dikirim. Kode konfigurasi ping:
... HANDLE hIP = IcmpCreateFile(); IP_OPTION_INFORMATION OptionInfo; OptionInfo.Ttl = PingOption.m_nTTL; OptionInfo.Tos = PingOption.m_nTOS; if (PingOption.m_bDontFragment) OptionInfo.Flags = IP_FLAG_DF;

Set up the data which will be sent unsigned char* pBuf = new unsigned char[PingOption.m_wDataRequestSize]; memset(pBuf, 'S', PingOption.m_wDataRequestSize); Do the actual Ping DWORD dwReplySize = sizeof(ICMP_ECHO_REPLY) + max(PingOption.m_wDataRequestSize, 8); unsigned char* pReply = new unsigned char[dwReplySize]; ICMP_ECHO_REPLY* pEchoReply = reinterpret_cast<icmp_echo_reply*>(pReply) ; DWORD nRecvPackets = IcmpSendEcho(hIP, addr, pBuf, PingOption.m_wDataRequestSize, &OptionInfo, pReply, dwReplySize, PingOption.m_dwTimeout); ...</icmp_echo_reply*>

dari list user mana yang akan menjadi tujuan pengiriman data. Kode implementasi "Send Message":
{ WORD wVersionRequested; WSADATA wsaData; wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); ... Server_Addr.sin_port = htons(m_PortNo); Server_Addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); Server_Addr.sin_family = AF_INET; addlen = sizeof(Server_Addr); Sock = socket(AF_INET, SOCK_STREAM, NULL); ... if(bind(Sock, (const sockaddr *) &Server_Addr, addlen)) ... if(listen(Sock, 5)) ... AfxBeginThread(&ServerThread, NULL, 0, 0, 0, NULL); } UINT ServerThread(LPVOID lpVoid) { m_Socket = accept(SendMsgDlg>Sock,(SOCKADDR *) &SendMsgDlg->Server_Addr, &SendMsgDlg->addlen); ... AfxBeginThread(&ServerThread, NULL, 0, 0, 0, NULL); ... while((Res = recv(m_Socket, RecvBuffer, sizeof(RecvBuffer), 0)) != SOCKET_ERROR) { ... } send(m_Socket, "Disconnected", 100, 0); ... ::closesocket(m_Socket); ::AfxEndThread(0); return TRUE; }

4.1.6. Send Message Untuk mengirim pesan, kita harus membuat suatu server dimana dapat dikoneksikan dengan client. Jika server telah dibuat, maka kita harus membuat client dan mengkoneksikannya dengan server. Salah satu cara lain, saat terkoneksi kita dapat berkomunikasi dengan maksimal tiga client yang terhubung pada server tersebut. Penggunaan username opsional. Berikut adalah instruksi penggunaan pilihan "Send Message": 1. Membuat server dengan memasukkan port number (ingat port number ini). 2. Tekan tombol "Start Server" 3. Membuat client dengan memasukkan alamat dan port number pada server yang telah dibuat. 4. Tekan tombol "Start Client". (CATATAN: jika semua hal ini dilakukan pada komputer yang sama, alamat satu-satunya yang akan digunakan adalag loopback adress (127.0.0.0)). 5. Setelah koneksi terbentuk, username akan digenerate secara otomatis dengan prefix "Client #" diikuti dengan nomor koneksi. 6. Pesan sukses akan ditampilkan pada window server dan client. 7. Sekarang dapat melakukan pertukaran data antara client dan server dengan menekan tombol "send message". 8. Sebelum mengirimkan pesan dari server setiap waktu, nama client harus dipilih

6. Kesimpulan Kesimpulan yang didapatkan dari hasil uji coba adalah sebagai berikut : 1. Aplikasi ini dapat bekerja dengan baik dan dapat melakukan fungsinya sesuai keinginan kita.

7. Daftar Pustaka [1] Edy Purwanto , (2009), NETWORK MONITORING SYSTEM (NMS) DENGAN NOTIFIKASI MENGGUNAKAN SMS ( STUDI KASUS PADA DIVISI NOC PT MELVAR LINTASNUSA ),. [2]http://anakkilat.wordpress.com/2008/06/23/netw ork-monitoring/. Diakses tanggal 24 Februari 2012. [3] http://www.codeproject.com. Diakses tanggal 24 Februari 2012. Biodata Peneliti Nabila Mahastika Priadana lahir pada tanggal 27 Januari 1991 di Pamekasan . Sekarang sedang kuliah di Universitas Brawijaya Jurusan Informatika Semester 7 dengan NIM 0910680028. Dyah Ayu Marhaeningtyas Galuh Wisnuwardhani lahir di Malang pada tanggal 27 Februari 1991 . Sekarang sedang kuliah di Universitas Brawijaya Jurusan Informatika Semester 7 dengan NIM 0910680052. Awangga LNA lahir di Malang pada tanggal 1 November 1992 di Pasuruan. Sekarang sedang kuliah di Universitas Brawijaya Jurusan Informatika Semester 5 dengan NIM 105060807111014.

Anda mungkin juga menyukai