Kamis, 09 Agustus 2018

FTP DAN WEB SERVER

Pada tugas tugas mata kuliah Pemrograman Jaringan  kali ini, saya akan membahas cara untuk konfigurasi dari FTP dan web server dengan menggunakan VirtualBox sebagai media untuk menjalankan Sistem Operasi. Dalam Sistem Operasi yang akan digunakan pada pemrograman ini yaitu Linux dengan distro Ubuntu. Pada pemrograman ini, menggunakan 2 jenis Sisem Operasi yaitu Sistem Operasi yang digunakan sebagai Server dan juga Sistem Operasi yang digunakan sebagai Client. Pada sisi Server menggunakan Ubuntu-16.04.1-server-i386, dan untuk sisi Client menggunakan Ubuntu-16.04.1-desktop-i386.
Langkah pertama buka Virtualbox lalu aktifkan VM Server dan login dengan user yang telah tersedia. Disini saya menggunakan hostname server dan user labti. Setelah itu buka file konfigurasi untuk Vsftpd seperti pada perintah berikut.

Maka akan muncul tampilan file konfigurasi sebagai berikut ini.

Pada konfigurasi FTP, pastikan bahwa tidak diperbolehkanya Anonymous Login dimana hal ini berarti bolehnya seorang pengguna membuka koneksi FTP dengan Server tanpa autentikasi atau login sama sekali terlebih dahulu, dengan konfigurasi berikut.

Lalu perhatikan juga konfigurasi bagian write, dimana bagian ini akan mengatur boleh tidaknya pengguna melakukan tindakan yang berkaitan dengan write.

Ubah bagian diatas menjadi seperti gambar dibawah ini, yaitu untuk melakukan perubahan pada bagian konfigurasi tersebut bernilai YES yang sebelumnya memiliki tanda komentar (# / pagar) didepannya kita hapus. Karena fungsi tanda komentar adalah membuat satu atau lebih baris tidak dibaca oleh komputer ketika sebuah program di eksekusi.


Selanjutnya kita juga perlu mengubah konfigurasi yang mengatur tentang boleh atau tidaknya tindakan yang berkaitan dengan upload maupun download dalam modus pengiriman ascii. Pada bagian konfigurasi dibawah ini.

Lakukanlah perubahan seperti gambar berikut ini. Disini saya menghapus tanda pagar/# yang berfungsi untuk mengatur boleh atau tidaknya tindakan yang berkaitan dengan upload maupun download dalam modus pengiriman ascii.

Selanjutnya kita akan mengubah pesan pembuka ketika kita telah berhasil membuka koneksi dengan Server, konfigurasi tersebut terdapat pada bagian berikut ini.

Lalu hapus komentar pada baris yang diperlukan saja, kemudian ubah pesan pembuka nya menjadi apa yang kita inginkan, contoh dari hasil akhirnya sebagai berikut.

Jika sudah, tekan tombol Ctrl + X dan tekan “Y” untuk menyimpan perubahan.
Setelah selesai dengan file konfigurasi untuk Vsftpd, kita bisa langsung merestart service dari Vsftpd tersebut dengan menggunakan perintah sebagai berikut.

Setelah selesai melakukan restart, periksa status dari service tersebut dengan perintah sebagai berikut.

Lalu kita bisa keluar dari laporan status tersebut dengan menekan tombol Control + C (Cancel). Selanjutnya, buat user baru dengan nama pratikan seperti berikut ini.

Setelah itu kita bisa langsung mengisi informasi lengkap mengenai user tersebut dengan menggunakan perintah berikut.

Selanjutnya kita menggunakan Web Server yaitu Nginx. Kemudian periksa apakah Nginx telah berjalan pada Server dengan menggunakan perintah sebagai berikut.

Hasil dari pemeriksaan status tersebut akan menghasilkan tampilan sebagai berikut.

Setelah itu masuk ke folder dimana merupakan tempat penyimpanan halaman web yang digunakan oleh Nginx secara default, dengan menggunakan perintah sebagai berikut.

Kemudian periksa apa saja isi dari direktori tersebut maka akan menampilkan seluruh file maupun direktori yang terdapat pada direktori dengan menggunakan perintah sebagai berikut.


Selanjutnya buka file tersebut menggunakan Nano Text Editor dengan menggunakan perintah sebagai berikut :

Secara default, isi dari file tersebut akan berisi sebagai berikut ini.

Kemudian lakukanlah perubahan file diatas seperti berikut ini.

Jika sudah, tekan tombol Ctrl + X dan tekan “Y”. Maka hasil perubahan yang kita lakukan akan tersimpan. Selanjutnya jalankan VM Client tanpa mematikan VM Server, login dan buka terminal. Pertama kita akan melakukan Curl terhadap Server sehingga isi dari halaman web yang terdapat pada Server akan tampil secara mentah dengan menggunakan perintah sebagai berikut.

Perintah tersebut akan menampilkan respond dari Server seperti berikut ini.


Selanjutnya buka Web Browser lalu ketikkan domain yang sudah pernah kita buat.. Browser akan menampilkan respond dari Server dalam bentuk halaman web.

Setelah menguji komunikasi melalui protokol HTTP, kita akan menguji komunikasi menguji protokol FTP dengan menggunakan perintah sebagai berikut.

Kemudian kita akan diminta untuk autentikasi atau login menggunakan user yang telah kita buat sebelumnya, seperti pada tampilannya berikut ini.

Selanjutnya kita akan menjelajahi isi dari Server melalui protokol FTP menggunakan Web Browser dengan cara mengetikkan url sebagai berikut.

Kemudian akan diminta untuk login kembali dengan tampilan sebagai berikut :

Setelah kita melakukan login, kita akan secara otomatis masuk ke halaman yang menunjukkan direktori home dari user yang kita gunakan untuk login pada FTP. 

Sabtu, 04 Agustus 2018

Membangun Aplikasi Client-Server TCP Sederhana


LISTING PROGRAM
simpleServer.java
import java.io.*;
import java.net.*;
public class simpleServer {
  public final static int TESTPORT = 5000;
  public static void main(String args[]) {
    ServerSocket checkServer = null;
    String line;
    BufferedReader is = null;
    DataOutputStream os = null;
    Socket clientSocket = null;
    try {
      checkServer = new ServerSocket(TESTPORT);
      System.out.println("Aplikasi Server hidup ...");
    } catch (IOException e) {
      System.out.println(e);
    }
    try {
      clientSocket = checkServer.accept();
      is = new BufferedReader(new
      InputStreamReader(clientSocket.getInputStream()));
      os = new DataOutputStream(clientSocket.getOutputStream());
    } catch (Exception ei) {
      ei.printStackTrace();
    }
    try {
      line = is.readLine();
      System.out.println("Terima : " + line);
      if (line.compareTo("salam") == 0) {
        os.writeBytes("salam juga");
      } else {
        os.writeBytes("Maaf, saya tidak mengerti");
      }
    } catch (IOException e) {
      System.out.println(e);
    }

    try {
      os.close();
      is.close();
      clientSocket.close();
    } catch (IOException ic) {
      ic.printStackTrace();
    }
  }
}

simpleClient.java
import java.io.*;
import java.net.*;
public class simpleClient {
  public final static int REMOTE_PORT = 5000;
  public static void main(String args[]) throws Exception {
    Socket cl = null;
    BufferedReader is = null;
    DataOutputStream os = null;
    BufferedReader stdin = new BufferedReader(new
    InputStreamReader(System.in));
    String userInput = null;
    String output = null;
    try {
      cl = new Socket(args[0], REMOTE_PORT);
      is = new BufferedReader(new
      InputStreamReader(cl.getInputStream()));
      os = new DataOutputStream(cl.getOutputStream());
    } catch(UnknownHostException e1) {
      System.out.println("Unknown Host: " + e1);
    } catch (IOException e2) {
      System.out.println("Erorr io: " + e2);
    }
    try {
      System.out.print("Masukkan kata kunci: ");
      userInput = stdin.readLine();
      os.writeBytes(userInput + "\n");
    } catch (IOException ex) {
      System.out.println("Error writing to server..." + ex);
    }
    try {
      output = is.readLine();
      System.out.println("Dari server: " + output);
    } catch (IOException e) {
      e.printStackTrace();
    }
    try {
      is.close();
      os.close();
      cl.close();
    } catch (IOException x) {
      System.out.println("Error writing...." + x);
    }
  }
}

LOGIKA PROGRAM
Program diatas dapat digunakan untuk membangun sebuah aplikasi  client-server TCP sederhana dengan menggunakan bahasa pemrograman java.

Server
import java.io.*;
import java.net.*;
Perintah diatas berfungsi untuk memanggil semua fungsi yang terdapat pada library java.io dan java.net. Library java.io yaitu library untuk proses input dan output melalui data stream, sedangkan java.net yaitu library untuk implementasi jaringan.

public class simpleServer {
  public final static int TESTPORT = 5000;
Nama class pada program ini yaitu simpleServer, dan kita akan mendeklarasikan port 5000 yang akan digunakan sebagai jalur komunikasi.

  public static void main(String args[]) {
    ServerSocket checkServer = null;
    String line;
    BufferedReader is = null;
    DataOutputStream os = null;
    Socket clientSocket = null;
Perintah diatas berfungsi untuk mendeklarasikan variable yang akan dipakai di dalam program ini, yaitu: checkServer sebagai ServerSocket yang bernilai null (kosong), is sebagai BufferedReader yang bernilai null (kosong), os sebagai DataOutputStream yang bernilai null (kosong), clientSocket sebagai socket yang bernilai null (kosong), dan line dengan tipe data string.

    try {
      checkServer = new ServerSocket(TESTPORT);
      System.out.println("Aplikasi Server hidup ...");
    } catch (IOException e) {
      System.out.println(e);
    }
Pada blok try pertama, checkServer akan diberi nilai yaitu berupa nomor port. Selanjutnya server akan menampilkan output “Aplikasi Server hidup ...”. Jika ada error yang terjadi pada saat server dijalankan, maka error tersebut akan ditangani oleh catch.

    try {
      clientSocket = checkServer.accept();
      is = new BufferedReader(new
      InputStreamReader(clientSocket.getInputStream()));
      os = new DataOutputStream(clientSocket.getOutputStream());
    } catch (Exception ei) {
      ei.printStackTrace();
    }
Blok try kedua digunakan untuk inisiasi is dan os sebagai objek input dan output, serta untuk menerima request client dengan clientsocket.

    try {
      line = is.readLine();
      System.out.println("Terima : " + line);
      if (line.compareTo("salam") == 0) {
        os.writeBytes("salam juga");
      } else {
        os.writeBytes("Maaf, saya tidak mengerti");
      }
    } catch (IOException e) {
      System.out.println(e);
    }
Blok try ketiga digunakan untuk menerima dan mengirim pesan. Variable line digunakan sebagai variable penampung inputan dari client, lalu server akan mencetak “Terima : “ diikuti dengan pesan yang diterima dari client.
Jika server menerima pesan “salam”, maka server akan membalas pesan “salam juga”. Jika server menerima pesan lainnya maka server akan membalas “Maaf, saya tidak mengerti”.

    try {
      os.close();
      is.close();
      clientSocket.close();
    } catch (IOException ic) {
      ic.printStackTrace();
    }
  }
}
Blok try keempat digunakan untuk menutup input, ouput, dan koneksi.


Client
import java.io.*;
import java.net.*;
Perintah diatas berfungsi untuk memanggil semua fungsi yang terdapat pada library java.io dan java.net. Library java.io yaitu library untuk proses input dan output melalui data stream, sedangkan java.net yaitu library untuk implementasi jaringan.

public class simpleClient {
  public final static int REMOTE_PORT = 5000;
Nama class pada program ini yaitu simpleClient, dan kita akan mendeklarasikan port 5000 yang akan digunakan sebagai jalur komunikasi.

  public static void main(String args[]) throws Exception {
    Socket cl = null;
    BufferedReader is = null;
    DataOutputStream os = null;
    BufferedReader stdin = new BufferedReader(new
    InputStreamReader(System.in));
    String userInput = null;
    String output = null;
Perintah diatas berfungsi untuk mendeklarasikan variable yang akan dipakai di dalam program ini, yaitu: cl sebagai Socket yang bernilai null (kosong), is sebagai BufferedReader yang bernilai null (kosong), os sebagai DataOutputStream yang bernilai null (kosong), serta userInput dan output yang bernilai null (kosong) dengan tipe data string.

    try {
      cl = new Socket(args[0], REMOTE_PORT);
      is = new BufferedReader(new
      InputStreamReader(cl.getInputStream()));
      os = new DataOutputStream(cl.getOutputStream());
    } catch(UnknownHostException e1) {
      System.out.println("Unknown Host: " + e1);
    } catch (IOException e2) {
      System.out.println("Erorr io: " + e2);
    }
Pada blok try pertama digunakan untuk memulai koneksi dengan server menggunakan port yang telah dideklarasikan sebelumnya. Jika terjadi error pada saat koneksi, maka catch akan berjalan dan memberikan pesan error yang terjadi.

    try {
      System.out.print("Masukkan kata kunci: ");
      userInput = stdin.readLine();
      os.writeBytes(userInput + "\n");
    } catch (IOException ex) {
      System.out.println("Error writing to server..." + ex);
    }
Blok try kedua digunakan untuk menuliskan atau mengirim pesan ke server. Pertama program akan mencetak “Masukkan kata kunci: “. Kemudian client akan menginput pesan yang akan disimpan di dalam variable userInput, dan akan dikirimkan ke server dengan perintah os.writeBytes().

    try {
      output = is.readLine();
      System.out.println("Dari server: " + output);
    } catch (IOException e) {
      e.printStackTrace();
    }
Blok try ketiga digunakan untuk menerima pesan dari server dan menampilkannya. Program akan mencetak string “Dari server: “ yang diikuti dengan variable output, yang merupakan pesan dari server.  

    try {
      is.close();
      os.close();
      cl.close();
    } catch (IOException x) {
      System.out.println("Error writing...." + x);
    }
  }
}
Blok try keempat digunakan untuk menutup input, ouput, dan koneksi.


OUTPUT PROGRAM
1. Compile terlebih dahulu file simpleServer.java, kemudian compile simpleClient.java






2. Jalankan sisi Server terlebih dahulu, setelah server hidup kemudian buka console shell yang baru lalu jalankan sisi Server. Selanjutnya ketikkan "salam" pada sisi Client, maka Server akan menerima pesan dari Client.








3. Ketikkan pesan yang berbeda pada sisi Client, maka akan tampil seperti berikut.