Home » » PHP Network Programming

PHP Network Programming

Written By Unknown on Sabtu, 28 September 2013 | 09.26

PHP merupakan bahasa pemrogramman web yang sangat populer, hampir 75% www (world wide web) aplikasinya menggunakan PHP, apalagi dengan kombinasi Jquery (Javascript Library) kepopuleran PHP bertambah. tetapi tidak hanya itu, cakupan PHP pun sudah semakin luas, bahkan PHP sudh merilis jenis Desktop Interpreter-nya, biasa desbut sebagai PHP GTK. namun pada kesempatan ini saya akan mencoba membahas sedikit penjelasn tentang Network programming dengan PHP, seperti apa ya Network Programming pada PHP itu ?
Berkomunikasi dengan berbagai Protokol internet memang banyak cara, dan PHP adalah salah satunya, PHP menyediakan fungsi-fungsi yang memudahkan kita untuk berkomunikasi dengan internet Protocol, dengan kemudahan dari segi fungsi tentu saja baris kode yang dihasilkan juga relative sedikit./p>

Socket

sebelum beranjak lebih jauh, sebaiknya kita memahami sedikit tentang protocol, port dan socket, Protocol di ibaratkan seperti bahasa, mengatur bagaimana dua komputer saling berkomunikasi, dan di luar sana ratusan jenis protocol yang dapat kita gunakan, seperti File transfer Protocol(FTP), Hyper Text Transfer Protocol (HTTP), Simple Network Managemen Protocol (SNMP) dan masih banyak lagi tentunya, setiap protocol memilik port tersendiri secara default, port sendiri adalah gerbang atau pintu masuk dari setiap protocol tersebut, kisaran port antara 1-65535 dimana port antara 1023 merupakan bagian dari Administratif user, secara default setiap PC "listening" terhadap 0 port, artinya setiap PC siap menerima Connections dari mana saja, misalnya kita membuka sebuah halaman website (http) yang telah terinstall webserver, maka secara default web server akan membuka port 80 agar kita bisa berkomunikasi dengan protocol http yang ada pada PC yang menyediakan layanan tersebut.
Socket merupakan literal Connector antara port dan Program, secara gamblang cara kerja socket bisa kita amati pasa switch electrik (listrik) yang ada pada rumah kita, saklar merupakan Socketnya, Managemen Socket di PHP ada dua jenis, easy way dan Hard way, maksudnya pilihan easy way tidak terlalu efisien bila id bandingkan dengan option hard way.

Socket merupakan sebuah File

cara termudah bekerja dengan socket adalah dengan menganggapnya sebagai sebuah file, pada kenytaanya jika kita menggunakan varian NIX (linux) socket adalah sebuah file, sedangkan jika menggunakan windows akan berbeda, Windows Os dapat mensimulasikan keperluan Socket tergantung dari behavior yang digunakan.
PHP bekerja sejalan dengan linux, yaitu menganggap socket adalah sebuah file, dimana artinya kita bisa menggunakan perintah seperti fread() dan fwrite() pada socket, seperti halnya bekerja normal dengan file, pastinya kita menggunakan fungsi fread() untuk membaca sebuah binarry file dan fwrite() untuk menulisanya., contoh pernggunaan fread() dan fwrite() pada PHP untuk keperluan Socket seperti berikut:
1
2
3
4
5
6
7
8
9
10
11
12
class="php">
$fp = fsockopen ("domain.org", 80);
if ($fp) {
        fwrite($fp, "GET / HTTP/1.1\r\nHOST: domain.org\r\n\r\n");
        while (!feof($fp)) {
        print fread($fp,256);
    }
    fclose ($fp);
} else {
    print "Fatal error\n";
}
fungsi fsockopen() di atas akan membuka sebuah alamat server dengan port yang kita tentukan, kemudian setelah terkoneksi menuggu (waiting) untuk proses yang akan kita lakukan selajutnya, dengan menggunakan fungsi ini kita bisa mengirimkan data dengan protocol HTTP layankanya menggunakan browser biasa, bisa menggunakan fungsi GET atau POST, fungsi fread() lah yang melakukan tugas itu, dengan menggunakan fread()kita mengirimkan data, seperti contoh di atas, kita menggunakan method GET untuk melakukan request.
pada contoh di atas, kita membuka koneksi socket ke domain.org pada port 80, dan kemudian memeriksa replay dengan menggunakan fungsi fsockopen(), jika tidak ada replay maka socket tidak berhasil (failure), kemudian jika socket terbentuk, kita melakukan request ke HTTP dengan metode GET, request HTTP kita terbentuk menjadi 2 bagian, yang pertama kita mengirimkan request dengan metode GET menggunakan fwrite(), meminta / yang merupakan root dari server domain.org, kedua kita me-request untuk membaca domain.org, dengan terkirimnya HTTP request tersebut, kita hanya tinggal menuggu replay (respon) dari web-server(berupa halaman web), dengan begitu, selama socket masih terbentuk (while) kita akan terus terkoneksi dengan domain.org melalui socket yang telah kita bentuk sebelumnya, dan menampilkan 256 byte dari respone web server.
jika kita menggunakan fsockopen() kita juga bisa melakukan compresi terhadap respon yang datang dari sisi server, atau bisa juga menunjukan kita siap untuk menerima content yang di compresi jika memang datangnya dari respon server sudah terkompresi, seperi contoh:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class="php">
$fp = fsockopen ("domain.org", 80);
if ($fp) {
        fwrite($fp, "GET / HTTP/1.1\r\nHOST: domain.org\r\n\
               ACCEPT-ENCODING: gzip\r\n\r\n");
         
        while (!feof($fp)) {
        print fread($fp,256);
    }
    fclose ($fp);
} else {
    print "Fatal error\n";
}
dengan demikian socket siap menerima respon server yang terkompresi, biasa banyak juga server yang melakukan kompresi terhadap replay mereka, karena pada satu sisi bisa meningkatkan kinerja server itu sendiri.

Membuat Server Socket

Sistem server pada Socket di php dapat dibuat dengan menggunakan fungsi socket_create_listen() fungsi ini akan menciptakan sebuah server socket dengan port yang dapat kita tentukan, dan memberikan respon berupa pointer false jika memang socket tidak dapat terbentuk. untuk dapat menggunakan resource yang ada pada socket ada baiknya jika semua resource disimpan dalam bentuk variable, karena akan memudahkan dalam proses pembangunan server itu sendiri, karena pada dasarnya terkadang port yang kita gunakan sudah di pakai oleh program yang lain, sehingga server socket tidak akan pernah terbentuk.
fungsi socket_accept() akan memberikan respon value dari socket_create_listen() dan mengembalikan respon terhadap client yang sedang terkoneksi dengan port yang kita tentukan, jika tidak ada client yang terkoneksi dengan port yang kita tentukan maka socket_accept() akan menunggu koneksi tersebut (waiting Connections).
pada implementasinya, kita harus menentukan socket mana yang bisa ditulisi oleh client dan socket mana yang tidak bisa ditulisi oleh client, paramet pengaturan hal tersebut sudah terdapat pada fungsi socket_write() dansocket_read(), dengan begitu kita (server) bisa mengatur apa saja yang bisa client lakukan (write dan read), berikut contoh server socket sederhana, dimana ketika clinet terkoneksi dengan server, server akan memberikan respon terhadap client yang berbentuk ROT-13, dan membaca request dari client dalam bentuk ROT-13.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class="php">
$socket = socket_create_listen("12345");
 
if (!$socket) {
    print "Failed to create socket!\n";
    exit;
}
 
while (true) {
    $client = socket_accept($socket);
    $welcome = "\nWelcome to the Amazing ROT13 Machine.\n
    Type '!close' to close this connection, or type '!halt'
    to halt the server.\n";
     
    socket_write($client, $welcome);
    while (true) {
        $input = trim(socket_read ($client, 256));
        if ($input == '!close') {
            break;
        }
        if ($input == '!halt') {
            socket_close ($client);
            break 2;
        }
     
    $output = str_rot13($input) . "\n";
    socket_write($client, $output);
    print "Them: $input, Us: $output\n";
    }
    socket_close ($client);
}
 
socket_close ($socket);
save dengan nama socket.php dan letakan di root server, kemudian jalankan, dan socket siap menunggu koneksi, server bisa di jalankan melalui browser atau CLI, tergantung kebutuhan, kemudian clint melakukan koneksi melalui Comandd Line Tools, bukan melalui browser, ketika server socket sudah berjalan (running), maka client langsung bisa terkoneksi dengan server dengan mengetikan perintah telnet server port eg: telnet 127.0.0.1 12345 , perintah ini akan menjalan program telnet di sisi client, sepeerti gambar berikut
pemrogramman socket pada PHP tidak jauh berbeda dengan bahasa lainya, bahkan Pemrogramman socket inilah dasar dari semua perangkat atau tools yang digunkan oleh attacker - attacker untuk melakukan bind connect dalam membypass firewall yang ada, sekian dulu, semoga bermanfaat :)
Share this article :
 
Support : support@masterfreelance.com | +62 - 857 - 1061 - 2210 | 327E8DA0
Copyright © 2013. MasterFreelance Blog - All Rights Reserved
Jl. Satria 5 No 27 - 28
Bojong Nangka , Kelapa Dua - Tangerang
15821, Banten - Indonesia