File /etc/services

Setiap tipe aplikasi internet baik server maupun client akan menggunakan nomor port seperti yang didefinisikan dalam RFC1700 tentang sistem penomoran, misalnya aplikasi http menggunakan port 80, ftp port 21, ssh port 22, atau ntp port 123.

Namun, dalam program server atau client, seringkali lebih disukai menggunakan nama servicenya daripada memberikan nomor portnya. Konversi nama service dan asosiasi nomor portnya dilletakkan di satu file konfigurasi. Di Linux, file ini adalah /etc/services. File ini digunakan oleh semua program internet yang berjalan di sistem Linux tersebut, sehingga terstandar untuk semua aplikasi. Contoh isi file tersebut adalah:

$ cat /etc/services 
tcpmux          1/tcp                           # TCP port service multiplexer
echo            7/tcp
echo            7/udp
discard         9/tcp           sink null
discard         9/udp           sink null
systat          11/tcp          users
daytime         13/tcp
daytime         13/udp
netstat         15/tcp
qotd            17/tcp          quote
msp             18/tcp                          # message send protocol
msp             18/udp                          # message send protocol
chargen         19/tcp          ttytst source
chargen         19/udp          ttytst source
ftp-data        20/tcp
ftp             21/tcp
fsp             21/udp          fspd
ssh             22/tcp                          # SSH Remote Login Protocol
ssh             22/udp                          # SSH Remote Login Protocol
....

Function libc (misalnya di uclibc/libc/inet/getservice.c) yang dipanggil untuk mendapatkan nomor port dari nama service dan protokol transportnya adalah getservbyname(const char *name, const char *proto), sebaliknya untuk mendapatkan nama service dari nomor portnya adalah getservbyport(int port, const char *proto). Kedua fungsi tersebut menggunakan file /etc/services untuk konversi. Contoh penggunaan di ntpdate (network time protocol, ntp/sntp/internet.c):

struct servent *service;
....
if ((service = getservbyname("ntp","udp")) != NULL) {
        *port = service->s_port;
....

Bagaimana kalau dari program yang kita jalankan, nama servicenya tidak ada (tidak ditemukan) di file /etc/services atau bahkan file tersebut tidak ada?

Program internet akan memberikan status error berikut:

Error : Servname not supported for ai_socktype

Kalau error tersebut muncul saat kita menjalankan program (misalnya ntpdate, telnet, ssh dan program internet lainnya), cek file /etc/services dan pastikan nama service, port, dan protokolnya telah terdaftar di file tersebut. Kalau belum tambahkan. Problem tersebut akan teratasi.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: