Làm cách nào để kiểm tra cổng nào đang bận và cổng nào miễn phí trên máy Linux của tôi?


30

Có bất kỳ lệnh dòng lệnh hoặc bất kỳ cách nào khác để tìm và liệt kê các số cổng bận và miễn phí trên máy Linux của tôi không?

Câu trả lời:


41

Lệnh

netstat -antu

sẽ hiển thị tất cả các cổng tcp và udp đang sử dụng. Đầu ra sẽ trông giống như thế này:

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:59753           0.0.0.0:*               LISTEN

Số sau dấu hai chấm trong trường Địa chỉ cục bộ hiển thị cổng đang sử dụng. Nếu trạng thái là "NGHE" thì có nghĩa là một cổng đang sử dụng cho các kết nối đến. Nếu địa chỉ IP trong Local Addresstrường là 0.0.0.0điều đó có nghĩa là các kết nối đến sẽ được chấp nhận trên bất kỳ địa chỉ IP nào được gán cho giao diện - vì vậy điều này có nghĩa là từ các kết nối có nguồn gốc bên ngoài máy của bạn.

Nếu nó nói localhosthoặc 127.0.0.1nó sẽ chỉ chấp nhận kết nối từ máy của bạn.

Ngoài ra, nếu bạn thêm -ptham số và chạy nó dưới quyền root, nó sẽ hiển thị quá trình mở cổng:

$ 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

Bất cứ điều gì không được hiển thị là đang sử dụng đều miễn phí, tuy nhiên người dùng (tài khoản không có đặc quyền) chỉ có thể mở các cổng trên 1023.


điều đó có nghĩa là các kết nối đến sẽ được chấp nhận trên bất kỳ địa chỉ IP nào được gán cho giao diện - vì vậy điều này có nghĩa là từ các kết nối xuất phát bên ngoài máy của bạn, bạn đã không gặp lỗi ở đây? Bạn có thể có nghĩa là, các kết nối sẽ được chấp nhận, nếu chúng đến trên bất kỳ địa chỉ nào được gán cho một giao diện nhất định, bất kể nguồn gốc của chúng. Nguồn gốc của các kết nối đến có thể được chỉ định trong cột Địa chỉ nước ngoài tiếp theo. Vì vậy, nếu có một giá trị 0.0.0.0, điều đó có nghĩa là các kết nối sẽ được chấp nhận từ mọi nơi, kể cả bên ngoài máy
user907860

1
@ user907860 Có thể không rõ ràng, nhưng sự khác biệt tôi đang thực hiện là giữa 0.0.0.0 so với 127.0.0.1 - cái sau sẽ chỉ chấp nhận các kết nối từ máy của bạn, vì nó đang nghe trên một địa chỉ IP chưa được phát. Trong trường hợp 0.0.0.0 có nghĩa là bất kỳ địa chỉ nào trên máy của bạn và do đó chúng được định tuyến, các kết nối có thể được tạo từ các máy khác.
Paul

Chỉ cần FYI, -antucó thể được viết là -tuna🐟
Abdennour TOUMI


7

Một cách tốt và đáng tin cậy để kiểm tra các cổng được mở đang sử dụng ss(thay thế cho phần không dùng nữa netstat ), nó có thể sử dụng được trong một tập lệnh mà không yêu cầu các đặc quyền nâng cao (ví dụ sudo).

Cách sử dụng: tùy chọn -lcho các cổng nghe, tùy chọn -nbỏ qua độ phân giải DNS và bộ lọc trên cổng nguồn NN: src :NN(thay thế NNbằng cổng bạn muốn theo dõi). Để biết thêm tùy chọn, xemman ss

ss -ln src :NN

Ví dụ:

[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

Và trong một tập lệnh, sử dụng grep, chúng tôi có thể kiểm tra xem đầu ra có chứa cổng mà chúng tôi yêu cầu hay không. Ví dụ với cổng 80 đang sử dụng (xem bên trên):

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)

Ví dụ với cổng 81 không được sử dụng (xem bên trên)

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)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.