Tìm các quy trình bằng giao diện mạng


9

Tôi đang cố gắng tìm cách tắt giao diện mạng một cách an toàn, tức là không làm phiền bất kỳ quy trình nào. Đối với điều này, tôi cần tìm hiểu những quy trình hiện đang sử dụng giao diện đó. Công cụ thích ss, netstathoặc lsoflà hiển thị hữu ích mà quá trình có ổ cắm mở, nhưng họ không hiển thị wpa_supplicant, dhcpcd, hostapdvà những người khác.

Có cách nào để phát hiện các quá trình này một cách chung chung không? Nó có thể không dành cho dhcpcd, vì nó chỉ là một chương trình mở ổ cắm mọi lúc, nhưng tôi giả sử wpa_supplicant và hostapd sẽ làm một cái gì đó để giao diện đó có thể phát hiện được và có lẽ cũng dẫn đến PID có liên quan.

Câu trả lời:


13

Các chương trình như vậy sẽ được sử dụng ổ cắm Netlink để nói chuyện trực tiếp với trình điều khiển của phần cứng mạng. lsofphiên bản 4.85 đã thêm hỗ trợ cho ổ cắm Netlink, nhưng trong thử nghiệm của tôi trên CentOS 5.8, tính năng này dường như không hoạt động tốt. Có lẽ nó phụ thuộc vào các tính năng được thêm vào trong các hạt nhân mới hơn.

Tuy nhiên, có thể đoán khá chính xác khi bạn chạy vào ổ cắm Netlink. Nếu bạn cat /proc/net/netlinknhận được một danh sách các ổ cắm Netlink đang mở, bao gồm cả PID của các quy trình đã mở chúng. Sau đó, nếu bạn là lsof -p $THEPIDnhững PID đó, bạn sẽ tìm thấy các mục socktrong TYPEcột và can't identify protocoltrong NAMEcột. Không đảm bảo rằng đây là các ổ cắm Netlink, nhưng đó là một đặt cược khá tốt.

Bạn cũng có thể suy luận rằng một quy trình nhất định đang nói chuyện trực tiếp với một giao diện nếu nó có các tệp đang /sys/class/net/$IFNAMEmở.

Bây giờ, tất cả những gì đã được nói, tôi nghĩ rằng câu hỏi của bạn là sai.

Hãy nói rằng có một lệnh tôi chưa phát hiện ra. Gọi nó lsif -i wlan0và nói rằng nó trả về một danh sách các PID truy cập vào giao diện được đặt tên. Bạn có thể làm gì với nó, điều này cho phép bạn "không làm phiền" các quy trình sử dụng giao diện đó, như bạn đã yêu cầu? Bạn đã lên kế hoạch tiêu diệt tất cả các quy trình bằng giao diện đó trước chưa? Điều đó thật đáng lo ngại. :) Có lẽ thay vào đó bạn nghĩ rằng việc bỏ giao diện từ bên dưới một quá trình sử dụng nó sẽ gây hại?

Điều gì, cuối cùng, là rất xấu về ifconfig wlan0 down?

Giao diện mạng không phải là thiết bị lưu trữ. Bạn không cần phải xóa dữ liệu vào đĩa và ngắt kết nối chúng một cách duyên dáng. Không phá vỡ các ổ cắm mở có thể đáng giá, nhưng như bạn đã biết, bạn có thể tìm ra điều đó với netstatlsof. wpa_supplicantsẽ không hờn dỗi nếu bạn trả lại giao diện của nó một cách khác thường. (Nếu có, đó là một lỗi và cần được sửa chữa; nó sẽ không chỉ ra một số lỗi của bạn.)

Các chương trình mạng được viết tốt đối phó với những điều như vậy là chuyện đương nhiên. Mạng không đáng tin cậy. Nếu một chương trình không thể đối phó với một giao diện bị trả về, nó cũng sẽ không thể đối phó với các cáp Ethernet không được cắm, modem DSL khó hiểu hoặc backhoes .


Cảm ơn rât nhiều. Tôi phát hiện ra rằng lsof báo cáo chính xác các ổ cắm netlink trên hệ thống của tôi. Dường như đủ để grep cho ROUTE để tìm các quy trình tôi muốn. Đối với những gì tôi đang làm với thông tin này: hỏi người dùng liệu có nên hủy bỏ việc tắt máy trong trường hợp người dùng đã bắt đầu các quy trình liên quan đến giao diện này.
ipsec

Có cách nào để tìm ra giao diện cụ thể mà các quá trình được kết nối không?
ipsec

Tôi không biết một cách nào, thiếu stracechúng khi họ khởi động và theo dõi bind(2)cuộc gọi.
Warren Young

Bạn cũng có thể sử dụng bất kỳ "tập tin" tun0 nào trong Proc fs bằng lệnh này: find /proc/ -name tun0 | cut -d\/ -f3 | uniq | xargs -IPID lsof -p PID
Frogstarr78
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.