Trova i processi utilizzando un'interfaccia di rete


9

Sto cercando di trovare un modo per arrestare in modo sicuro un'interfaccia di rete, vale a dire senza disturbare alcun processo. Per questo ho bisogno di scoprire quali processi stanno attualmente utilizzando quell'interfaccia. Strumenti come ss, netstato lsofsono utili che mostra quali processi hanno socket aperti, ma non mostrano wpa_supplicant, dhcpcd, hostapde altri.

C'è un modo per rilevare questi processi in modo generale? Potrebbe non essere per dhcpcd, dato che ogni tanto è solo un programma che apre un socket, ma presumo che wpa_supplicant e hostapd "farebbero qualcosa" a quell'interfaccia che è rilevabile e forse porta anche al PID pertinente.

Risposte:


13

Tali programmi utilizzeranno i socket Netlink per comunicare direttamente con il driver dell'hardware di rete. lsofla versione 4.85 ha aggiunto il supporto per i socket Netlink, ma nei miei test su CentOS 5.8, la funzionalità non sembra funzionare molto bene. Forse dipende dalle funzionalità aggiunte nei kernel più recenti.

Tuttavia, è possibile fare una buona ipotesi su quando ci si imbatte in un socket Netlink. Se si cat /proc/net/netlinkottiene un elenco di socket Netlink aperti, incluso il PID dei processi che li hanno aperti. Quindi se lsof -p $THEPIDquesti PID, troverai le voci con socknella TYPEcolonna e can't identify protocolnella NAMEcolonna. Non è garantito che si tratti di prese Netlink, ma è una scommessa abbastanza buona.

Si potrebbe anche dedurre che un determinato processo sta parlando direttamente a un'interfaccia se i file sono /sys/class/net/$IFNAMEaperti.

Ora, tutto ciò che è stato detto, penso che la tua domanda sia sbagliata.

Diciamo che c'è un comando che non ho scoperto. Chiamalo lsif -i wlan0e dì che restituisce un elenco di PID che accedono all'interfaccia denominata. Cosa saresti in grado di fare con esso che ti permetterebbe di "non disturbare" i processi usando quell'interfaccia, come hai richiesto? Stavi pensando di uccidere tutti i processi usando prima quell'interfaccia? È abbastanza inquietante. :) Forse stavi invece pensando che abbandonare l'interfaccia da sotto un processo utilizzandolo sarebbe in qualche modo dannoso?

Alla fine, cosa c'è di così brutto ifconfig wlan0 down?

Le interfacce di rete non sono dispositivi di archiviazione. Non è necessario scaricare i dati sul disco e smontarli con grazia. Non rompere le prese aperte potrebbe essere utile, ma come già sai, puoi capirlo con netstate lsof. wpa_supplicantnon farà il broncio se fai rimbalzare la sua interfaccia senza tante cerimonie. (Se lo fa, è un bug e deve essere risolto; non indicherebbe un tuo errore.)

Programmi di rete ben scritti affrontano cose come una cosa ovvia. Le reti non sono affidabili. Se un programma non è in grado di far fronte a un'interfaccia rimbalzata, inoltre non sarà in grado di far fronte a cavi Ethernet scollegati, modem DSL ingombranti o backhoes .


Grazie mille. Ho scoperto che lsof riporta correttamente i socket netlink sul mio sistema. Sembra sufficiente fare in modo che ROUTE trovi i processi che desidero. Per quello che sto facendo con queste informazioni: chiedere all'utente se l'arresto debba essere annullato nel caso in cui l'utente abbia avviato i processi associati a questa interfaccia.
ipsec,

C'è un modo per scoprire a quale particolare interfaccia sono collegati i processi?
ipsec,

Non sono a conoscenza di un modo, a parte straceinginocchiarli quando si avviano e guardare la bind(2)chiamata.
Warren Young,

Puoi anche usare qualsiasi "file" tun0 nel proc fs usando questo comando: find /proc/ -name tun0 | cut -d\/ -f3 | uniq | xargs -IPID lsof -p PID
frogstarr78,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.