Sunday, December 4, 2022

Modul 10 : Pertemuan 12 (Socket Programming - Gui dengan Python)

 GUI dengan Python


1.1 Tujuan

1.2 Dasar Teori

Python menyediakan berbagai cara untuk membuat aplikasi dengan Graphical User Interface (GUI). Salah satu library yang paling sering digunakan adalah tkinter. Jalankan perintah berikut untuk instalasi library Tcl/Tk:

    sudo apt-get install python3-tk

Verifikasi hasil instalasi melalui terminal dengan perintah berikut.


Dokumentasi tkinter: https://tkdocs.com/tutorial/index.html 
Semua object GUI yang terlihat di layar aplikasi disebut widget. Widget disusun dalam bentuk hirarki pohon. Berikut contoh hirarki widget untuk percobaan koversi.py

Hirarki diatas menghasil aplikasi gui sebagai berikut:

1.3 Percobaan

Percobaan 1

hello.py


Hasil Program
Analisa:

Percobaan 2
konversi.py

Hasil Program 
Analisa:

Percobaan 3
country.py
Analisa:

Hasil Program








Thursday, December 1, 2022

Pertemuan 11 - Lathan Software Security Design

 Latihan


Buat rangkuman materi yang sudah disampaikan


Definisi Software Security
Software security merupakan hal penting yang diperlukan untuk membangun sistem software yang dapat dipercaya. Ini menjadi teknik yang diterapkan untuk melindungi software dari serangan berbahaya dan risiko peretas lainnya. Sehingga, software terus berfungsi dengan benar di bawah potensi risiko tersebut.

Mengembangkan software yang aman, berfokus pada tahap awal software development life cycle (SDLC) dan kode yang mendasari aplikasi tertentu. Dengan tujuan untuk mengidentifikasi kekurangan dan cacat sedini mungkin. Selain itu, keamanan ini diperlukan untuk menyediakan integrity, authentication, dan availability. Hal ini dikarenakan sistem software yang dengan mudah diserang untuk mencuri informasi, memantau konten, melihat kerentanan, dan sejenisnya.

Contoh Kesalahan Desain

Banyak aplikasi tidak melakukan verifikasi email (sebagai identitas) untuk pembuatan akun, reset password, dll. Akibat kesalahan yang dapat berakibat fatal

  1. Orang lain dapat membuat akun kita dengan alamat email orang tersebut, kita tidak dapat membuat akun dilayanan tersebut
  2. Reset password ke akun orang tersebut

 Yang seharusnya dilakukan adalah:

  1. Pengguna mengisikan alamat email sebagai akun
  2. Email dikirimkan dengan tautan (link) yang unik
  3. Tunggu pengguna melakukan klik terhadap tautan (untuk verifikasi)
  4. Akun baru dibuat Setelah sistem mendapatkan verifikasi tersebut

Pendekatan tradisional Software Security dan Kelemahannya
Cara penanganan keamanan dalam perangkat lunak seperti ini biasa terjadi, tetapi juga bermasalah karena beberapa alasan, beberapa di antaranya:
  1. Pengembang perlu secara eksplisit memikirkan kerentanan keamanan, sementara pada saat yang sama berfokus pada penyelesaian fungsionalitas bisnis.
  2. Mengharuskan setiap pengembang untuk menjadi ahli keamanan.
  3. Diasumsikan bahwa orang yang menulis kode dapat memikirkan setiap potensi kerentanan yang mungkin terjadi sekarang atau di masa mendatang
Software Architecture and Software Design
  1. Arsitektur perangkat lunak (Software Architecture) dari suatu sistem menggambarkan organisasi atau struktur sistem, dan memberikan penjelasan tentang bagaimana perilakunya.
  2. Desain perangkat lunak (Software Design) adalah proses konseptualisasi requirement perangkat lunak ke dalam implementasi perangkat lunak.
6 Aktivitas Risk Analysis Methodology
  1. Software characterization
  2. Threat analysis
  3. Architectural vulnerability assessment
  4. Risk likelihood determination
  5. Risk impact determination
  6. Risk mitigation planning
Risk Likelihood Determination


Desain

Desain adalah panduan prinsip bagaimana sebuah sistem dibangun dan dapat diterapkan di semua tingkatan, mulai dari kode hingga arsitektur. Desain mencakup aktivitas apa pun yang melibatkan pengambilan keputusan aktif

Security Design (Desain Keamanan)
- Abuse | misuse | pelanggaran kebijakan
- Desain keamanan berupa kendali (control) yang diterapkan terhadap hal di atas

Contoh 
Requirement
Pengguna tidak boleh login dari dua (2) tempat yang berbeda (parallel/concurrent login) Ada skenario pengujian login dari 2 IP yang berbeda pada saat yang bersamaan

Desain kendali
  •  Cookies + nomor IP + jenis browser + identitas komputer lainnya
  • Pemberitahuan (dan pencatatan) kejadian
Design Consideration
Menggunakan kriptografi ,Pemilihan panjang kunci (key size), Simetrik vs asimetrik,Digital certificate

Integrity Design

  1. Penggunaan hash function
  2. MD5, SHA
  3. Referential integrity pada database

Buat contoh architecture risk analysis


Architectural risk assessment adalah proses manajemen risiko yang mengidentifikasi kelemahan dalam arsitektur perangkat lunak dan menentukan risiko terhadap aset informasi bisnis yang dihasilkan dari kelemahan tersebut. Melalui proses penilaian risiko arsitektur, kelemahan ditemukan yang memaparkan aset informasi terhadap risiko, risiko diprioritaskan berdasarkan dampaknya terhadap bisnis, mitigasi untuk risiko tersebut dikembangkan dan diterapkan, dan perangkat lunak dinilai ulang untuk menentukan kemanjuran mitigasi. .

Tuesday, November 29, 2022

Modul 9 : Pertemuan 11 (Socket Programming - Multirecipient)

 Multirecipient


1.1 Tujuan

  1. Mahasiswa memahami konsep pengiriman data untuk Multi Recipient
  2. Mahasiswa mampu membuat program pengiriman data untuk Multiple Recipient

1.2 Dasar Teori

Konsep client-server merupakan dasar dari setiap transaksi yang terjadi pada setiap aplikasi jaringan. Socket merupakan antarmuka antara application process dan transport layer. Setelah sebelumnya kita mempelajari beberapa metode untuk penanganan request dari banyak client ke server, maka muncul pertanyaan Bagaimana Jika kita akan mengirimkan data ke banyak penerima? Ada beberapa solusi yang dapat diterapkan diantaranya adalah menggunakan fasilitas yang disediakan oleh jaringan yaitu broadcast dan multicast. Dalam penerapannya metode broadcast dan multicast sendiri memiliki keterbatasan, yaitu:

  1. Hanya UDP socket yang dapat melakukan broadcast dan multicast
  2. Broadcast hanya mencakup lingkup lokal, biasanya jaringan area local (LAN).
  3. Multicast di seluruh Internet saat ini tidak didukung oleh sebagian besar penyedia layanan Internet.

Broadcast merupakan pengiriman data dengan tujuan semua alamat yang berada dalam 1 jaringan. Aplikasi akan mengirimkan data ke alamat broadcast, apabila data dikirim ke alamat ini maka semua host yang berada dalam jaringan tersebut akan menerima data. Sebelum mengirimkan data ke alamat broadcast, maka kita harus meminta “izin” kepada sistem untuk melakukan broadcast dengan men-set opsi SO_BROADCAST harus pada sisi pengirim. Berbeda dengan broadcast, multicast merupakan pengiriman data dengan tujuan alamat group dalam 1 jaringan. Pada prakteknya dalam pemrograman tidak perlu set permission untuk multicast. Multicast sender dapat men set nilai TTL untuk mengirimkan datagram. Langkah-langkah yang harus dilakukan dalam pemrograman untuk melakukan broadcast maupun multicast pada dasarnya sama dengan pemrograman menggunakan UDP, namun pada broadcast perlu penambahan socket option SO_BROADCAST, sehingga sistem mengizinkan untuk melakukan broadcast.

1.3 Percobaan

Program 1: program multicast

multicast_server.py

multicast_client.py













Hasil Program 

Analisa:
Pada program diatas merupakan program multicast yang mana server dapat menerima 2 client tetapi dengan berbeda PC dengan membuat multicast_group dan server address yang sama. Alamat untuk multicast, yang disebut grup multicast, adalah subset dari rentang alamat IPv4 reguler (224.0.0.0 hingga 230.255.255.255) yang dicadangkan untuk lalu lintas multicast. Disini grup multicast nya adalah 224.3.2.79 . Alamat ini diperlakukan secara khusus oleh router dan switch jaringan, sehingga pesan yang dikirim ke grup dapat didistribusikan melalui Internet ke semua penerima yang telah bergabung dengan grup. Lalu, Mengirim Pesan Multicast Klien gema yang dimodifikasi ini akan mengirim pesan ke grup multicast, lalu melaporkan semua tanggapan yang diterimanya. 

Program2
broadcast_server.py








    broadcast_client.py








Hasil program 

Analisa:

Pada program diatas merupakan program broadcast yang merupakan transmisi jaringan one-to-all. ). Pada server menggunakan domain AF_INET  yang Menyediakan datagram, yang merupakan pesan tanpa sambungan dengan panjang maksimum tetap yang keandalannya tidak dijamin. Datagram dapat rusak, diterima rusak, hilang, atau dikirim berkali-kali. Opsi ini mengambil nilai int. Ini adalah opsi Boolean. Opsi SO_REUSEPORT yang disetel ke soket menentukan bahwa aturan yang digunakan dalam memvalidasi alamat yang disediakan oleh subrutin bind harus memungkinkan penggunaan kembali kombinasi port/alamat lokal. Setiap pengikatan kombinasi port/alamat harus menentukan opsi soket SO_REUSEPORT. 










Wednesday, November 23, 2022

Tugas 5 Socket Programming

Multirecipient

SMTP (Simple Mail Transfer Protocol) adalah protokol TCP/IP standar internet untuk pengiriman surat elektronik dari pengirim ke satu atau lebih penerima. Untuk terhubung ke server email SMTP, kami memerlukan detail HOSTNAME , USERNAME , PASSWORD dan PORT NUMBER . Python menyediakan smtplib modul built-in untuk mengirim email menggunakan SMTP Server. Tidak diperlukan instalasi tambahan. Jadi pertama-tama, kita perlu mengimpor ini di bagian atas skrip dan menentukan objek sesi klien SMTP yang dapat digunakan untuk mengirim email.


Unicast 
Unicast adalah metode pengiriman pada IPv4 yang konsepnya adalah “Point to Point” atau “One to One”, jadi paket yang dikirim hanya akan diterima oleh satu host. Analoginya adalah seperti topologi diatas ada PC0, PC1, PC2, PC3, PC4 yang berada dalam 1 segment jaringan. Lalu ada 2 PC yang sedang berkomunikasi contohnya PC0 dengan PC1, PC selain PC0 dan PC1 tidak akan mengetahui ataupun ikut berkomunikasi.
Unicast biasa digunakan pada protokol : HTTP, FTP, SMTP, Telnet, DNS ,dll.




Kelebihan Unicast
  1. Server merespon permintaan dari klien pada waktu yang tepat.
  2. Server mengirimkan data yang berbeda untuk permintaan yang berbeda dari setiap pelanggan, yang mudah untuk menerapkan layanan yang dipersonalisasi.

Kekurangan unicast
  1. Server mengirimkan aliran data ke setiap klien. Lalu lintas server = jumlah klien × lalu lintas klien.
  2. Pada aplikasi media streaming yang jumlah pelanggannya banyak dan trafik tiap client banyak, maka server mengalami overload.
  3. Bandwidth jaringan yang ada adalah struktur piramida. Bandwidth backbone antar kota hanya 5% dari total bandwidth semua pengguna. Jika hanya 5% pelanggan di jaringan yang menggunakan protokol unicast, jaringan backbone akan kelebihan beban.

Broadcast

Broadcast adalah salah satu metode pengiriman di IPv4 yang memiliki konsep “One to Everyone” merupakan alamat IPv4 yang didesain agar diproses oleh semua host dalam jaringan yang sama. jika ada satu host yang mengirim paket secara broadcast maka setiap host yang aktif di segment jaringan yang sama akan memprosesnya. Analoginya adalah ketika PC0 mengirim paket secara broadcast maka seluruh PC lain akan menerima dan memprosesnya

Dalam jaringan LAN, komputer asal sebagai host mengirimkan data informasi kepada sembarang komputer lain yang terhubung di dalam jaringan. Transmisi jaringan broadcast memiliki kekurangan yaitu sistem asal yang menjadi host tidak akan mengetahui bagaimana respon dari sistem tujuan apakah data diterima dengan baik atau data terjadi corrupt. Contoh penggunaan broadcast adalah transmisi saluran data pada televisi.

Multicast

Multicast adalah metode pengiriman pada IPv4 yang memiliki konsep “One to Many“. Multicast menggunakan IP 224.0.0.0 – 239.255.255.255. Dapat kita analogikan ada PC0, PC1, PC2, PC3, dan PC4. Lalu PC0, PC1, dan PC2 sedang berkomunikasi tanpa diikuti oleh PC3 dan PC4. Contoh dalam kehidpan sehari-harinya adalah ketika seorang pelatih memberikan instruksi kepada pemainnya tanpa diketahui oleh tim lawan. Multicast berjalan pada protokol seperti Live Streaming, Radio Online, dll. Yang dimaksud Multicast adalah komunikasi yang tidak dapat di pause. Multicast biasa digunakan untuk komunikasi routing protocol untuk mencari jalur tercepat.

Modul 8 : Pertemuan 10 (Socket Programming - Multithreading)

 Multithreading


1.1 Tujuan

1.2 Dasar Teori

Konsep client-server merupakan dasar dari setiap transaksi yang terjadi pada setiap aplikasi jaringan. Socket merupakan antarmuka antara application process dan transport layer. Forking sebagai salah satu metode penanganan multiple request dari client yang sudah dipelajari sebelumnya memiliki kelemahan, yaitu:

a. Performansi

b. Portability

c. Kompleksitas

Salah satu solusi untuk permasalahan diatas adalah penggunaan thread. Thread berjalan secara paralel dan menggunakan shared memory global. Karena semua thread berjalan dalam proses dan ruang memori yang sama, secara otomatis thread berbagi soket yang lewat di antara mereka. Hal ini serupa dengan cara child process mewarisi deskriptor soket. Namun, tidak seperti proses, thread biasanya lebih murah untuk memulai, dan bekerja pada mesin Unix dan Windows di bawah standar Python.

1.3 Percobaan

Percobaan 1

echo_server_multithread.py


echo_client.py

Hasil Program


Analisa: 
Ketika kita coba jalankan programnya, maka pada server akan server langsung mendengarkan dan menghubungkan pada host dan port pada client. Disini server dapat menerima beberapa client yang mana setelah kita run pada client 1 maka ia akan menampilkan teks bahwa client 1 telah terhubung pada host pada 127.0.0.1 dan port 12345, maka pada server langsung tersambung dengan client 1 dengan menampilkan connection from 127.0.0.1, 36944. Begitupun sama dengan Client 2. kita perlu mengimpor modul `threading`, modul threading tingkat tinggi dengan berbagai fitur berguna. Kami menggunakan metode konstruktif `Thread` untuk membuat instance thread. Thread, dalam modul ini, merangkum utas dengan baik, menyediakan antarmuka yang bersih untuk bekerja dengannya. Kemudian kita tambahkan import socket. Lalu, kita memanggil host dengan 'localhost' dan port dengan 12345. 

Percobaan 2
chat_server.py

chat_client.py



Hasil Program


Analisa : 
Nama host server dan port terikat bersama dan terhubung ke soket. Menerima Paket/Pesan dari Server, Untuk menerima pesan, socket_server memanggil fungsi recv() untuk menerima 1024 data. Ini disimpan dalam objek pesan dan diterjemahkan menggunakan fungsi decode(). Pesan tersebut kemudian dicetak dengan nama host server dan pesan diterima.Klien dapat memasukkan pesan apa pun sebagai input dan menyandikannya dan mengirimkannya ke server menggunakan soket.














Tugas 4 Socket Programming

Multiplexing

Multiplexing adalah cara menangani beberapa klien dalam satu proses server. Aplikasi ini memungkinkan klien untuk terhubung ke server dan menambahkannya ke watch list. Watch list hanyalah sebuah array deskriptor soket. Kemudian sistem operasi memberitahu aplikasi klien (jika ada) yang perlu dilayani atau jika klien baru telah membuat koneksi. Untuk menangani permintaan dari client, server menggunakan fungsi select(). Fungsi select() merupakan sebuah fungsi sistem yang memungkinkan programmer untuk menentukan socket descriptor yang akan digunakan. 

Preforking

Preforking : Membuat proses anak dengan jumlah tertentu pada saat aplikasi dimulai,Preforking membatasi semua cost yang terkait dengan pembuatan child process ke bagian inisialisasi aplikasi  ketika sebuah client terkoneksi, maka proses yang menanganinya telah terbentuk. Preforking menciptakan salinan sebuah proses membutuhkan biaya kinerja yang cukup besar, tambah lagi jika dilakukan pada aplikasi yang besar. Biaya kinerja akan semakin mahal seiring banyaknya jumlah client yang terhubung dengan server. Untuk mengurangi biaya kinerja yang dipergunakan untuk menggandakan proses induk digunakan strategi preforking, yaitu dengan membuat proses anak dengan jumlah tertentu pada saat aplikasi dimulai, kemudian proses anak akan melayani client yang terhubung. Fungsi accept() tidak dipanggil pada parent process, tapi pada setiap child process. Listening socket descriptor tidak di close di child process.

Contoh program menggunakan python untuk Multiplexing dan preforking

Server

Client

Hasil program 










Monday, November 21, 2022

Tugas 3 Socket Progamming

Arsitektur client server

Arsitektur client – server melibatkan minimal 1 server dan 1 client untuk saling berkomunikasi. Server berfungsi sebagai pihak yang merespons apa yang dikirim client, sedangkan client merupakan sisi yang meminta data sesuai dengan permintaan user. mendefinisikan client-server sebagai arsitektur yang paling banyak digunakan saat ini. Dimana client dapat melakukan proses sendiri, ketika client meminta data, server akan mengirimkan data sesuai yang diminta, kemudian proses akan dilakukan di client.

Client adalah sembarang sistem atau proses yang melakukan suatu permintaan data atau layanan ke server.

Server adalah sistem atau proses yang menyediakan data atau layanan yang diminta oleh client. Secara fisik, sebuah server dapat berupa komputer mainframe, mini-komputer, workstation, ataupun PC atau peranti lain seperti printer, server tidak harus berupa sistem fisik, tetapi juga suatu proses.

Dalam model Klien/Server, sebuah aplikasi dibagi menjadi dua bagian yang terpisah, tapi masih merupakan sebuah kesatuan yakni komponen Klien dan komponen Server. Komponen klien juga sering disebut sebagai front-end, sementara komponen server disebut sebagai back-end. Komponen klien dari aplikasi tersebut dijalankan dalam sebuah workstation dan menerima masukan data dari pengguna. Komponen klien tersebut akan menyiapkan data yang dimasukkan oleh pengguna dengan menggunakan teknologi pemrosesan tertentu dan mengirimkannya kepada komponen server yang dijalankan di atas mesin server, umumnya dalam bentuk request terhadap beberapa layanan yang dimiliki oleh server. Komponen server akan menerima request dari klien dan langsung memprosesnya lalu mengembalikan hasil pemrosesan tersebut kepada klien. Klien pun menerima informasi hasil pemrosesan data yang dilakukan server dan menampilkannya kepada pengguna, dengan menggunakan aplikasi yang berinteraksi dengan pengguna.

Forking

forking merupakan cara tradisional untuk menghandle multiple clients Ketika sebuah aplikasi memanggil fork (), maka dibuat copyan dari calling program, sampai ke program counter(PC), dan child process baru dimulai dengan copyan tersebut. Hasil kembalian dari fork() : sekali dalam program pemanggil dan waktu berikutnya dalam child process. Nilai kembalian dalam program pemanggil adalah PID dari child process baru, sementara dalam child process itu adalah 0.

Proses bercabang adalah cara tradisional untuk menyusun tugas paralel, dan merupakan bagian mendasar dari rangkaian alat Unix. Forking didasarkan pada gagasan menyalin program: ketika sebuah program memanggil rutin fork, sistem operasi membuat salinan baru dari program itu di memori, dan mulai menjalankan salinan itu secara paralel dengan yang asli. Beberapa sistem tidak benar-benar menyalin program aslinya (ini adalah operasi yang mahal), tetapi salinan baru berfungsi seolah-olah itu adalah salinan literal.

Setelah operasi fork, salinan asli dari program disebut proses induk , dan salinan yang dibuat oleh os.forkdisebut proses anak . Secara umum, orang tua dapat membuat sejumlah anak, dan anak dapat membuat proses anak mereka sendiri -- semua proses bercabang berjalan secara mandiri dan paralel di bawah kendali sistem operasi. Ini mungkin lebih sederhana dalam praktiknya daripada teori; skrip Python pada Contoh 3-1 mem-fork proses anak baru hingga Anda mengetikkan "q" di konsol.

Multithreading

Multithreading adalah kemampuan yg memungkinkan kumpulan instruksi atau proses dpt dijalankan secara bersamaan dlm sebuah program. multithreading juga cara untuk mencapai multitasking. Dalam multithreading, konsep utas digunakan. Mari kita pahami dulu konsep thread dalam arsitektur komputer. Salah satu solusi untuk permasalahan diatas adalah penggunaan thread. Thread berjalan secara paralel dan menggunakan shared memory global. Karena semua thread berjalan dalam proses dan ruang memori yang sama, secara otomatis thread berbagi soket yang lewat di antara mereka. Hal ini serupa dengan cara child process mewarisi deskriptor soket. Namun, tidak seperti proses, thread biasanya lebih murah untuk memulai, dan bekerja pada mesin Unix dan Windows di bawah standar Python.


Dalam komputasi, proses adalah turunan dari program komputer yang sedang dieksekusi. Setiap proses memiliki 3 komponen dasar:
  1. Program yang dapat dieksekusi.
  2. Data terkait yang dibutuhkan oleh program (variabel, ruang kerja, buffer, dll.)
  3. Konteks eksekusi program (Status proses)

Multi-threading: Beberapa utas dapat ada dalam satu proses di mana:

  1. Setiap utas berisi set register dan variabel lokalnya sendiri (disimpan dalam tumpukan) 
  2. Semua utas proses berbagi variabel global (disimpan di tumpukan) dan kode program 

Pertimbangkan diagram di bawah ini untuk memahami bagaimana banyak utas ada di memori



Contoh program menggunakan python untuk forking dan multithreading

Server

Client

Hasil program 




Sunday, November 6, 2022

Praktikum Multiplexing

 Multiplexing


1.1 Dasar Teori

Konsep client-server merupakan dasar dari setiap transaksi yang terjadi pada setiap aplikasi jaringan. Socket merupakan antarmuka antara application process dan transport layer. Multiplexing adalah cara menangani beberapa klien dalam satu proses server. Aplikasi ini memungkinkan klien untuk terhubung ke server dan menambahkannya ke watch list. Watch list hanyalah sebuah array deskriptor soket. Kemudian sistem operasi memberitahu aplikasi klien (jika ada) yang perlu dilayani atau jika klien baru telah membuat koneksi. Untuk menangani permintaan dari client, server menggunakan fungsi select(). Fungsi select() merupakan sebuah fungsi sistem yang memungkinkan programmer untuk menentukan socket descriptor yang akan digunakan.

1.2 Percobaan

Program 1

multiplexing_server.py

multiplexing_client.py

Hasil Program 


Program 2

tcp_echo_server.py

tcp_echo_client.py

Hasil Program

Program 3

tcp_multiplexing_server.py


tcp_multiplexing_client.py


Hasil Program



Latihan

1. Buat kembali program diatas dengan menggunakan program udp

2. Buatlah program calculator sederhana dengan protokol tcp dimana client mengirimkan soal (cth: 2+2), dan server membalas dengan hasil perhitungan (cth: 4), program client kemudian menampilkan hasil dari server dan siap menerima inputan soal baru. Program client akan berhenti jika menerima inputan cancel. Gunakan multiplexing pada program server agar dapat menangani lebih dari 1 client secara bersamaan.

3. Buatlah kembali program sesuai dengan spesifikasi soal 2 dengan protokol udp.