Trên Linux, làm thế nào tôi có thể biết quá trình nào đang gửi các gói Ethernet?


18

Tôi đang chạy gkrellm cho thấy một số quy trình trên hệ thống Debian Linux của tôi đang ghi khoảng 500KB / s đến eth0. Tôi muốn tìm hiểu quá trình đó là gì. Tôi biết một chút về netstat, nhưng nó cho thấy một kết nối TCP mở và dường như tôi không thể làm cho nó tạo ra bất kỳ thông tin nào về lưu lượng truy cập.

Có ai biết làm thế nào tôi có thể nhận được một danh sách các quy trình thực sự sử dụng giao diện eth0 để tôi có thể theo dõi người vi phạm không?


FOLLOWUP : Bản phân phối Debian Linux chứa một nethogsgói giải quyết vấn đề này một cách dứt khoát. Các công cụ liên quan mà không phải là khá vào dấu bao gồm iftop, netstatlsof.


iptraflà tốt
Luv33preet

Điều này làm việc cho tôi để trao đổi UDP rất ngắn: serverfault.com/a/683327/119360
Luc

Câu trả lời:


16

Tôi thích nethogs . Đó là một chương trình bảng điều khiển dựa trên ncurses nhỏ hiển thị trạng thái lưu lượng truy cập mạng theo quy trình một cách thuận tiện.


18

netstat -ptusẽ cung cấp cho bạn các id quá trình sở hữu (cùng với thông tin netstat tiêu chuẩn) cho tất cả các kết hợp tcp và udp. (Người dùng bình thường sẽ không thể id tất cả các quy trình.)

Nếu một cái gì đó đang gửi một lượng lưu lượng truy cập không đổi, bạn sẽ thấy nó trên Recv-Qhoặc Send-Qcột 2 và 3 tương ứng.

Ví dụ:
Recv-Q
sudo watch -n .1 'netstat -tup | grep -E "^[t,u]cp[6]{0,1}" | sort -nr -k2'

Send-Q
sudo watch -n .1 'netstat -tup | grep -E "^[t,u]cp[6]{0,1}" | sort -nr -k3'

Nếu bạn nghi ngờ rằng quá trình đó đang được kích hoạt bởi một quy trình khác ps axf.


(Không phải là cờ -u cần thiết nếu bạn biết rằng bạn đang tìm kiếm kết nối TCP.)
andol

5

Một thao tác thủ công hơn nếu bạn đang tìm kiếm một quá trình gửi / nhận dữ liệu sẽ là chạy lsoflệnh. Điều này sẽ liệt kê tất cả các tệp đang mở cho mỗi quy trình sẽ bao gồm các kết nối mạng vì chúng là mô tả tệp cho hệ điều hành

Không chắc chắn nếu đây là những gì bạn đang tìm kiếm.


4

Cài đặt iftop(dựa trên văn bản đơn giản) hoặc ntop(đồ họa).


1
iftopchỉ hiển thị sử dụng băng thông trên một giao diện.
lượng tử

Nó cho thấy nhiều hơn thế. Theo mặc định, nó phá vỡ nó bởi máy chủ.
David Schwartz

Nó có thể liệt kê tất cả các quy trình đang sử dụng một giao diện không? Nếu vậy, bạn có thể vui lòng chỉ cho chúng tôi lệnh và tùy chọn không?
lượng tử

1
Không trực tiếp. Nhưng một khi bạn tìm thấy máy chủ lưu trữ, bạn có thể tìm thấy quá trình, ví dụ với netstat -pn.
David Schwartz

3

Sử dụng tcpdumpđể đánh hơi một số gói trên giao diện này:

# tcpdump -vv -s0 -i eth0 -c 100 -w /tmp/eth0.pcap

Sao chép vào máy khách và mở bằng Wireshark để xem điều gì sẽ xảy ra.


Không phải là cách dễ nhất để có được các số liệu thống kê đơn giản nhưng bất cứ điều gì thậm chí phức tạp hơn một chút và wireshark sẽ tỏa sáng!
Silverfire
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.