Perintah
netstat -antu
akan menampilkan semua port tcp dan udp yang digunakan. Outputnya akan terlihat seperti ini:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:59753 0.0.0.0:* LISTEN
Angka setelah titik dua di bidang Alamat Lokal menunjukkan port yang digunakan. Jika statusnya adalah "DENGARKAN" itu berarti port yang digunakan untuk koneksi masuk. Jika alamat IP di Local Address
kolomnya adalah 0.0.0.0
itu berarti koneksi masuk akan diterima pada alamat IP apa pun yang ditetapkan ke antarmuka - jadi ini berarti dari koneksi yang berasal dari luar mesin Anda.
Jika tertulis localhost
atau 127.0.0.1
itu hanya akan menerima koneksi dari mesin Anda.
Selain itu, jika Anda menambahkan -p
parameter, dan jalankan sebagai root, ini akan menampilkan proses yang membuka port:
$ sudo netstat -antup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:59753 0.0.0.0:* LISTEN 860/rpc.statd
Apa pun yang tidak ditampilkan sedang digunakan adalah gratis, namun pengguna (akun yang tidak memiliki hak istimewa) hanya dapat membuka port di atas 1023.
Saya menyusun daftar kecil sendiri.
Beberapa favorit saya adalah:
netstat -tulpn
lsof -i -n -P
Cara yang baik dan andal untuk memeriksa port yang terbuka adalah menggunakan ss
(pengganti netstat
yang sudah tidak digunakan lagi ), dapat digunakan dalam skrip tanpa memerlukan hak istimewa yang lebih tinggi (mis. sudo
).
Penggunaan:opsi -l
untuk mendengarkan port, opsi -n
untuk melewati resolusi DNS, dan filter pada port sumber NN
:src :NN
(ganti NN
oleh port yang ingin Anda pantau). Untuk opsi lainnya, lihat man ss
ss -ln src :NN
Contoh:
[[email protected] ~]# ss -ln src :80
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:*
[[email protected] ~]# ss -ln src :81
State Recv-Q Send-Q Local Address:Port Peer Address:Port
Dan dalam skrip, menggunakan grep, kita dapat menguji apakah output berisi port yang kita minta. Contoh dengan port 80 yang digunakan (lihat di atas):
myport=80
# count the number of occurrences of port $myport in output: 1= in use; 0 = not in use
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
echo "Port $myport is in use (result == $result) "
else
echo "Port $myport is NOT in use (result == $result) "
fi
# output:
Port 80 is in use (result == 1)
Contoh dengan port 81 tidak digunakan (lihat di atas)
myport=81
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
echo "Port $myport is in use (result == $result) "
else
echo "Port $myport is NOT in use (result == $result) "
fi
# output:
Port 81 is NOT in use (result == 0)