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ó 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:
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 Address
trườ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 localhost
hoặc 127.0.0.1
nó 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 -p
tham 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.
-antu
có thể được viết là -tuna
🐟
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 -l
cho các cổng nghe, tùy chọn -n
bỏ qua độ phân giải DNS và bộ lọc trên cổng nguồn NN
: src :NN
(thay thế NN
bằ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)
Cách khác:
telnet localhost <PORT_NUMBER>
Nếu cổng miễn phí, bạn sẽ gặp lỗi. Nếu cổng được sử dụng telnet sẽ kết nối.
(tìm thấy trên http://www.unix.com/unix-for-dummies-questions-and-answers/8456-how-ledge-whether-particular-port-number-free-not.html )