Các câu trả lời ngắn là không và không dễ dàng.
Trên Linux lsof dựa vào /proc/net/unix
để lấy thông tin liên quan đến các socket miền UNIX. Giao diện này liệt kê tất cả các ổ cắm bị ràng buộc, nhưng nó không theo dõi các điểm cuối. Vì vậy, bạn có thể thấy những gì ổ cắm tồn tại, nhưng bạn không thể thấy những gì được kết nối với chúng. Đâu đó thông tin này là theo dõi, nó phải được theo dõi nếu không các kết nối ổ cắm sẽ không hoạt động. Tôi vẫn chưa tìm thấy bất kỳ cơ chế để lấy thông tin kết nối.
Câu hỏi đánh hơi thú vị hơn một chút, nhưng không kém phần thất vọng. Điều tôi muốn nói là "không dễ dàng" là không tồn tại bất kỳ móc nối nào để lẻn vào và grap dữ liệu đó. Tương tự gần nhất là sử dụng tcpdump hoặc Wireshark, cả hai đều sử dụng libpcap để thực sự nâng vật nặng. Trong khi cả mạng (AF_INET) và tên miền UNIX (AF_UNIX) đều được tạo bằng lệnh socket()
gọi hàm, cả hai đều sử dụng connect()
để kết nối, cả sử dụng read()
vàwrite()
xử lý dữ liệu, chúng được xử lý bởi các hệ thống con hạt nhân khác nhau. Điều này có tác dụng phụ đáng tiếc là libpcap không được thiết kế để hoạt động với các socket miền UNIX.
Có một khía cạnh ít mờ hơn cho vấn đề. Hãy xem trang người đàn ông cho recv(2)
. Đây là một cuộc gọi hệ thống cấp thấp hơn read()
sử dụng. Có một lá cờ recv()
được gọi MSG_PEEK
. Điều này sẽ cho phép bạn đánh hơi lưu lượng đi qua một ổ cắm tên miền UNIX. Vì vậy, đó là mặt sáng, mặt tối là theo hiểu biết tốt nhất của tôi, không tồn tại bất kỳ ứng dụng hiện tại nào được thiết kế để làm điều này. Vì vậy, bạn đang xem xét một số nỗ lực phát triển.
Tôi thực sự muốn có được một câu trả lời đơn giản tốt đẹp của F'YEAH để cả hai phần của câu hỏi của bạn.