使用網路介面查找程序
我正在嘗試找到一種安全關閉網路介面的方法,即不干擾任何程序。為此,我需要找出目前正在使用該介面的程序。或之類
ss
的工具有助於顯示哪些程序具有打開的套接字,但它們不顯示,等。netstat``lsof``wpa_supplicant``dhcpcd``hostapd
有沒有辦法以一般方式檢測這些過程?它可能不適用於 dhcpcd,因為它只是一個不時打開套接字的程序,但我假設 wpa_supplicant 和 hostapd 會對那個可檢測的介面“做某事”,並且可能還會導致相關的 PID。
此類程序將使用Netlink 套接字直接與網路硬體的驅動程序對話。
lsof
4.85 版增加了對 Netlink 套接字的支持,但在我對 CentOS 5.8 的測試中,該功能似乎不能很好地工作。也許這取決於新核心中添加的功能。但是,您可以很好地猜測您何時遇到 Netlink 套接字。如果你
cat /proc/net/netlink
得到一個打開的 Netlink 套接字列表,包括打開它們的程序的 PID。然後,如果您lsof -p $THEPID
是那些 PID,您將sock
在TYPE
列和列can't identify protocol
中找到條目NAME
。不能保證這些是 Netlink 套接字,但這是一個不錯的選擇。如果某個給定程序有打開的文件,您還可以推斷該程序正在直接與介面對話
/sys/class/net/$IFNAME
。現在,說了這麼多,我認為你的問題是錯誤的。
假設有一個我沒有發現的命令。呼叫它
lsif -i wlan0
,並說它返回訪問指定介面的 PID 列表。你能用它做什麼來讓你按照你的要求使用那個界面“不干擾”程序?您是否打算首先使用該界面殺死所有程序?這很令人不安。:) 也許您反而認為從使用它的程序下方刪除介面會以某種方式有害?到底有什麼不好的
ifconfig wlan0 down
?網路介面不是儲存設備。您不必將數據刷新到磁碟並優雅地解除安裝它們。不破壞打開的套接字可能是值得的,但正如您已經知道的那樣,您可以使用
netstat
and來解決這個問題lsof
。wpa_supplicant
如果您毫不客氣地彈跳它的界面,就不會生氣。(如果是這樣,這是一個錯誤,需要修復;這並不表示您有什麼過錯。)編寫良好的網路程序理所當然地處理這些事情。網路不可靠。如果一個程序無法應對介面被反彈,它也將無法應對拔出的乙太網電纜、笨拙的 DSL 調製解調器或反鏟。