Anda di halaman 1dari 5

###################################################################

MENGENAL SOCKET PROGRAMMING DENGAN PHP


Author : KillFinger
Email : KillFinger@linuxmail.org
IRC : #SecretColony, #HackingCentre, #Level9-Team, #DoD @DAL.net
SecretColony Labs N Research Group.
###################################################################

"Socket programming dengan PHP?? Masa bisa sih??"

Itulah pertanyaan yang pernah dilontarkan oleh seseorang di IRC. Waktu itu saya
juga bertanya-tanya,
mungkin gak ya?. Setelah buka-buka artikel dari master2 PHP, akhirnya saya harus
berterima kasih
kepada Daniel Solin. ya, karena PHP sendiri tidak menerangkan tentang basic
understanding tentang apa
yang dimaksud dengan socket, bagaimana membuat code PHP sehingga 2 komputer itu
bisa berkomunikasi, dll.
Makanya pengertian PHP socket itu saya dapat dari Daniel Solin.

Ok, langsung fokus aja, kamu pasti tau apa itu network 'kan? socket? hmmm....nggak
juga?!
Gini, socket itu adalah salah satu low-level feature abstrack yang dimiliki oleh
operating system.
Cukup segitu aja karena kita tidak perlu mengetahui lebih jauh kalau hanya ingin
menggunakan socket
di program kita. Yang kita butuhkan hanya philosophy dasar dari cara kerja socket.

Network socket dalam PHP tidak/belum dilengkapi dengan 'most advanced feature'
sebagaimana yang
dimiliki oleh C, tapi 95% dari network application bisa digarap disini. Not bad
'kan?. Karenanya kamu
bisa membuat real network application menggunakan 'easy-to-use language', PHP.
Perhatikan contoh
code listing1.php (Bagian bawah artikel ini).

Perhatikan baris ke-8, penggunaan set_time_limit(0) agar PHP mengetahui kalau kita
menginginkan koneksi
pada waktu yang tak terbatas.

Pada baris ke-11 hingga ke-15, kita membuat socket baru. Hal ini dikenal dengan
global socket yang akan
menjadi check pamareter atas semua koneksi yang masuk. Untuk itu kita menggunakan
fungsi socket() yang
menggunakan 3 argument. Karena artikel ini tidak membahas tentang network proggie,
maka ke-3 argument tsb
tidak dibahas disini. Kalau level kamu sudah intermediate/advance kamu bisa
menggunakan argument2 lain
daripada yang digunakan pada contoh listing1 (artinya kamu udah mampu membuat
network programming).
Contoh yang cukup menarik pada listing1 terlihat di argument yang kedua,
SOCK_STREAM mendeklarasikan TCP
sebagai protocol dari socket (tidak dengan UDP).

Pada baris ke-18 hingga 22, socket yang baru terbentuk di bound ke IP address dan
port tertentu. Selama
kamu menginginkannya untuk jalan di local machine, maka nomer IP nya 127.0.0.1.
Port yang digunakan
adalah 10000, diambil secara random. Kamu bisa menggunakan port tertentu antara
1024-65535 yang tidak terpakai.

Baris ke-28 hingga 31 menerangkan kalau processnya kembali ke posisi listen.


Sedangkan pada baris ke 34
hingga 38 process akan menunggu koneksi yang masuk. Dalam istilah pemrograman,
fungsi accept_connect()
akan menunggu hingga koneksi itu datang sendiri. So, program pada listing1 akan
berhenti beroperasi pada
tahap ini hingga kita melakukan telnet/remote koneksi ke mesin tsb. Perlu
diperhatikan, accept_connect()
akan membuat socket lain ketika koneksi yang baru telah diterima, biasanya disebut
dgn $msgsock,
yang akan menangani bagian perkoneksian.

Pada baris ke-41 hingga 46 kita membuat welcome message yang akan diterima oleh
visitor dengan menggunakan
fungsi write(). Ingat, process ini dilakukan oleh $msgsock dan bukan oleh $sock.
Pada tingkat ini,
fungsi aceept_connect() telah mendeteksi adanya koneksi. Bisa disimpulkan disini
scriptnya telah berajalan baik.

Pada baris ke-49 hingga 54, terlihat sesuatu yang menarik. Disini $msgsock yang
mengambil alih untuk
memastikan $sock bisa masuk/diterima. Dalam istilah pemrograman, penggunaa read()
adalah untuk membaca
data dari koneksi kita. Supaya kita bisa menerima data, data tsb harus dikirim
terlebih dahulu dari
pihak lain. Seperti halnya accept_connect(), perintah read() akan menunggu hingga
sesuatu terjadi. Ketika
data telah diterima di port 10000, $msgsock, akan mengambil data tsb dan
menampilkannya melalui variable $buf.
Sekarang kita telah menerima tampilan data melalui $buf dan dapat mengirimkannya
kembali pada baris ke-57
hingga 61. Disini, sekali lagi $msgsock akan mengambil alih, dan $sock akan tetap
terbuka.

Hal terakhir pada script ini yaitu pada baris ke-64 hingga 67 PHP menutup socket
dan menutup koneksi network.

MENGUJI TCP SERVER KITA

Setelah mempelajari dari source code listing1 maka kini saatnya untuk pengetesan.
Jangan lupa untuk
merename source tersebut menjadi listing1.php. Seperti biasanya, supaya kita bisa
menjalankan suatu
program maka kita harus terlebih dahulu mengatur permissionnya:

chmod 755 listing1.php

Dan pastikan juga baris pertama source code listing1.php mengacu ke path PHP binary
system kamu. Lalu
tinggal dijalankan:

./listing1.php

Kalau terjadi error socket() function is undefined, maka kamu harus mengedit PHP
binary kamu dengan
menjalankan ./configure --enable-sockets, recompile dan reinstall PHP binary kamu
dengan command
make && make install.

Nah, setelah tidak ada error lagi langsung aja jalankan telnet ke server kamu
(dalam bahasan ini
adalah localhost):

$telnet localhost 10000

Perintah diatas menunjukkan kalau kita ingin melakukan koneksi ke server localhost
melalui port 10000
yang telah di tentukan di source code listing1.php. (Nama server dan port
disesuaikan dengan kode kamu).
Apabila semuanya lancar, maka akan tampak seperti berikut:

$Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
Welcome to my TCP server!

Wow....sudah masuk tuh...


Coba deh buat sesuatu yang berguna di server tsb. Sebagai contoh, saya mengetikkan:

Hello
You said: Hello
Connection closed by foreign host.

Gimana? kool? walaupun sederhana, namun kita telah membuat suatu network connection
yang real dan dapat
melakukan interkoneksi data melalui socket.

Sekarang kebayang gak kalo socket itu dijadikan backd00r? Gimana caranya?
Hehehe.....Udah ah segitu aja.
Lagian kan temanya bukan pembuatan backd00r.

*NOTE: PHP adalah interpreter language yang syntaxnya hampir sama dengan C
language. Kalau kamu sudah
familier dengan salah satunya maka kemungkinan kamu tidak akan kesulitan dalam
menggunakan keduanya. ;>

Semoga berguna untuk meningkatkan pengetahuan Proggie PHP kita.

Salam buat A_BlAcK_LisT, Acetosal, jhon angga, ryan_the, ucoxxx, AcCezZdENieD dan
KIDS_KIDS. Special buat teman2 yang
tidak bisa disebutkan satu persatu di #SecretColony, #HackingCentre, #DoD, #Level9-
Team, #AntiMedanHacking @t DAL.Net.

Best Regs

KillFinger

Greetz to Daniel Solin ,a freelance writer and Linux consultant whose specialty is
GUI programming.
His first book, SAMS Teach Yourself Qt Programming in 24 hours, was published in
May, 2000
Source Code Listing1.php

1 #!/usr/local/bin/php -q
2
3 <?php
4 /*
5 * We don't want any time-limit for how the long can hang
6 * around, waiting for connections:
7 */
8 set_time_limit(0);
9
10 /* Create a new socket: */
11 if( ($sock = socket( AF_INET, SOCK_STREAM, 0 )) < 0 )
12 {
13 print strerror( $sock ) . "\n";
14 exit(1);
15 }
16
17 /* Bind the socket to an address and a port: */
18 if( ($ret = bind( $sock, "127.0.0.1", 10000 )) < 0 )
19 {
20 print strerror( $ret ) . "\n";
21 exit(1);
22 }
23
24 /*
25 * Listen for incoming connections on $sock.
26 * The '5' means that we allow 5 queued connections.
27 */
28 if( ($ret = listen( $sock, 5 )) < 0 )
29 {
30 print strerror( $ret ) . "\n";
31 }
32
33 /* Accept incoming connections: */
34 if( ($msgsock = accept_connect( $sock )) < 0)
35 {
36 print strerror( $msgsock ) . "\n";
37 exit(1);
38 }
39
40 /* Send the welcome-message: */
41 $message = "Welcome to my TCP-server!\n";
42 if( ($ret = write( $msgsock, $message, strlen($message)) ) < 0 )
43 {
44 print strerror( $msgsock ) . "\n";
45 exit(1);
46 }
47
48 /* Read/Receive some data from the client: */
49 $buf = '';
50 if( ($ret = read( $msgsock, $buf, 128 )) < 0 )
51 {
52 print strerror( $ret ) . "\n";
53 exit(1);
54 }
55
56 /* Echo the received data back to the client: */
57 if( ($ret = write( $msgsock, "You said: $buf\0\n", strlen("You said: $buf\0\n"))
) < 0 )
58 {
59 print strerror( $ret ) . "\n";
60 exit(1);
61 }
62
63 /* Close the communication-socket: */
64 close( $msgsock );
65
66 /* Close the global socket: */
67 close( $sock );
68 ?>

Anda mungkin juga menyukai