Apakah ada perintah baris perintah atau cara lain untuk menemukan dan mendaftar nomor port yang sibuk dan bebas di mesin Linux saya?
Apakah ada perintah baris perintah atau cara lain untuk menemukan dan mendaftar nomor port yang sibuk dan bebas di mesin Linux saya?
Jawaban:
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
Nomor setelah titik dua di bidang Alamat Lokal menunjukkan port yang digunakan. Jika statusnya "DENGARKAN" itu berarti port yang digunakan untuk koneksi masuk. Jika alamat IP di Local Address
bidangnya 0.0.0.0
berarti koneksi masuk akan diterima pada alamat IP apa pun yang ditetapkan untuk antarmuka - jadi ini berarti dari koneksi yang berasal dari luar mesin Anda.
Jika dikatakan localhost
atau 127.0.0.1
hanya menerima koneksi dari mesin Anda.
Selain itu, jika Anda menambahkan -p
parameter, dan menjalankannya sebagai root, itu akan menunjukkan 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 sebagai sedang digunakan adalah gratis, namun pengguna (akun yang tidak memiliki hak) hanya dapat membuka port di atas 1023.
-antu
dapat ditulis sebagai -tuna
🐟
Cara yang baik dan dapat diandalkan untuk memeriksa port yang dibuka menggunakan ss
(pengganti untuk yang sudah tidak digunakan lagi netstat
), ini dapat digunakan dalam skrip tanpa memerlukan hak yang lebih tinggi (yaitu sudo
).
Penggunaan: opsi -l
untuk mendengarkan port, opsi -n
untuk mem-bypass resolusi DNS, dan filter pada port sumber NN
: src :NN
(ganti NN
dengan port yang ingin Anda pantau). Untuk opsi lebih lanjut, lihatman ss
ss -ln src :NN
Contoh:
[user@server ~]# ss -ln src :80
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:*
[user@server ~]# ss -ln src :81
State Recv-Q Send-Q Local Address:Port Peer Address:Port
Dan dalam sebuah 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)
Cara lain:
telnet localhost <PORT_NUMBER>
Jika port gratis, Anda akan mendapatkan kesalahan. Jika port sedang digunakan, telnet akan terhubung.
(ditemukan di http://www.unix.com/unix-for-dummies-questions-and-answers/8456-how- know-whether-particular-port-number-free-not.html )