2011-10-20 27 views
18

Bất cứ ai biết một cách dễ dàng để yêu cầu Linux "hiển thị mọi gói internet đến/từ google chrome" hoặc "hiển thị mọi gói internet đến/từ quá trình telnet với PID 10275"?Tôi có thể nắm bắt các gói mạng trên mỗi PID bằng cách nào?

Ví dụ telnet không phải là quá hữu ích, vì tôi chỉ có thể sử dụng wireshark hoặc tcpdump để xem tất cả các cuộc hội thoại TCP liên quan đến cổng 23. Điều đó và không ai sử dụng telnet nữa. Nhưng đánh hơi tất cả các gói đến/từ các ứng dụng phức tạp sử dụng nhiều cổng có vẻ giống như một điều hữu ích.

Tôi tìm thấy một số câu trả lời liên quan khám phá những cách khác nhau để chứng thực các cảng và PID (hoặc chương trình tên) và như vậy, nhưng không có gì về gói

Có vẻ như ai đó có thể đã sẵn sàng trả tiền cho câu trả lời này trong khi quay lại:

NetHogs rất hữu ích để nhanh chóng nhìn thấy những gì chương trình đang tạo giao thông qua một giao diện, nhưng nó không có một cách để nắm bắt các gói tin.

+0

Hrm, tôi có nên hỏi thay cho serverfault không? –

+0

Điều này có thể thuộc về SuperUser, thực sự. Một câu hỏi thú vị. Bạn có thể sử dụng WireShark để lọc ra các yêu cầu HTTP, nhưng bạn phải móc vào trình điều khiển hạt nhân để lọc các gói dựa trên PID – Bojangles

+1

Đó là một vấn đề phức tạp - ổ cắm không thuộc sở hữu của PID; bạn có thể truyền chúng từ quy trình này sang tiến trình khác. Nếu tiến trình A mở một ổ cắm, nó có thể chuyển nó sang xử lý B sau đó thoát ra - nếu bạn đang lọc PID của tiến trình A, điều gì sẽ xảy ra bây giờ? – bdonlan

Trả lời

1

Tôi sẽ sử dụng lsof -i để nhận số cổng được liên kết với ứng dụng tôi muốn. Mã sẽ giống như sau:

 
process=firefox 
for _port in `lsof -i | grep $process | cut -d' ' -f18 | cut -d: -f2 | cut -d'-' -f1` 
do 
    port=$_port 
    [[ "$_port" == +([a-zA-Z]) ]] && port=`cat /etc/services | grep '^$_port' | cut -d' ' -f12 | cut -d'/' -f1 | uniq | head -n 1` 

    echo "tcpdump -w ${port}.pcap port $port &" 
    tcpdump -w ${port}.pcap port $port & 
done 

Lưu ý rằng đầu ra của lệnh có thể khác nhau trên các phiên bản/phân phối khác nhau. Do đó, bạn nên kiểm tra đúng các tệp đã được cắt trước khi sử dụng tập lệnh.

Ngoài ra, tập lệnh này không giám sát các cổng được mở sau này. Đối với điều đó, tôi sẽ xem xét một kịch bản phức tạp hơn để kiểm tra cổng thường xuyên (sử dụng một cái gì đó như watch)

Và hãy nhớ để giết tất cả các quá trình tcpdump sau đó.

2

Tcpdump có thể cho bạn biết PID/quá trình một gói đến từ/đến.
Ném '-k NP' trong các tùy chọn của bạn.

Phiên bản được hỗ trợ: tcpdump phiên bản 4.3.0 - Phiên bản Apple 56

+8

Câu hỏi đã được hỏi cho Linux. Không có tùy chọn như vậy trong tcpdump của Linux cho thấy thông tin PID. – shivams

+0

Nó hoạt động trong MAC. –

Các vấn đề liên quan