Linux

使用網路介面查找程序

  • September 15, 2012

我正在嘗試找到一種安全關閉網路介面的方法,即不干擾任何程序。為此,我需要找出目前正在使用該介面的程序。或之類ss的工具有助於顯示哪些程序具有打開的套接字,但它們不顯示,等。netstat``lsof``wpa_supplicant``dhcpcd``hostapd

有沒有辦法以一般方式檢測這些過程?它可能不適用於 dhcpcd,因為它只是一個不時打開套接字的程序,但我假設 wpa_supplicant 和 hostapd 會對那個可檢測的介面“做某事”,並且可能還會導致相關的 PID。

此類程序將使用Netlink 套接字直接與網路硬體的驅動程序對話。lsof4.85 版增加了對 Netlink 套接字的支持,但在我對 CentOS 5.8 的測試中,該功能似乎不能很好地工作。也許這取決於新核心中添加的功能。

但是,您可以很好地猜測您何時遇到 Netlink 套接字。如果你cat /proc/net/netlink得到一個打開的 Netlink 套接字列表,包括打開它們的程序的 PID。然後,如果您lsof -p $THEPID是那些 PID,您將sockTYPE列和列can't identify protocol中找到條目NAME。不能保證這些是 Netlink 套接字,但這是一個不錯的選擇。

如果某個給定程序有打開的文件,您還可以推斷該程序正在直接與介面對話/sys/class/net/$IFNAME

現在,說了這麼多,我認為你的問題是錯誤的。

假設有一個我沒有發現的命令。呼叫它lsif -i wlan0,並說它返回訪問指定介面的 PID 列表。你能用它做什麼來讓你按照你的要求使用那個界面“不干擾”程序?您是否打算首先使用該界面殺死所有程序?這很令人不安。:) 也許您反而認為從使用它的程序下方刪除介面會以某種方式有害?

到底有什麼不好的ifconfig wlan0 down

網路介面不是儲存設備。您不必將數據刷新到磁碟並優雅地解除安裝它們。不破壞打開的套接字可能是值得的,但正如您已經知道的那樣,您可以使用netstatand來解決這個問題lsofwpa_supplicant如果您毫不客氣地彈跳它的界面,就不會生氣。(如果是這樣,這是一個錯誤,需要修復;這並不表示您有什麼過錯。)

編寫良好的網路程序理所當然地處理這些事情。網路不可靠。如果一個程序無法應對介面被反彈,它也將無法應對拔出的乙太網電纜、笨拙的 DSL 調製解調器或反鏟

引用自:https://unix.stackexchange.com/questions/48250