Bagaimana saya bisa memeriksa port mana yang sibuk dan port mana yang gratis di mesin Linux saya?

30

Apakah ada perintah baris perintah atau cara lain untuk menemukan dan mendaftar nomor port yang sibuk dan bebas di mesin Linux saya?

Jeegar Patel
sumber

Jawaban:

41

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 Addressbidangnya 0.0.0.0berarti 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 localhostatau 127.0.0.1hanya menerima koneksi dari mesin Anda.

Selain itu, jika Anda menambahkan -pparameter, 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.

Paul
sumber
itu berarti koneksi masuk akan diterima pada alamat IP yang ditugaskan untuk antarmuka - jadi ini berarti dari koneksi yang berasal dari luar mesin Anda , bukankah Anda membuat kesalahan di sini? Anda mungkin bermaksud, bahwa koneksi akan diterima, jika mereka datang pada alamat yang ditetapkan untuk antarmuka yang diberikan, terlepas dari asalnya. Asal koneksi yang masuk mungkin ditentukan di kolom Alamat Luar Negeri berikutnya. Jadi itu ada di sana, jika seseorang memiliki nilai
0,0.0.0
1
@ user907860 Mungkin tidak jelas, tetapi perbedaan yang saya buat adalah antara 0,0.0.0 vs 127.0.0.1 - yang terakhir hanya akan menerima koneksi dari mesin Anda, karena sedang mendengarkan pada alamat IP yang tidak dirusak. Dimana 0.0.0.0 berarti setiap alamat pada mesin Anda, dan asalkan dirutekankan, koneksi dapat dilakukan dari mesin lain.
Paul
Hanya FYI, -antudapat ditulis sebagai -tuna🐟
Abdennour TOUMI
13

Saya menyusun daftar kecil sendiri.

Beberapa favorit saya adalah:

netstat -tulpn
lsof -i -n -P
robin
sumber
7

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 -luntuk mendengarkan port, opsi -nuntuk mem-bypass resolusi DNS, dan filter pada port sumber NN: src :NN(ganti NNdengan 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)
Thomas
sumber