如何识别从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

相关文章

/etc/sysctl.conf这个目录主要是配置一些系统信息,/etc/sys...
1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起...
它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅...
不管是我们在安装软件还是监测软件的使用性能,我们都要随时...
装好Tomcat7后,发现除了本机能访问外界访问不了,岂有此理。...
修改防火墙配置需要修改 /etc/sysconfig/iptables 这个文件,...