Rabu, 19 Februari 2014

Client-server Socket Programming dalam bahasa Python di Linux

artikel ini membahas cara membuat socket progrmming dalam bahasa python di Linux. cara di bawah ini hanya perlu membuat satu file source code, tetapi tetap menggunakan dua terminal saat menjalankannya. langkah-langkah dalam membuatnya adalah sebagai berikut.
1.  buat soure code server pada text editor. simpan file dengan nama server.py

'''
    Simple socket server using threads
'''

import socket
import sys
from thread import *

HOST = ''   # Symbolic name meaning all available interfaces
PORT = 8889 # Arbitrary non-privileged port

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'

#Bind socket to local host and port
try:
    s.bind((HOST, PORT))
except socket.error as msg:
    print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
    sys.exit()
     
print 'Socket bind complete'

#Start listening on socket
s.listen(10)
print 'Socket now listening'

#Function for handling connections. This will be used to create threads
def clientthread(conn):
    #Sending message to connected client
    conn.send('Welcome to the server. Type something and hit enter\n') #send only takes string
     
    #infinite loop so that function do not terminate and thread do not end.
    while True:
         
        #Receiving from client
        data = conn.recv(1024)
        reply = 'OK...' + data
        if not data:
            break
        conn.sendall(reply)
    #came out of loop
    conn.close()

#now keep talking with the client
while 1:
    #wait to accept a connection - blocking call
    conn, addr = s.accept()
    print 'Connected with ' + addr[0] + ':' + str(addr[1])
     
    #start new thread takes 1st argument as a function name to be run, second is the tuple of arguments to the function.
    start_new_thread(clientthread ,(conn,))

s.close()

3. buka terminal dan masuk ke direktori tempat Anda menyimpan file source code Anda, misal cd Desktop, cd Downloads, dll
3. compile source code dengan mengetikkan python (nama file). kali ini ketikkan dengan perintah python server.py
4. buka terminal baru lalu ketikkan telnet localhost 8889 (localhost disesuaikan dengan yang ada pada source code yang telah dibuat.
7. socket yang dibuat akan memperlihatkan tampilan sebagai berikut. Anda bisa melakukan percakapan pada terminal kedua


Referensi: http://www.binarytides.com/python-socket-server-code-example/
Client-server Socket Programming dalam Bahasa Java di Linux

artikel ini akan membahas langkah-langkah membuat socket progrmming client server dalam bahasa Java. seperti membuat socket programming dalam bahasa C, kita juga harus membuat dua file source code. 

1. buat soure code server pada text editor. simpan file dengan nama yang sama dengan nama class. kali ini kita membuat file dengan nama class GreetingServer, maka simpan dengan nama file GreetingServer.java
// File Name GreetingServer.java
import java.net.*;
import java.io.*;
public class GreetingServer extends Thread{
   private ServerSocket serverSocket;
   public GreetingServer(int port) throws IOException{
      serverSocket = new ServerSocket(port);
      serverSocket.setSoTimeout(10000);
   }
   public void run(){
      while(true){
         try{
            System.out.println("Waiting for client on port " + serverSocket.getLocalPort() + "...");
            Socket server = serverSocket.accept();
            System.out.println("Just connected to "+ server.getRemoteSocketAddress());
            DataInputStream in = new DataInputStream(server.getInputStream());
            System.out.println(in.readUTF());
            DataOutputStream out = new DataOutputStream(server.getOutputStream());
            out.writeUTF("Thank you for connecting to " + server.getLocalSocketAddress() + "\nGoodbye!");
            server.close();
         }catch(SocketTimeoutException s){
            System.out.println("Socket timed out!");
            break;
         }catch(IOException e){
            e.printStackTrace();
            break;
         }
      }
   }
   public static void main(String [] args){
      int port = Integer.parseInt(args[0]);
      try{
         Thread t = new GreetingServer(port);
         t.start();
      }catch(IOException e){
         e.printStackTrace();
      }
   }
}

2. buat soure code client pada text editor. simpan file dengan nama yang sama dengan nama class. kali ini kita membuat file dengan nama class GreetingClient, maka simpan dengan nama file GreetingClient.java
// File Name GreetingClient.java
import java.net.*;
import java.io.*;
public class GreetingClient{
   public static void main(String [] args){
      String serverName = args[0];
      int port = Integer.parseInt(args[1]);
      try{
         System.out.println("Connecting to " + serverName + " on port " + port);
         Socket client = new Socket(serverName, port);
         System.out.println("Just connected to " + client.getRemoteSocketAddres());
         OutputStream outToServer = client.getOutputStream();
         DataOutputStream out = new DataOutputStream(outToServer);
         out.writeUTF("Hello from " + client.getLocalSocketAddress());
         InputStream inFromServer = client.getInputStream();
         DataInputStream in = new DataInputStream(inFromServer);
         System.out.println("Server says " + in.readUTF());
         client.close();
      }catch(IOException e){
         e.printStackTrace();
      }
   }
}

3. buka terminal dan masuk ke direktori tempat Anda menyimpan file source code Anda, misal cd Desktop, cd Downloads, dll
3. compile GreetingServer dengan mengetikkan javac GreetingServer.java (sebelumnya komputer harus sudah terinstall jdk dan jre.
4. jalankan GreetingServer dengan mengetik java GreetingServer (4 digit localhost). contoh java GreetingServer 8888
5. compile GreetingClient pada terminal berbeda dengan mengetik javac GreetingClient.java
6. jalankan client dengan mengetikkan  java GreetingClient localhost 8888 (sesuai dengan localhost server yang dibuat sebelumnya.
7. socket yang dibuat akan memperlihatkan tampilan sebagai berikut.

Referensi: http://www.tutorialspoint.com/java/java_networking.htm
Client-Server Socket Programming bahasa C di Linux

artikel ini akan membahas langkah-langkah membuat socket programming client-server dalam bahasa C. untuk dapat membuat chatt, kita harus membuat dua file source code, yaitu client dan server sebagai berikut.
1. buat source code server pada text editor lalu simpan, contoh simpan dengan nama server.c
 /* server */

#include<stdio.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netdb.h>
#include<stdlib.h>
#include<string.h>
#define MAX 80
#define PORT 43454
#define SA struct sockaddr

void func(int sockfd){
char buff[MAX];
int n;
for(;;){
bzero(buff,MAX);
read(sockfd,buff,sizeof(buff));
printf("From client: %s\t To client : ",buff);
bzero(buff,MAX);
n=0;
while((buff[n++]=getchar())!='\n');
write(sockfd,buff,sizeof(buff));
if(strncmp("exit",buff,4)==0){
printf("Server Exit...\n");
break;
}
}
}

int main(){
int sockfd,connfd,len;
struct sockaddr_in servaddr,cli;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1){
printf("socket creation failed...\n");
exit(0);
}
else
printf("Socket successfully created..\n");
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(PORT);
if((bind(sockfd,(SA*)&servaddr, sizeof(servaddr)))!=0)
{
printf("socket bind failed...\n");
exit(0);
}

else
printf("Socket successfully binded..\n");
if((listen(sockfd,5))!=0){
printf("Listen failed...\n");
exit(0);
}
else
printf("Server listening..\n");
len=sizeof(cli);
connfd=accept(sockfd,(SA *)&cli,&len);
if(connfd<0){
printf("server acccept failed...\n");
exit(0);
}
else
printf("server acccept the client...\n");
func(connfd);
close(sockfd);
}

2. buat source code client sebagai berikut lalu simpan dengan nama client.c
/* client */

#include<stdio.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netdb.h>
#include<string.h>
#include<stdlib.h>
#define MAX 80
#define PORT 43454
#define SA struct sockaddr

void func(int sockfd){
char buff[MAX];
int n;
for(;;){
bzero(buff,sizeof(buff));
printf("Enter the string : ");
n=0;
while((buff[n++]=getchar())!='\n');
write(sockfd,buff,sizeof(buff));
bzero(buff,sizeof(buff));
read(sockfd,buff,sizeof(buff));
printf("From Server : %s",buff);
if((strncmp(buff,"exit",4))==0){
printf("Client Exit...\n");
break;
}
}
}

int main(){
int sockfd,connfd;
struct sockaddr_in servaddr,cli;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1){
printf("socket creation failed...\n");
exit(0);
}
else
printf("Socket successfully created..\n");
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
servaddr.sin_port=htons(PORT);
if(connect(sockfd,(SA *)&servaddr,sizeof(servaddr))!=0){
printf("connection with the server failed...\n");
exit(0);
}
else
printf("connected to the server..\n");
func(sockfd);
close(sockfd);
}

3. buka terminal dan masuk ke direktori tempat Anda menyimpan source code yang Anda buat, misal: cd Desktop, cd Downloads, dll.
4. compile server.c dengan mengetikan gcc -o server server.c
5. buka terminal baru dan compile client.c dengan mengetikan gcc -o client client.c
6. jalankan server terlebih dahulu dengan mengetikan ./server pada teminal server
7. jalankan client dengan mengetikan ./client pada terminal client
8. computer sudah dapat menjalankan chatt antara client dan server. tampilan layar akan tampak seperti gambar di bawah ini.

Referensi: http://mcalabprogram.blogspot.com/2012/01/tcp-sockets-chat-applicationserver.html


Perbedaan Jaringan Client-Server dengan Peer to Peer

Jaringan Client-server

Client Server merupakan model jaringan yang menggunakan satu atau beberapa komputer sebagai server yang memberikan resource-nya kepada komputer lain (client) dalam jaringan, server akan mengatur mekanisme akses resource yang boleh digunakan, serta mekanisme komunikasi antar node dalam jaringan.

Selain pada jaringan lokal, sistem ini bisa juga diterapkan dengan teknologi internet. Dimana ada suatu unit komputer) berfungsi sebagai server yang hanya memberikan pelayanan bagi komputer lain, dan client yang juga hanya meminta layanan dari server. Akses dilakukan secara transparan dari client dengan melakukan login terlebih dulu ke server yang dituju.

Client hanya bisa menggunakan resource yang disediakan server sesuai dengan otoritas yang diberikan oleh administrator. Aplikasi yang dijalankan pada sisi client, bisa saja merupakan resource yang tersedia di server. namun hanya bisa dijalankan setelah terkoneksi ke server. Pada implementasi software splikasi yang di-install disisi client berbeda dengan yang digunakan di server.

Jaringan peer to peer
jaringn peer to peer adalah sebuah jaringan komputer dimana setiap komputer disusun dan dihubungkan satu sama lain tanpa adanya kontrol terpusat yang berperan sebagai server murni. Setiap komputer yang ada dalam jaringan peer to peer menawarkan layanan yang sama sehingga server bisa sebagai client atau client juga bisa sebagai server.

Perbedaan antara Client-server dengan peer to peer



Kelebihan client server
Kelebihan peer to peer
Memberikan keamanan yang lebih baik
Pelaksanaan tidak terlalu mahal
Lebih mudah pengaturannya bila networknya besar karena administrasinya disentralkan
Tidak membutuhkan software server NOS ( Network Operating System )
Semua data dapat dibackup
Tidak membutuhkan administrator network yang handal
Kerugian client server
Kerugian peer to peer
Membutuhkan hardware yang lebih tinggi dan mahal untuk mesin server
Tidak cocok untuk network skala besar, administrasi menjadi tidak terkontrol
Membutuhkan administrator yang professional
Tiap user harus dilatih untuk menjalankan tugas administrative
Mempunyai satu titik lemah jika menggunakan satu server, data user menjadi tak ada jika server mati.
Keamanan kurang
Membutuhkan software NOS yang mahal contoh : NT atau server Windows 2000, XP,Novell, UNIX
Semua mesin yang sharing resource tidak mempengaruhi performaa


referensi:
- http://tutorial-mj.blogspot.com/2012/08/jaringan-peer-to-peer-non-dedicated.html
- http://auliarampack.blogspot.com/
- http://shareaza.sourceforge.net/mediawiki/index.php/File:Networks.png





Sabtu, 15 Februari 2014

SOCKET PROGRAMMING

Socket adalah mekanisme komunikasi yang memungkinkan terjadinya  pertukaran data antar program atau proses baik dalam satu mesin maupun antar mesin [1]. Socket merupakan sebuah Class yang disediakan oleh beberapa bahasa pemrograman yang digunakan oleh aplikasi untuk saling berhubungan. Berikut ini menunjukkan bagaimana suatu aplikasi berhubungan dengan aplikasi lainnya.




Socket pertama kali diperkenalkan di sistem UnixBSD versi 4.2, pada tahun 1983, sebagai kelanjutan dari implementasi protocol TCP/IP yang muncul pertama kali pada sistem Unix BSD versi 4.1 pada akhir tahun 1981. Hampir setiap varian unix atau linux mengadopsi BSD Socket [2]
Paradigma pada aplikasi jaringan berlaku model client-server. Aplikasi yang menginisialisasi koneksi, disebut aplikasi client. Sedangkan aplikasi yang menerima inisialisasi disebut sebagai aplikasi server. Oleh karena itu, jika kita membangun suatu aplikasi jaringan yang lengkap, maka kita harus membuat aplikasi client maupun aplikasi server.
Ada dua jenis socket yang bisa digunakan untuk membangun aplikasi, yakni TCP Socket dan UDP Socket. Perbedaan utamanya adalah, model TCP menggunakan konsep connection oriented dan reliable data transfer, sedangkan model UDP menggunakan konsep connectionless oriented dan unreliable data transfer. Sebuah aplikasi dapat menggunakan salah satu dari jenis socket tersebut disesuaikan dengan peruntukan aplikasi tersebut. Aplikasi berbasis TCP biasanya adalah aplikasi yang membutuhkan ketepatan data hingga 100% tapi tidak memperdulikan lama pengiriman, sedangkan aplikasi berbasis UDP biasanya adalah aplikasi yang tidak terlalu mempedulikan ketepatan data tapi sangat peduli dengan delay pengiriman. Contoh aplikasi TCP adalah web browser, sedangkan contoh UDP adalah Video Converence.
Untuk membangun aplikasi hal pertama yang perlu dilakukan adalah menganalisa jenis aplikasi, kebutuhan bandwidth, kebutuhan ketersampaian data, dan sensitifitas terhadap delay. Berdasarkan hal ini kita bisa menentukan protokol apa yang akan kita gunakan, TCP atau UDP [3].
Dalam network programming dibutuhkan socket yang bertindak sebagai interface pemrograman pada transport layer jaringan. Socket programming dapat dibuat dalam berbagai bahasa seperti java, c, atau phyton. Socket programming juga dapat dikatakan sebagai bentuk file dan manipulasi  I/O yang digunakan untuk membaca dan melewatkannya ke mesin lain dalam suatu jaringan. Setiap socket programming terdiri dari client dan server. Dengan port number dan IP address. Sebuah server dibatasi oleh port khusus pada mesin khusus dan menunggu koneksi dari client. Sedangkan client kemudian menyambungkan koneksi ke server dengan IP address dan nomor port tertentu [4]. 

Referensi :
[4]Sayed Mohamed Buhari. 2011. Prin of Programming Languages: A paradigm approach. New Delhi: Tata Graw-Hill

Rabu, 05 Februari 2014

Setting SSH

      Secure Shell atau SSH adalah protokol jaringan yang memungkinkan pertukaran data melalui saluran aman antara dua perangkat jaringan. SSH banyak digunakan terutama pada sistem berbasis Linux dan Unix untuk mengakses akun shell, SSH dirancang sebagai pengganti Telnet dan shell remote tak aman lainnya, yang mengirim informasi, terutama kata sandi, dalam bentuk teks sederhana yang membuatnya mudah untuk dicegat. Enkripsi yang digunakan oleh SSH menyediakan kerahasiaan dan integritas data melalui jaringan yang tidak aman seperti internet.
    SSH menggunakan kriptografi kunci publik untuk mengotentikasi komputer remote dan membiarkan komputer remote untuk mengotentikasi pengguna jika perlu. SSH biasanya digunakan untuk login ke mesin remote dan mengeksekusi berbagai perintah, tetapi juga mendukung tunneling, forwarding TCP port dan X11 connections yang dapat mentransfer file menggunakan SFTP atau SCP protocols. SSH menggunakan klien-server model.

(referensi: http://id.wikipedia.org/wiki/SSH )

Setting SSH
Ketik sudo apt-get install openssh-server pada terminal jika menggunakan ubuntu/debian. Jika menggunakan fedora/red-hat, ubah apt-get menjadi yum


Setting SSL

     SSL (Secure Sockets Layer) adalah sebuah protokol keamanan data yang digunakan untuk menjaga pengiriman data web server dan pengguna situs web tersebut. SSL berfungsi untuk memastikan data transaksi yang terjadi secara online dienkripsi/diacak-acak sehingga tidak dapat dibaca oleh pihak lain. Kegunaan utamanya adalah untuk menjaga keamanan dan kerahasiaan data ketika melakukan transaksi.


      OpenSSL adalah sebuah toolkit kriptografi yang mengimplementasikan SSL v2/v3 dan Transport Layer Security (TLS v1) dan terkait dengan protokol jaringan standar kriptografi yang dibutuhkan oleh keduanya. Aplikasi OpenSSL ini merupakan command line tool yang menggunakan berbagai fungsi kriptografi OpenSSL's crypto library dari shell. OpenSSL dapat digunakan untuk:
      1.       Penciptaan RSA, DH dan DSA parameter kunci
      2.       Penciptaan sertifikat X.509, CSRs dan CRLs
      3.       Perhitungan Pesan Digests
      4.       Enkripsi dan Dekripsi dengan Ciphers
      5.       Pengujian SSL / TLS Client dan Server
      6.       Penanganan S/MIME signed or encrypted email

(referensi: http://inilahinfo.blogspot.com/2012/04/apa-itu-ssl-definisi-dan-penjelasan-ssl.html , https://www.openssl.org/ )

Installasi OpenSSL

1. Pastikan komputer telah terhubung ke dalam jaringan komputer (internet/intranet) dan pastikan komputer telah menginstal web server sebelumnya.
2. Buka aplikasi terminal pada sistem operasi Linux. Gunakan akses sebagai root dengan mengetikkan sudo su (untuk Debian based) atau su (untuk Red Hat based) atau sesuaikan distro Linux. 
3. Ketikkan perintah yum install openssl openssl-devel mod_ ssl (pada Red Hat/Fedora based gunakan yum install, untuk Debian/Ubuntu based gunakan apt-get install). Jika diperlukan dapat ditambahkan opsi –skip-broken untuk mengabaikan peringatan lainnya. Tahap ini merupakan tahap penginstallan.
4. Setelah proses instalasi selesai, ketikkan perintah /ete/init.d/httpd restart (untuk LAMP) atau /opt/lampp/lampp restart. Perintah tersebut dijalankan untuk merestart XAMPP yang dijalankan. Tujuannya adalah untuk menjalankan SSL di apache XAMPP.