如何识别从Linux机器连接到同一台交换机的网卡?

初始设置

作为一名Linuxpipe理员,您已经安装了一个全新的Linux机箱,配有6个网卡eth0至eth5。 eth0接口configuration正确,所有其他接口当前正常,但没有IP地址。 networking人员只需将四根电缆连接到这个盒子上。 两个LAN电缆用于将盒子连接到生产networking,另外两个用于将盒子连接到专用networking。 你只知道eth0连接到生产networking。 但是您不知道哪个其他NIC连接到相同的交换机,因为有不同的服务器世代和/或networking人员使用错误的NIC进行连接。

任务在手

由于此设置对于您的基础设施而言是典型的,因此您希望自动configuration接口接口。 现在您可以检测哪些NIC根本没有连接,哪些NIC连接到相同的交换机,以便它们可以绑定。 您只能访问Linux机器,无法查询交换机。

思路

检测链接状态很简单:

ethtool $device | grep 'Link detected' | cut -d ':' -f 2 

但如何匹配连接到同一交换机的设备?

在HP-UX中有一个称为linkloop的工具[1]。 官方的Linux工具丢失了(虽然有一个旧的SourceForce项目)。

我已经想到的可能的解决scheme是:

  1. 用tcpdump监听所有的接口。 制作并发送一个ICMP(广播)数据包。 看到该数据包的接口需要连接到同一个交换机。 – >需要一些简单的工具的build议,可以用于此。 我想使用纯shell命令或Python的脚本。

  2. 尝试通过一些简单的协议(HTTP?)与外部盒子通话,看看是否有回应。 – >容易出错,并依赖于外部框。

你有进一步的想法或build议如何解决这个任务?

提前感谢您的所有意见!

[1] http://linux.die.net/man/1/linkloop

交换机可能已经向您发送了您想要的信息。 如果它们是Cisco交换机,默认情况下它们将使用称为CDP(思科发现协议)的进程,该进程将向您提供有关交换机连接的信息。

您可以使用tcpdump来查看以下信息(replace适当的接口):

 tcpdump -nn -v -i eth0 -s 1500 -c 1 'ether[20:2] == 0x2000' 

基于标准的CDP版本是LLDP(链路层发现协议)。 有些供应商会默认closures,其他供应商closures,所以你的里程会有所不同。 有一些针对Linux的LLDP实现,但是如果你想要类似于上述的东西,你可以使用这个(在Cisco交换机上build立LLDP并且testing下面更符合上面的):

 tcpdump -nn -v -i eth0 -s 1500 -c 1 'ether proto 0x88cc' 

除此之外,我想说的是,您提供的选项1的修改可能会起作用,但是,您可以不发送广播ICMP,而是尝试正常的ICMP(不在ARP表中的主机)并捕获ARP数据包。 如果ARP请求被发送出eth0,并且在eth1和eth3上收到,那么你知道它们在同一个VLAN中。 最简单的命令如下:

 tcpdump -i eth0 arp 

如果交换机将使用LLDP与您通信,则可以运行LLDP并在此处查找更多信息。

如果交换机是思科设备,你也许可以得到CDP信息,只要他们宣布/广播CDP信息

例如cdp工具或cdpr

为什么不下载并build立linkloop工具? 这不是那么古老

否则,我只是使用一些工具,将通过第2层广播,并validation你通过tcpdump收到它。

发送广播ICMP数据包很容易ping -b 192.168.1.255