Nhận danh sách Cổng mở trong Linux


191

Tôi cần một lệnh Linux để liệt kê tất cả các cổng mở miễn phí để sử dụng trong một ứng dụng

lsof -i TCP| fgrep LISTEN

Không được xem là hữu ích vì các Cổng mà nó liệt kê không nhất thiết phải miễn phí sử dụng. Làm cách nào để liệt kê các cổng mở miễn phí không được sử dụng?

Câu trả lời:


258
netstat -lntu

như được trả lời bởi @askmish sẽ cung cấp cho bạn danh sách các dịch vụ đang chạy trên hệ thống của bạn trên các cổng tcp và udp trong đó

  • -l = chỉ các dịch vụ đang nghe trên một số cổng
  • -n = hiển thị số cổng, đừng cố giải quyết tên dịch vụ
  • -t = cổng tcp
  • -u = cổng udp
  • -p = tên chương trình

Bạn không cần tham số 'p' vì bạn chỉ quan tâm đến việc có cổng nào miễn phí và không phải chương trình nào đang chạy trên đó.

Điều này chỉ cho thấy các cổng trên hệ thống của bạn được sử dụng hết, mặc dù. Điều này không cho bạn biết trạng thái mạng của bạn, ví dụ nếu bạn đứng sau NAT và bạn muốn một số dịch vụ có thể truy cập được từ bên ngoài. Hoặc nếu tường lửa chặn cổng cho khách truy cập bên ngoài. Trong trường hợp đó, nmap đến để giải cứu. CẢNH BÁO: Chỉ sử dụng nmap trên các mạng nằm dưới sự kiểm soát của bạn. Ngoài ra, có các quy tắc tường lửa có thể chặn các lệnh nmap, bạn sẽ phải tìm hiểu thêm về các tùy chọn để có kết quả chính xác.


19
Lưu ý rằng netstatkhông được dùng trên nhiều hệ thống và ssnên được sử dụng thay thế.
Johu

1
nhưng nếu bạn đang ở trên busybox sskhông được bao gồm
jcollum

90

net-toolskhông được dùng nữa , bạn có thể sử dụng sslệnh thay vì netstatnếu netstatkhông có trên máy của bạn:

ss -lntu

nên hoạt động tương tự như

netstat -lntu

theo sự giúp đỡ tích hợp:

-n, --numeric       don't resolve service names
-l, --listening     display listening sockets
-t, --tcp           display only TCP sockets
-u, --udp           display only UDP sockets

3
Một cờ hữu ích khác là -p hiển thị id quá trình của ổ cắm.
Talespin_Kit

21

Lệnh này sẽ liệt kê các cổng mạng mở và các quy trình sở hữu chúng:

netstat -lnptu

sau đó bạn có thể lọc kết quả theo thông số kỹ thuật chính xác của mình.

Bạn cũng có thể sử dụng nmapcho các kết quả chi tiết hơn về các cổng.


2
Cờ -p yêu cầu quyền root cho một số quy trình, vì vậy nó sẽ làsudo netstat -lnptu
klaus se

5

Tất cả các cổng đã mở bao gồm lưu lượng phản hồi:

netstat -tuwanp 2>/dev/null | awk '{print $4}' | sort | uniq -c | wc -l

3
Một danh sách chỉ các số cổng duy nhất và chỉ có IPv4:netstat -tuwanp4 | awk '{print $4}' | grep ':' | cut -d ":" -f 2 | sort | uniq
Aaron C. de Bruyn

+1 để hiển thị cách lọc và trích xuất các số từ kết quả. Đã chỉnh sửa để xóa đầu ra stderr khỏi netstat (thêm tiêu đề vào kết quả trong Ubuntu).
datashaman

Hmm, trên những suy nghĩ thứ hai. -1 vì không trả lời câu hỏi.
datashaman

1

Tôi đưa ra câu hỏi ban đầu là anh ta đã hỏi về các cổng không sử dụng, không phải các cổng hiện đang kết nối với các dịch vụ. Nếu đây là trường hợp, không có cách cụ thể để liệt kê chúng, ngoài việc liệt kê các cổng được sử dụng và giả sử các cổng khác không được sử dụng.

Một điểm nữa cần lưu ý: với tư cách là người dùng, bạn sẽ không thể mở một cổng nhỏ hơn 1024 (bạn sẽ cần quyền truy cập gốc cho điều đó).


0

Lệnh sau sẽ hoạt động trên bất kỳ Unix nào xuất ra cùng định dạng với Ubuntu / Debian - trong đó địa chỉ cục bộ nằm trong cột 4 và đầu ra bao gồm tiêu đề 2 dòng ở trên cùng. Nếu một trong hai số đó là khác nhau, hãy điều chỉnh lệnh awk bên dưới.

Nếu bạn chỉ muốn IPv4:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '0.0.0.0:' | sed 's/.*://' | sort -n | uniq

Nếu bạn chỉ muốn IPv6:

netstat -lnt | awk 'NR>2{print $4}' | grep -E ':::' | sed 's/.*://' | sort -n | uniq

Nếu bạn muốn cả hai cùng nhau:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(0.0.0.0:|:::)' | sed 's/.*://' | sort -n | uniq

Lệnh này đưa ra một danh sách các số cổng đang nghe trên tất cả các giao diện. Nếu bạn muốn liệt kê tất cả các cổng đang nghe trên giao diện localhost, thì hãy sử dụng một cái gì đó như thế này:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(127.0.0.1:|::1:)' | sed 's/.*://' | sort -n | uniq

0

Thử

sudo netstat -plnt | grep -E '(0.0.0.0:|:::|127.0.0.1:|::1:)' |  awk 'NR>2{print $7}' | sort -n  | uniq

và nhìn vào cái này

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.