我正在做一个网络自动化项目。我正在编写一个 Python 脚本,它将远程扫描 Ubuntu 服务器和网络交换机,然后尽力在图中重建网络的物理拓扑。我认为该脚本可以做到这一点,如下所示:
- 对于每个 Ubuntu 服务器,列出该服务器的物理接口。
- 如果接口处于 UP/UP 状态,请记下其 MAC 地址。
- 对于每个网络交换机,检查所有可以支持终端服务器的 UP/UP 端口。
- 检查交换机的 MAC 地址表,查找远端主机的 MAC。
- 如果发现匹配,则更新图表。
步骤 1 是目前最令人头疼的问题。当我运行ifconfig
、ip a
、ip link show
、、等命令时,我会获得所有网络接口lshw -C network -short
(物理和逻辑)的列表。例如,这是我的一台服务器上的接口列表:ls /sys/class/net/
netstat -i
bond0.10
bond0.11
br16
br17
eno3
enp216s0
enp94s0f
lo
virbr0
vnet0
vnet1
哪些是物理的?哪些是虚拟的?我可以做出一些有根据的猜测,但这还不够。我想明确地确定哪些接口是物理的,并剔除其余的。
(我没有这些 Ubuntu 机器的管理员权限,所以我无法安装类似的实用程序nmcli
。)
任何建议都将不胜感激。