Suchen Sie Prozesse über eine Netzwerkschnittstelle

9

Ich versuche einen Weg zu finden, um eine Netzwerkschnittstelle sicher herunterzufahren, dh ohne Prozesse zu stören. Dazu muss ich herausfinden, welche Prozesse diese Schnittstelle derzeit verwenden. Tools wie ss, netstatoder lsofsind nützlich zeigen , welche Prozesse offene Steckdosen, aber sie zeigen nicht wpa_supplicant, dhcpcd, hostapdund andere.

Gibt es eine Möglichkeit, diese Prozesse allgemein zu erkennen? Es ist vielleicht nicht für dhcpcd, da es nur ein Programm ist, das ab und zu einen Socket öffnet, aber ich gehe davon aus, dass wpa_supplicant und hostapd etwas an dieser Schnittstelle "tun", was erkennbar ist und möglicherweise auch zur relevanten PID führt.

ipsec
quelle

Antworten:

13

Solche Programme verwenden Netlink-Sockets , um direkt mit dem Treiber der Netzwerkhardware zu kommunizieren . lsofVersion 4.85 fügte Unterstützung für Netlink-Sockets hinzu, aber in meinen Tests unter CentOS 5.8 scheint die Funktion nicht sehr gut zu funktionieren. Vielleicht hängt es von Funktionen ab, die in neueren Kerneln hinzugefügt wurden.

Es ist jedoch möglich, eine ziemlich gute Vermutung anzustellen, wann Sie auf einen Netlink-Socket gestoßen sind. Wenn Sie cat /proc/net/netlinkeine Liste der geöffneten Netlink-Sockets erhalten, einschließlich der PID der Prozesse, in denen sie geöffnet sind. Wenn Sie lsof -p $THEPIDdiese PIDs verwenden, finden Sie Einträge mit sockin der TYPESpalte und can't identify protocolin der NAMESpalte. Es ist nicht garantiert, dass dies Netlink-Sockets sind, aber es ist eine ziemlich gute Wette.

Sie können auch darauf schließen, dass ein bestimmter Prozess direkt mit einer Schnittstelle kommuniziert, wenn Dateien /sys/class/net/$IFNAMEgeöffnet sind.

Nach all dem denke ich, dass Ihre Frage falsch ist.

Angenommen, es gibt einen Befehl, den ich nicht entdeckt habe. Rufen Sie es auf lsif -i wlan0und sagen Sie, es gibt eine Liste von PIDs zurück, die auf die benannte Schnittstelle zugreifen. Was könnten Sie damit tun, um Prozesse über diese Schnittstelle, wie Sie es gewünscht haben, nicht zu stören? Wollten Sie zuerst alle Prozesse über diese Schnittstelle abbrechen? Das ist ziemlich beunruhigend. :) Vielleicht haben Sie stattdessen gedacht, dass das Herausfallen der Benutzeroberfläche unter einem Prozess, der sie verwendet, irgendwie schädlich wäre?

Worum geht es am Ende so schlecht ifconfig wlan0 down?

Netzwerkschnittstellen sind keine Speichergeräte. Sie müssen keine Daten auf die Festplatte leeren und die Bereitstellung ordnungsgemäß aufheben. Es mag sich lohnen, keine Steckdosen aufzubrechen, aber wie Sie bereits wissen, können Sie dies mit netstatund herausfinden lsof. wpa_supplicantwird nicht schmollen, wenn Sie seine Schnittstelle kurzerhand abprallen. (Wenn dies der Fall ist, handelt es sich um einen Fehler, der behoben werden muss. Dies würde keinen Fehler von Ihnen anzeigen.)

Gut geschriebene Netzwerkprogramme bewältigen solche Dinge selbstverständlich. Netzwerke sind unzuverlässig. Wenn ein Programm nicht damit umgehen kann, dass eine Schnittstelle zurückgeworfen wird, kann es auch nicht mit nicht angeschlossenen Ethernet-Kabeln, balkigen DSL-Modems oder Baggern umgehen .

Warren Young
quelle
Vielen Dank. Ich habe herausgefunden, dass lsof Netlink-Sockets auf meinem System korrekt meldet. Es scheint ausreichend zu sein, nach ROUTE zu suchen, um die gewünschten Prozesse zu finden. Was ich mit diesen Informationen mache: Fragen Sie den Benutzer, ob das Herunterfahren abgebrochen werden soll, falls der Benutzer Prozesse gestartet hat, die dieser Schnittstelle zugeordnet sind.
IPSec
Gibt es eine Möglichkeit herauszufinden, mit welcher bestimmten Schnittstelle die Prozesse verbunden sind?
IPSec
Ich kenne keinen Weg, es stracefehlt ihnen, wenn sie anfangen, und ich schaue auf den bind(2)Anruf.
Warren Young
Sie können auch beliebige tun0 "Dateien" in den find /proc/ -name tun0 | cut -d\/ -f3 | uniq | xargs -IPID lsof -p PID
Prozessen