Đọc tin nhắn / quảng cáo để biết nếu một quá trình đã mở một cổng


13

Tôi cần biết nếu một quá trình với một PID nhất định như đã mở một cổng mà không sử dụng các lệnh bên ngoài. Tôi phải sử dụng /prochệ thống tập tin. Tôi có thể đọc /proc/$PID/net/tcptệp chẳng hạn và lấy thông tin về các cổng TCP được mở theo quy trình. Tuy nhiên, trên một quy trình đa luồng, /proc/$PID/task/$TIDthư mục cũng sẽ chứa một net/tcptệp. Câu hỏi của tôi là :

Tôi có cần phải đi qua tất cả các net/tcptệp chủ đề không , hoặc cổng được mở bởi các luồng sẽ được ghi vào net/tcptệp quy trình .

Câu trả lời:


23

Tôi có thể đọc tệp / Proc / $ PID / net / tcp chẳng hạn và nhận thông tin về các cổng TCP được mở theo quy trình.

Tập tin đó không phải là danh sách các cổng tcp được mở theo quy trình . Nó là một danh sách tất cả các cổng tcp mở trong không gian tên mạng hiện tại và đối với các quy trình đang chạy trong cùng một không gian tên mạng giống hệt với nội dung của /proc/net/tcp.

Để tìm các cổng được mở theo quy trình của bạn, bạn sẽ cần lấy danh sách các mô tả ổ cắm từ đó /proc/<pid>/fd, sau đó khớp các mô tả đó với inodetrường /proc/net/tcp.


Cảm ơn về câu trả lời của bạn. Và nếu quá trình này là đa luồng, tôi có cần phải đi qua tất cả các fdthư mục của mỗi luồng không? Hay /proc/pid/fdthư mục "kế thừa" các /proc/pid/task/tid/fdthư mục?
rmonjo

Tôi không chắc, nhưng đó có vẻ là một điều dễ dàng để kiểm tra.
larsks

7
@rmonjo Chủ đề không thể mở tệp, chỉ có các quy trình có thể. Thư mục fdcủa một luồng chỉ lặp lại fdthư mục của quá trình.
Gilles 'SO- ngừng trở nên xấu xa'

0

Xin vui lòng

cat /proc/$PID/net/tcp

và bạn sẽ nhận được đầu ra như thế này

  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
  0: 00000000:01BB 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 2891985097 1 0000000000000000 100 0 0 10 0

Cột thứ hai (local_address) của đầu ra hiển thị cổng trong Hệ thập lục phân. Sử dụng Máy tính lập trình của bạn để chuyển đổi mã hex thành thập phân.

Ví dụ ở đây, cổng: 01BB (ở dạng hex) bằng 433 (ở dạng thập phân) là cổng mặc định HTTPS.

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.