ss - statistik soket
Dalam tutorial sebelumnya kita melihat bagaimana menggunakan perintah netstat untuk mendapatkan detail tentang koneksi jaringan/socket. Namun perintah netstat telah lama tidak digunakan lagi dan digantikan oleh perintah ss dari rangkaian alat iproute.
Perintah ss mampu menampilkan detail tentang koneksi jaringan dengan lebih banyak informasi daripada perintah netstat dan lebih cepat. Perintah netstat membaca berbagai file /proc untuk mengumpulkan informasi. Namun pendekatan ini lebih lambat ketika ada banyak koneksi untuk ditampilkan.
Perintah ss mendapatkan informasinya langsung dari ruang kernel. Opsi yang digunakan dengan perintah ss sangat mirip dengan netstat sehingga mudah diganti.
Jadi dalam tutorial ini kita akan melihat beberapa contoh bagaimana menggunakan perintah ss untuk memeriksa koneksi jaringan dan statistik soket.
1. Daftar semua koneksi
Perintah paling sederhana adalah membuat daftar semua koneksi.
$ ss | less Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port u_str ESTAB 0 0 * 15545 * 15544 u_str ESTAB 0 0 * 12240 * 12241 u_str ESTAB 0 0 @/tmp/dbus-2hQdRvvg49 12726 * 12159 u_str ESTAB 0 0 * 11808 * 11256 u_str ESTAB 0 0 * 15204 * 15205 .....
Kami menyalurkan output ke less sehingga output dapat digulir. Outputnya akan berisi semua detail koneksi soket tcp, udp, dan unix.
2. Saring koneksi tcp, udp atau unix
Untuk hanya melihat koneksi tcp atau udp atau unix gunakan opsi t, u atau x.
$ ss -t State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.1.2:43839 108.160.162.37:http ESTAB 0 0 192.168.1.2:43622 199.59.149.201:https ESTAB 0 0 192.168.1.2:33141 83.170.73.249:ircd ESTAB 0 0 192.168.1.2:54028 74.125.135.125:xmpp-client
$ ss -t OR $ ss -A tcp
Secara default opsi "t" saja yang akan melaporkan hanya koneksi yang "dibuat" atau TERHUBUNG". Opsi ini tidak melaporkan soket tcp yang "MENDENGARKAN". Gunakan opsi '-a' bersama dengan t, untuk melaporkan semuanya sekaligus.
Daftar semua koneksi udp
$ ss -ua State Recv-Q Send-Q Local Address:Port Peer Address:Port UNCONN 0 0 192.168.1.2:48268 *:* UNCONN 0 0 192.168.1.2:56575 *:* UNCONN 0 0 *:40309 *:* UNCONN 0 0 192.168.1.2:56879 *:* UNCONN 0 0 *:49014 *:* UNCONN 0 0 192.168.1.2:53124 *:* UNCONN 0 0 127.0.1.1:domain *:*
$ ss -a -A udp
The a option tells ss to report both "CONNECTED" and "LISTENING" sockets. Since UDP is a connection-less protocol, just "ss -u" will not report anything in most cases. Therefore we use the "a" option report all UDP connections (connected and listening).
Demikian pula, gunakan opsi x untuk membuat daftar semua koneksi soket unix.
3. Jangan selesaikan nama host
Untuk mendapatkan output lebih cepat, gunakan opsi "n" untuk mencegah ss menyelesaikan alamat ip ke nama host. Tapi ini akan mencegah resolusi nomor port juga.
$ ss -nt State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.1.2:43839 108.160.162.37:80 ESTAB 0 0 192.168.1.2:51350 74.125.200.84:443 ESTAB 0 0 192.168.1.2:33141 83.170.73.249:6667 ESTAB 0 0 192.168.1.2:54028 74.125.135.125:5222 ESTAB 0 0 192.168.1.2:48156 66.196.120.44:5050
4. Hanya tampilkan soket pendengar
Ini akan mencantumkan semua soket pendengar. Misalnya server web apache membuka koneksi soket pada port 80 untuk mendengarkan koneksi masuk.
$ ss -ltn State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 5 127.0.1.1:53 *:* LISTEN 0 128 127.0.0.1:631 *:* LISTEN 0 128 ::1:631 :::*
Perintah di atas mencantumkan semua koneksi "mendengarkan" "tcp". Opsi n menonaktifkan resolusi nama host dari alamat ip yang memberikan output lebih cepat.
Untuk membuat daftar semua koneksi udp yang mendengarkan, ganti t dengan u
$ ss -lun State Recv-Q Send-Q Local Address:Port Peer Address:Port UNCONN 0 0 127.0.1.1:53 *:* UNCONN 0 0 *:68 *:* UNCONN 0 0 192.168.1.2:123 *:* UNCONN 0 0 127.0.0.1:123 *:* UNCONN 0 0 *:123 *:* UNCONN 0 0 *:5353 *:* UNCONN 0 0 *:47799 *:* UNCONN 0 0 *:25322 *:* UNCONN 0 0 :::54310 :::* .....
5. Cetak nama proses dan pid
Untuk mencetak nama proses/pid yang memiliki koneksi, gunakan opsi p
$ ss -ltp State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 100 127.0.0.1:smtp *:* LISTEN 0 128 127.0.0.1:9050 *:* LISTEN 0 128 *:90 *:* LISTEN 0 128 *:db-lsp *:* users:(("dropbox",3566,32)) LISTEN 0 5 127.0.0.1:6600 *:* LISTEN 0 128 127.0.0.1:9000 *:* users:(("php5-fpm",1620,0),("php5-fpm",1619,0))
Pada output di atas, kolom terakhir berisi nama proses dan pid. Dalam contoh ini dnsmasq adalah nama proses dan 1299 adalah pidnya.
$ sudo ss -ltp [sudo] password for enlightened: State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 100 127.0.0.1:smtp *:* users:(("master",2051,12)) LISTEN 0 128 *:90 *:* users:(("nginx",1701,6),("nginx",1700,6),("nginx",1699,6),("nginx",1697,6),("nginx",1696,6)) LISTEN 0 5 127.0.0.1:6600 *:* users:(("mpd",2392,5)) LISTEN 0 128 127.0.0.1:9000 *:* users:(("php5-fpm",1620,0),("php5-fpm",1619,0),("php5-fpm",1616,7)) LISTEN 0 16 *:2633 *:* users:(("oned",1853,16)) LISTEN 0 50 127.0.0.1:mysql *:* users:(("mysqld",1095,10)) LISTEN 0 5 127.0.1.1:domain *:* users:(("dnsmasq",1347,5)) LISTEN 0 32 *:ftp *:* users:(("vsftpd",1051,3)) LISTEN 0 128 *:ssh *:* users:(("sshd",1015,3)) LISTEN 0 128 127.0.0.1:ipp *:* users:(("cupsd",688,11)) LISTEN 0 128 :::http :::* users:(("apache2",5322,4),("apache2",5321,4),("apache2",5317,4),("apache2",5316,4),("apache2",5313,4),("apache2",2505,4)) LISTEN 0 128 :::ssh :::* users:(("sshd",1015,4)) LISTEN 0 128 ::1:ipp :::* users:(("cupsd",688,10))
6. Cetak ringkasan statistik
Opsi s mencetak statistik.
$ ss -s Total: 526 (kernel 0) TCP: 10 (estab 7, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0 Transport Total IP IPv6 * 0 - - RAW 0 0 0 UDP 15 9 6 TCP 10 9 1 INET 25 18 7 FRAG 0 0 0
7. Tampilkan informasi pengatur waktu
Dengan opsi '-o', informasi waktu dari setiap koneksi akan ditampilkan. Informasi pengatur waktu memberi tahu berapa lama dengan
$ ss -tn -o State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.1.2:43839 108.160.162.37:80 ESTAB 0 0 192.168.1.2:36335 204.144.140.26:80 timer:(keepalive,26sec,0) ESTAB 0 0 192.168.1.2:33141 83.170.73.249:6667 ESTAB 0 0 192.168.1.2:58857 74.121.141.84:80 timer:(keepalive,23sec,0) ESTAB 0 0 192.168.1.2:42794 173.194.40.239:80 timer:(keepalive,32sec,0)
8. Hanya tampilkan koneksi soket IPv4 atau IPv6
Untuk hanya menampilkan koneksi soket IPv4 gunakan opsi '-f inet' atau '-4'.
$ ss -tl -f inet State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 100 127.0.0.1:smtp *:* LISTEN 0 128 127.0.0.1:9050 *:* LISTEN 0 128 *:90 *:* LISTEN 0 128 *:db-lsp *:* LISTEN 0 5 127.0.0.1:6600 *:*
Untuk hanya menampilkan koneksi IPv6 gunakan opsi '-f inet6' atau '-6'.
$ ss -tl6 State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 100 ::1:smtp :::* LISTEN 0 128 :::12865 :::* LISTEN 0 128 :::http :::* LISTEN 0 128 :::ssh :::* LISTEN 0 128 ::1:ipp :::*
9. Memfilter koneksi menurut status tcp
Perintah ss mendukung filter yang dapat digunakan untuk menampilkan koneksi tertentu saja. Ekspresi filter harus diberi akhiran setelah semua opsi. Perintah ss menerima filter dalam format berikut.
$ ss [ OPTIONS ] [ STATE-FILTER ] [ ADDRESS-FILTER ]
Berikut adalah beberapa contoh cara memfilter koneksi soket berdasarkan status soket.
Untuk menampilkan semua soket tcp IPv4 yang berada dalam status "terhubung".
$ ss -t4 state established Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 192.168.1.2:54436 165.193.246.23:https 0 0 192.168.1.2:43386 173.194.72.125:xmpp-client 0 0 192.168.1.2:38355 199.59.150.46:https 0 0 192.168.1.2:56198 108.160.162.37:http
Tampilkan soket dengan status waktu tunggu
$ ss -t4 state time-wait Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 192.168.1.2:42261 199.59.150.39:https 0 0 127.0.0.1:43541 127.0.0.1:2633
Status dapat berupa salah satu dari berikut
1. established 2. syn-sent 3. syn-recv 4. fin-wait-1 5. fin-wait-2 6. time-wait 7. closed 8. close-wait 9. last-ack 10. closing 11. all - All of the above states 12. connected - All the states except for listen and closed 13. synchronized - All the connected states except for syn-sent 14. bucket - Show states, which are maintained as minisockets, i.e. time-wait and syn-recv. 15. big - Opposite to bucket state.
Perhatikan bahwa sebagian besar status seperti syn-sent, syn-recv tidak akan menampilkan soket apa pun, karena soket tetap dalam status tersebut untuk waktu yang sangat singkat. Sebaiknya gunakan perintah watch untuk mendeteksi status soket seperti itu secara real time.
Ini contohnya
$ watch -n 1 "ss -t4 state syn-sent"
Setelah menjalankan perintah di atas, coba buka beberapa situs web di browser atau unduh sesuatu dari beberapa url. Segera Anda akan melihat koneksi soket muncul di output, tetapi untuk waktu yang sangat singkat.
Every 1.0s: ss -t4 state syn-sent Tue Apr 1 10:07:33 2014 Recv-Q Send-Q Local Address:Port Peer Address:Port 0 1 192.168.1.2:55089 202.79.210.121:https 0 1 192.168.1.2:33733 203.84.220.80:https 0 1 192.168.1.2:36240 106.10.198.33:https
10. Filter koneksi berdasarkan alamat dan nomor port
Selain status soket tcp, perintah ss juga mendukung pemfilteran berdasarkan alamat dan nomor port soket. Contoh berikut menunjukkan hal itu.
Tampilkan semua koneksi soket dengan sumber atau port tujuan ssh.
$ ss -at '( dport = :ssh or sport = :ssh )' State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:ssh *:* LISTEN 0 128 :::ssh :::*
Soket dengan port tujuan 443 atau 80
$ ss -nt '( dst :443 or dst :80 )' State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.1.2:58844 199.59.148.82:443 ESTAB 0 0 192.168.1.2:55320 165.193.246.23:443 ESTAB 0 0 192.168.1.2:56198 108.160.162.37:80 ESTAB 0 0 192.168.1.2:54889 192.241.177.148:443 ESTAB 0 0 192.168.1.2:39893 173.255.230.5:80 ESTAB 0 0 192.168.1.2:33440 38.127.167.38:443
Sintaks berikut juga akan berfungsi
$ ss -nt dst :443 or dst :80
Contoh lainnya
# Filter by address $ ss -nt dst 74.125.236.178 # CIDR notation is also supported $ ss -nt dst 74.125.236.178/16 # Address and Port combined $ ss -nt dst 74.125.236.178:80
Port juga dapat difilter dengan opsi dport/sport. Nomor port harus diawali dengan ":".
$ ss -nt dport = :80 State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.1.2:56198 108.160.162.37:80 ESTAB 0 0 192.168.1.2:39893 173.255.230.5:80 ESTAB 0 0 192.168.1.2:55043 74.125.236.178:80
Di atas sama dengan> ss -nt dst :80
Beberapa contoh pemfilteran lainnya
# source address is 127.0.0.1 and source port is greater than 5000 $ ss -nt src 127.0.0.1 sport gt :5000 # local smtp (port 25) sockets $ sudo ss -ntlp sport eq :smtp # port numbers greater than 25 $ sudo ss -nt sport gt :1024 # sockets with remote ports less than 100 $ sudo ss -nt dport \< :100 # connections to remote port 80 $ sudo ss -nt state connected dport = :80
Operator berikut didukung saat membandingkan nomor port
<= or le : Less than or equal to port >= or ge : Greater than or equal to port == or eq : Equal to port != or ne : Not equal to port < or gt : Less than to port > or lt : Greater than to port
Ringkasan
Contoh di atas mencakup sebagian besar dari apa yang didukung oleh perintah ss. Untuk informasi lebih lanjut, periksa halaman manual.
Dokumentasi sintaks filter dapat ditemukan dalam paket iproute2-doc yang dapat diinstal pada sistem debian/ubuntu
$ sudo apt-get install iproute2-doc
File /usr/share/doc/iproute2-doc/ss.html berisi detail tentang sintaks filter perintah ss.