在 中ip netns
创建对(命名的)网络命名空间的引用/var/run/ns
,可以很容易地对其进行跟踪。同样,也可以通过 确定/proc/[pid]/ns/net
。但是,某些自定义程序可以创建一个 net ns 并将相应的 inode 保存在其他一些非常规的位置。这会使我们难以确定是否有我们可以列出的 net ns。
其次,unshare <cmd>
在进程退出时销毁net ns,这很好。但是,ip netns exec <netns> <cmd>
即使在命令/进程退出后也会保留 ns。所以我相信,任何自定义程序都可以这样做。
因此,问题是:自定义程序是否有可能创建一个未命名的网络 ns,并且它与任何进程无关?
此外,鉴于我们不知道到 inode 的路径,是否可以从用户空间列出这样的(隐藏的)网络 ns?(内核当然有net ns的链表)一段代码会很有帮助。