Panduan ini menjelaskan beberapa cara berbeda untuk menemukan layanan mana yang mendengarkan pada port tertentu di Linux. Sebagian besar dari Anda mengetahui port default layanan atau proses populer. Misalnya, port default Apache adalah 80, port default FTP adalah 21 dan port default SSH adalah 22. Anda dapat menemukan nama dan nomor port di Linux seperti yang dijelaskan dalam panduan ini . Nomor port default juga dapat diubah ke port kustom apa pun untuk mengamankan server Linux. Misalnya, panduan berikut menjelaskan cara mengubah port default Apache, FTP, dan SSH ke port yang berbeda.
- Cara Mengubah Port Default Apache Menjadi Port Kustom
- Cara Mengubah Port Default FTP Menjadi Port Khusus
- Cara Mengubah Port Default SSH Menjadi Port Khusus
Jika nomor port default diubah, bagaimana Anda menemukan layanan mana yang mendengarkan di port mana? Itulah yang akan kita temukan sekarang!
Temukan layanan mana yang mendengarkan pada port tertentu di Linux
Saya telah mencantumkan empat metode di bawah ini untuk memeriksa layanan apa yang berjalan di nomor port tertentu. Saya akan terus memperbarui daftar ini jika saya menemukan metode baru di masa mendatang. Jadi, tandai dan periksa sesekali.
Metode 1 - Menggunakan netstat
Ini adalah cara yang paling umum digunakan untuk menemukan layanan mana yang mendengarkan di port mana. Netstat adalah utilitas baris perintah yang digunakan untuk mencetak koneksi jaringan, tabel perutean, statistik antarmuka, koneksi penyamaran, dan keanggotaan multicast.
Netstat tersedia di repositori default sebagian besar distribusi Linux.
Untuk menginstalnya di Arch Linux dan variannya, lakukan:
$ sudo pacman -S net-tools
Di CentOS, RHEL:
$ sudo yum install net-tools
Di Fedora:
$ sudo dnf install net-tools
Di Debian, Ubuntu:
$ sudo apt install net-tools
Setelah diinstal, jalankan perintah berikut untuk menemukan layanan mana yang mendengarkan pada port apa:
$ sudo netstat -tulpn
Contoh keluaran:
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 665/systemd-resolve tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1026/sshd tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 2068/python3 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1072/mysqld tcp6 0 0 :::22 :::* LISTEN 1026/sshd tcp6 0 0 :::80 :::* LISTEN 1062/apache2 udp 0 0 127.0.0.53:53 0.0.0.0:* 665/systemd-resolve udp 0 0 192.168.225.22:68 0.0.0.0:* 647/systemd-network udp 0 0 192.168.225.53:68 0.0.0.0:* 647/systemd-network udp6 0 0 fe80::a00:27ff:feff:546 :::* 647/systemd-network udp6 0 0 fe80::a00:27ff:fe7e:546 :::* 647/systemd-network
Seperti yang Anda lihat, layanan python (simpleHTTPserver dalam hal ini) mendengarkan pada nomor port 8000, layanan mysqld mendengarkan pada port 3306, layanan ssh berjalan pada nomor port 22, apache2 berjalan pada port 80 dan seterusnya.
Di sini,
-t
bendera menunjukkan koneksi tcp.-u
bendera menunjukkan koneksi udp.-l
bendera menampilkan soket pendengar.-p
flag menampilkan ID proses (PID) dan nama proses apa pun yang menggunakan port tersebut.-n
bendera menampilkan alamat numerik.
Perintah di atas mencantumkan semua layanan dan nomor port yang mereka dengarkan. Bagaimana jika Anda ingin menemukan layanan mana yang mendengarkan pada port tertentu? Di sinilah perintah grep berguna! Kita dapat menggabungkan netstat
dan grep
perintah untuk memfilter output untuk layanan tertentu, misalnya mysqld , seperti di bawah ini.
$ sudo netstat -tulpn | grep mysqld [sudo] password for sk: tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1076/mysqld
Lihat? layanan mysqld mendengarkan pada nomor port 3306.
Jika Anda sudah mengetahui nomor port, tetapi tidak tahu layanan mana yang sedang menggunakannya, cukup ganti nama layanan dengan nomor port seperti gambar di bawah ini.
$ sudo netstat -tulpn | grep -w 3306 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1076/mysqld
Di sini, -w
flag hanya menampilkan baris-baris yang berisi kecocokan yang membentuk keseluruhan kata. Dengan kata lain, -w
opsi menunjukkan kecocokan persis dari string yang diberikan.
Anda juga dapat menggunakan -i
untuk Mengabaikan perbedaan huruf besar/kecil, sehingga karakter yang berbeda hanya dalam huruf besar/kecil cocok satu sama lain
$ sudo netstat -tulpn | grep -i 3306
Sesederhana itu.
Untuk detail lebih lanjut, lihat halaman manual.
$ man netstat
Netstat sebagian besar sudah usang. Alternatif untuk netstat adalah "ss".
Metode 2 - Menggunakan perintah "ss"
ss adalah utilitas baris perintah untuk menyelidiki soket. Ini adalah alternatif untuk netstat dan penggunaan "ss" hampir sama dengan "netstat". Itu sudah diinstal sebelumnya di Ubuntu dan variannya.
Untuk menemukan layanan mana yang mendengarkan di port mana, jalankan:
$ sudo ss -tulpn
Contoh keluaran:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=671,fd=12)) udp UNCONN 0 0 192.168.225.22%enp0s3:68 0.0.0.0:* users:(("systemd-network",pid=653,fd=17)) udp UNCONN 0 0 192.168.225.53%enp0s8:68 0.0.0.0:* users:(("systemd-network",pid=653,fd=25)) udp UNCONN 0 0 [fe80::a00:27ff:fe7e:8a9c]%enp0s8:546 [::]:* users:(("systemd-network",pid=653,fd=24)) udp UNCONN 0 0 [fe80::a00:27ff:feff:d2e0]%enp0s3:546 [::]:* users:(("systemd-network",pid=653,fd=22)) tcp LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=1076,fd=32)) tcp LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=671,fd=13)) tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1015,fd=3)) tcp LISTEN 0 128 *:80 *:* users:(("apache2",pid=1094,fd=4),("apache2",pid=1090,fd=4),("apache2",pid=1089,fd=4),("apache2",pid=1088,fd=4),("apache2",pid=1087,fd=4),("apache2",pid=1062,fd=4)) tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1015,fd=4))
Untuk memfilter keluaran untuk layanan tertentu (Misalnya mysqld), gunakan:
$ sudo ss -tulpn | grep -w mysqld tcp LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=1076,fd=32))
Untuk detail lebih lanjut, lihat halaman manual.
$ man ss
Metode 3 - Menggunakan lsof
Seperti namanya, lsof adalah utilitas baris perintah untuk mendaftar semua file terbuka milik semua proses aktif.
Untuk menginstalnya di Linux, gunakan perintah berikut tergantung pada jenis distribusi yang Anda gunakan.
Di Arch Linux:
$ sudo pacman -S lsof
Di Debian, Ubuntu:
$ sudo apt install lsof
Di CentOS, RHEL:
$ sudo yum install lsof
Di Fedora:
$ sudo dnf install lsof
Untuk menemukan proses mana yang berjalan pada port mana, cukup tentukan nomor port seperti yang ditunjukkan pada perintah berikut:
$ sudo lsof -i :80
Contoh keluaran:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME apache2 1062 root 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1087 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1088 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1089 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1090 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1094 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN)
Untuk detail lebih lanjut, lihat halaman manual.
$ man lsof
Metode 4 - Menggunakan perintah fuser
pelebur adalah utilitas baris perintah lain untuk mengidentifikasi proses menggunakan file atau soket. Ini menampilkan PID proses menggunakan file atau sistem file yang ditentukan.
Ini juga tersedia di repositori default sebagian besar distribusi Linux.
Untuk menginstalnya di Arch Linux, jalankan:
$ sudo pacman -S psmisc
Di Debian, Ubuntu:
$ sudo apt install psmisc
Di CentOS, RHEL:
$ sudo yum install psmisc
Di Fedora:
$ sudo dnf install psmisc
Pertama kita perlu menemukan PID dari layanan atau proses yang mendengarkan pada port tertentu. Sebagai contoh, saya akan mencari PID dari sebuah proses yang mendengarkan pada port 3306 menggunakan perintah:
$ sudo fuser 3306/tcp
Anda akan melihat output seperti di bawah ini.
3306/tcp: 1076
Di sini, 1076 adalah PID.
Dan kemudian cari tahu proses sebenarnya menggunakan PID menggunakan perintah:
$ ps -p 1076 -o comm= mysqld
Atau, Anda dapat menggunakan -v
tandai untuk melihat detail lengkap dalam satu perintah.
$ sudo fuser -v 3306/tcp USER PID ACCESS COMMAND 3306/tcp: mysql 1076 F.... mysqld
Untuk detail lebih lanjut, buka halaman manual.
$ man fuser
Anda sekarang mengetahui empat alat berbeda untuk menemukan proses mana yang mendengarkan pada port apa. Keempatnya mudah digunakan dan tersedia di sebagian besar distribusi Linux. Jika Anda mengetahui alat lain, beri tahu kami di bagian komentar di bawah. Saya akan memeriksa dan memperbarui daftar ini.