Có cách nào để chặn giao tiếp giữa các quá trình trong Unix / Linux không?


15

Để chặn / phân tích lưu lượng mạng, chúng tôi có một tiện ích gọi là Wireshark .

Chúng ta có một tiện ích tương tự để chặn tất cả giao tiếp giữa các quá trình giữa bất kỳ hai quy trình nào trong Unix / Linux không?

Tôi đã tạo ra một số quy trình trong bộ nhớ và tôi cần xác định cách chúng giao tiếp với nhau.


1
Bạn đang sử dụng cơ chế IPC nào để liên lạc?
axel_c

@axel_c: Nguồn quy trình không phải với tôi, nhưng tôi nghĩ rằng tôi đã đọc "Bộ nhớ được chia sẻ" ở đâu đó trong tài liệu.
Lazer

Câu trả lời:


19

Điều này phụ thuộc rất nhiều vào cơ chế giao tiếp.

  • Ở đầu trong suốt nhất của phổ, các quy trình có thể giao tiếp bằng cách sử dụng các ổ cắm internet (tức là IP ). Sau đó, wireshark hoặc tcpdump có thể hiển thị tất cả lưu lượng truy cập bằng cách trỏ nó vào giao diện loopback.

  • Ở cấp độ trung gian, lưu lượng truy cập trên đường ốngổ cắm unix có thể được quan sát bằng truss/ strace/ trace/ ..., chuỗi quân đội Thụy Sĩ theo dõi hệ thống. Điều này có thể làm chậm đáng kể các quy trình, tuy nhiên, vì vậy nó có thể không phù hợp để định hình.

  • Ở phần cuối mờ nhất của quang phổ, có bộ nhớ dùng chung. Nguyên tắc hoạt động cơ bản của bộ nhớ dùng chung là các truy cập hoàn toàn minh bạch trong mỗi quy trình liên quan, bạn chỉ cần các cuộc gọi hệ thống để thiết lập các vùng bộ nhớ dùng chung. Theo dõi các truy cập bộ nhớ này từ bên ngoài sẽ khó khăn, đặc biệt nếu bạn cần quan sát không làm xáo trộn thời gian. Bạn có thể thử các công cụ như bộ công cụ theo dõi Linux (yêu cầu bản vá nhân) và xem liệu bạn có thể trích xuất thông tin hữu ích không; đó là loại lĩnh vực mà tôi mong muốn Solaris có một công cụ tốt hơn (nhưng tôi không biết gì về nó).

    Nếu bạn có nguồn, tùy chọn tốt nhất của bạn có thể là thêm các câu lệnh truy tìm vào các chức năng thư viện chính. Điều này có thể đạt được bằng các LD_PRELOADthủ thuật ngay cả khi bạn không có nguồn (toàn bộ), miễn là bạn có đủ hiểu về luồng điều khiển của phần chương trình truy cập vào bộ nhớ dùng chung.


6

Điều này sẽ cho thấy những gì một quá trình đọc và viết:

strace -ewrite -p $PID

Nó không sạch đầu ra (hiển thị các dòng như: write (#,)), nhưng hoạt động! (và là một dòng: D) Bạn cũng có thể không thích thực tế, các đối số được viết tắt. Để kiểm soát tham số use -s đó đặt tối đa chuỗi được hiển thị.

Nó bắt tất cả các luồng, vì vậy bạn có thể muốn lọc nó bằng cách nào đó.

Bạn có thể lọc nó:

strace -ewrite -p $PID 2>&1 | grep "write(1"

chỉ hiển thị mô tả 1 cuộc gọi. 2> & 1 là để chuyển hướng stderr sang stdout, vì strace ghi vào stderr theo mặc đị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.