Làm cách nào để tìm hiểu thêm về các tệp socket trong / Proc / fd?


33

Nhìn vào / Proc / $ mypid / fd /, tôi thấy các tệp này

lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 0 -> /dev/pts/36 (deleted)
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 3 -> socket:[1424055856]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 4 -> socket:[1424055868]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 5 -> socket:[1424055882]

Vì tôi có quyền truy cập vào mã, tôi biết các ổ cắm này được gắn với các kết nối TCP (một là kết nối với cổng 5672 trên một số máy, một kết nối khác với cổng 3306 trên một số máy khác), nhưng tôi muốn biết ổ cắm nào gắn với kết nối nào. Làm thế nào tôi có thể làm điều đó?

Tổng quát hơn, làm thế nào tôi có thể hỏi HĐH ở đầu kia của ổ cắm là gì?


1
Sử dụng socat....
heemayl

Câu trả lời:


40

Lệnh lsof

Một lựa chọn tốt có thể là lsof. Như man lsoftiểu bang, nó là thuận tiện để có được thông tin về open files such as Internet sockets or Unix Domain sockets.


Sử dụng nó

Đầu tiên, có được một cái nhìn tổng quan về /proc/$PID/fd/và các số ổ cắm được liệt kê.
Ví dụ, socket:[14240]có thể bạn quan tâm.

Sau đó sử dụng lsof -i -a -p $PIDđể in một danh sách tất cả các tập tin mạng $PIDsử dụng.

  • -i tạo một danh sách các tệp mạng thuộc về người dùng hoặc quá trình

  • -a kết hợp một cách hợp lý hoặc các tham số đã cho của AND

  • -p $PID chỉ chọn thông tin về quy trình của bạn

Một đầu ra điển hình cho trình duyệt của tôi chạy với bộ vi xử lý 2543có thể là:

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
browser 2543 pidi   55u  IPv4  14240      0t0  TCP  pidi.router.lan:55038->stackoverflow.com:https (ESTABLISHED)

và nhiều dòng tương tự.

Tuyệt quá! Bây giờ hãy xem xét kỹ hơn về DEVICEcột. Nó phù hợp với ổ cắm được liệt kê trước đây của chúng tôi từ /proc/$PID/fd/!
Và nhờ vào NAMEphần chúng ta có thể nói đầu kia của ổ cắm là gì.

Trong một thế giới thực, bạn có thể nhận được một lượng đầu ra tốt, nhưng chỉ cần lọc hoặc grepcho ổ cắm quan tâm của bạn.

Tôi khá chắc chắn rằng người ta có thể kết hợp tất cả các lệnh, nhưng điều đó là đủ để bạn bắt đầu.


Cảm ơn bạn! Nâng cao và chấp nhận. Tôi thấy một ổ cắm hiển thị trong lsof là "unix 0xffff88002704d380 0t0 1423733559", làm thế nào để tôi tìm hiểu về 0xffff88002704d380 là gì?
benhsu

1
"unix 0xfff ..." có vẻ như là địa chỉ bộ nhớ kernel của cấu trúc unix_sock. Cấu trúc này chứa một con trỏ đến điểm cuối của ổ cắm của bạn. Hãy nhìn vào grep -rni ffff88002704d380 /proc. ở đâu đó dưới / Proc / có thể nói dối câu trả lời catcủa bạn , grep tập tin của bạn được tìm thấy. Nhưng đừng chèn ép tôi về điều này ... Có thể là sai lầm khủng khiếp ở đây.
pidi

lsofđọc thông tin khác về các ổ cắm từ /proc/net/tcp, /proc/net/tcp6, /proc/net/udp, và vân vân tùy thuộc vào loại socket.
Jesin
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.