使用网络接口查找进程

ips*_*sec 9 linux networking process

我试图找到一种安全关闭网络接口的方法,即不干扰任何进程。为此,我需要找出当前正在使用该接口的进程。工具喜欢ssnetstat或者lsof是有帮助的显示哪些进程打开插座,但他们不显示wpa_supplicantdhcpcdhostapd和其他人。

有没有办法以一般方式检测这些过程?它可能不适用于 dhcpcd,因为它只是一个不时打开套接字的程序,但我假设 wpa_supplicant 和 hostapd 会对该接口“做某事”,该接口可检测到,并且可能还会导致相关的 PID。

War*_*ung 13

此类程序将使用Netlink 套接字直接与网络硬件的驱动程序对话。lsof4.85 版增加了对 Netlink 套接字的支持,但在我对 CentOS 5.8 的测试中,该功能似乎不太好用。也许这取决于新内核中添加的功能。

但是,当您遇到 Netlink 套接字时,可以很好地猜测。如果您cat /proc/net/netlink获得打开的 Netlink 套接字列表,包括打开它们的进程的 PID。然后,如果你lsof -p $THEPID这些的PID,你会发现与项目sockTYPE列,并can't identify protocolNAME列。不能保证这些是 Netlink 套接字,但这是一个不错的选择。

如果给定进程有/sys/class/net/$IFNAME打开的文件,您还可以推断它直接与接口对话。

现在,说了这么多,我认为你的问题是错误的。

假设有一个我没有发现的命令。调用它lsif -i wlan0,并说它返回访问指定接口的 PID 列表。你能用它做什么来让你“不打扰”使用该界面的进程,正如你所要求的那样?您是否打算首先使用该界面终止所有进程?这很令人不安。:) 也许您认为从使用它的进程下面删除接口会在某种程度上有害?

到底是什么如此糟糕ifconfig wlan0 down

网络接口不是存储设备。您不必将数据刷新到磁盘并优雅地卸载它们。不破坏打开的套接字可能是值得的,但正如您已经知道的,您可以使用netstat和 来解决这个问题lsofwpa_supplicant如果您毫不客气地弹跳其界面,则不会生闷气。(如果是这样,那就是一个错误,需要修复;它不会表明您的某些错误。)

编写良好的网络程序理所当然地处理这些事情。网络不可靠。如果一个程序无法处理被弹回的接口,它也将无法处理未插入的以太网电缆、笨拙的 DSL 调制解调器或挖掘机