如何识别从Linux机箱连接到同一交换机的NIC?

初始设置

作为Linux管理员,您已经安装了一个带有6个NIC eth0到eth5的新Linux盒子.
eth0接口配置正确,所有其他接口当前处于up状态,但没有IP地址.网络人员只需将四根电缆连接到此盒子即可.两条LAN电缆用于将盒子连接到生产网络,两条用于将盒子连接到专用网络.您只知道eth0已连接到生产网络.但是您不知道哪个其他NIC连接到同一个交换机,因为有不同的服务器代和/或网络人员使用错误的NIC进行连接.

手头的任务

由于此设置是您的基础架构的典型设置,因此您希望自动配置绑定接口.现在您的任务是检测哪些NIC根本没有连接,哪些NIC链接到同一个交换机,以便它们可以绑定.您只能访问Linux机器,无法查询交换机.

思路

检测链接状态很简单:

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

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

在HP-UX中,有一个名为linkloop [1]的工具.缺少官方的Linux工具(虽然有一个旧的SourceForce项目).

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

>使用tcpdump监听所有接口.制作并发送ICMP(广播)数据包.看到该数据包的接口需要连接到同一个交换机. – >需要提供可能用于此的简单工具的建议.我想使用普通的shell命令或Python来编写脚本.
>尝试通过一些简单的协议(HTTP?)与外部盒子通话,看看是否有响应. – >容易出错并且依赖于外部盒子.

您是否有进一步的想法或建议如何解决此任务?

提前感谢您的所有评论!

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

解决方法

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

您可以使用tcpdump查看以下信息(替换相应的接口):

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

基于标准的CDP版本是LLDP(链路层发现协议).一些供应商默认启用此功能,其他供应商关闭,因此您的里程会有所不同. Linux有一些LLDP实现,但是如果你想要类似于上面的东西,你可以使用它(在Cisco交换机上设置LLDP并测试下面的内容,这与上面的更一致):

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

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

tcpdump -i eth0 arp

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...