Những cổng nào được sử dụng bởi một ứng dụng [trùng lặp]


11

Tôi đang thử nghiệm một ứng dụng mở các cổng của chính nó (hoạt động như một máy chủ cho các cổng này, do đó lắng nghe tại các cổng đó) và nơi cùng một ứng dụng kết nối với các cổng bị ràng buộc bởi các ứng dụng khác (hoạt động như máy khách cho các cổng này).

Tôi muốn có một cái nhìn tổng quan về việc ứng dụng tạo ra cổng nào và ứng dụng và cổng nào kết nối với nó.

Tôi có thể làm cái này như thế nào?

Câu trả lời:


17

Bạn có thể sử dụng netstatcho việc này. Xem ví dụ (tôi đã tham gia ssh):

netstat -putan | grep ssh
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1725/sshd
tcp        0      0 1.2.3.4:45734           1.2.3.5:22              ESTABLISHED 2491/ssh
tcp6       0      0 :::22                   :::*                    LISTEN      1725/sshd

Giải trình:

Tôi thường sử dụng các tham số -putan(vì chúng đơn giản để nhớ).

  • -p: hiển thị các PID của ứng dụng / quy trình
  • -u: hiển thị cổng / kết nối udp
  • -t: hiển thị cổng / kết nối tcp
  • -a: hiển thị cả ổ cắm nghe và không nghe
  • -n: đầu ra số (không thực hiện tra cứu DNS cho tên máy chủ, v.v.)

Trong đầu ra ở trên, bạn thấy rằng có một tiến trình ssh daemon ( sshd) với khả năng 1725nghe PID tại cổng 22trên tất cả các giao diện mạng ( 0.0.0.0). Ngoài ra, có một quá trình máy khách ssh (PID 2491) được kết nối với địa chỉ IP 1.2.3.5tại số cổng 22, địa chỉ IP 1.2.3.4của tôi và cổng ngoài của tôi là 45734. Bạn thấy rằng kết nối được thiết lập. Vì vậy, tôi đã đăng nhập thông qua ssh.


Kết nối TCP được thiết lập trên cổng 22 không cho biết xác thực thành công. TCP phải được thiết lập trước khi xác thực theo một trong hai hướng có thể xảy ra.
jamesbtate

@Puddingfox đúng, chúng ta có thể nói "Tôi đã kết nối với cổng đó", nhưng để hiểu tôi đã nói "tôi đang đăng nhập", vì nó mang tính minh họa hơn.
hỗn loạn

1
hehe ... `-putan ' Tôi rất muốn sửa lỗi chính tả nhỏ này;)
James Mertz

Tại sao sử dụng các tiện ích lỗi thời khi những tiện ích hiện đại có sẵn? ss -lntp là tiện ích được cung cấp bởi bộ iproute2 .
MariusMatutiae

7

Một công cụ khác có thể làm điều này là lsof:

# lsof -i -a -p 1981
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP host.example.com:ssh (LISTEN)
# lsof -i -a -p 1981 -n
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP 10.1.2.3:ssh (LISTEN)
# lsof -i -a -p 1981 -n -P
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP 10.1.2.3:22 (LISTEN)
#

Các tùy chọn được sử dụng như sau:

  • -i để in ra các cổng internet mở theo một quy trình
  • -a để làm cho tất cả các tùy chọn là AND-ed
  • -p 1981 để hiển thị đầu ra cho quá trình 1981
  • -n để ức chế tra cứu tên máy chủ và hiển thị IP thay thế
  • -P để ức chế tra cứu dịch vụ và hiển thị số cổng thay thế

lsofcó lợi thế là bạn có thể chỉ định quy trình cần kiểm tra thay vì phải grep nó ra khỏi sản lượng lớn hơn. netstatđáng tin cậy hơn có sẵn trên các hệ thống, mặc dù lsofđang trở nên tiêu chuẩn hơn trước đây.


Tôi muốn chạy lệnh này trước khi khởi chạy ứng dụng mà tôi muốn theo dõi nhưng tôi có thể thiết lập những gì mà ứng dụng sẽ nhận được trước khi bắt đầu không?
Baz

@Baz, nếu bạn muốn giám sát một ứng dụng khi nó khởi động (ví dụ: trước khi bạn biết nó là PID), bạn nên thử stracegiải pháp mà @olivecoder đề xuất.
gowenfawr


3

Chúng tôi đã có câu trả lời tốt nhưng họ chỉ liệt kê các cổng được mở tại thời điểm lệnh chạy.

strace là công cụ phù hợp để giám sát các kết nối được mở trong suốt vòng đời ứng dụng:

strace -e socket,connect,close -f -o hipchat.strace.txt hipchat

Đầu ra sẽ hiển thị cho bạn thông tin bổ sung như các yêu cầu UDP và các kết nối đã mở nhưng đã đóng.


0

ss -a4 | less

Tôi giả sử bạn đang nói về IPv4 ... Nếu không, bạn có thể thay thế số 4 trong lệnh mở đầu bằng 6. Tham số -a là hiển thị tất cả các cổng (nghe và không). Bạn có thể thêm -n vào các tham số nếu bạn không muốn phân giải tên trong màn hình.

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.