仅具有 ssh 访问权限,确定设备是路由器还是交换机(Cisco 和 Juniper)

仅具有 ssh 访问权限,确定设备是路由器还是交换机(Cisco 和 Juniper)

我们的网络上有一些 Cisco 和 Juniper 设备,我需要编写一个 python 脚本来确定它们是什么:交换机还是路由器。

我有 ssh 访问权限,因此我可以show version解析“JUNOS”或“Cisco”来找出供应商。但我不知道如何找出设备是路由器、交换机还是其他设备。

谢谢你的帮助!

答案1

这可能很难说,因为很多作为交换机销售的型号都包含路由功能,而且你也可能遇到路由器被用作交换机的情况——即它们不路由流量。所以即使你能弄清楚设备的功能,你也真的想知道它在你的网络。

你可能有很多设备,但可能没有那么多不同的型号,因此手动解析输出show version可能足以找出你的设备做。

除非你只是想填充资产数据库,否则你将必须查看配置并弄清楚每个设备是什么实际上配置为执行。

答案2

在 Cisco 设备上,可以使用 CDP 解析设备功能(请参阅在思科设备上,如何显示其功能?),但是您的网络上可能禁用了 CDP。

最好的办法是检查 Vlan 接口是否存在(意味着可切换的设备)以及是否存在快速以太网 X/X/X 类型接口(可能是可切换的路由器)。

通过使用这两个事实,您可以非常准确地了解该设备是什么,但它是思科特有的。

您还可以使用 Cisco 功能导航器/Juniper 参考来使用模型名称构建检测(如果您知道网络上有哪些设备,大多数情况下您的模型数量有限),这将更准确但特定于您的网络。

优点是,这次它是通用的,而不是特定于某个品牌,并且没有错误检测的风险。

或者,您可能想要使用 CMDB 或库存软件来准备这些信息以供以后使用,然后您只需查询数据库来检查是否是交换机或路由器。

答案3

有很多方法可以做到这一点。

即使您必须尝试多个字符串,我的首选也是 SNMP。调用速度更快,并且不易受到代码版本差异的影响。您可以下载一份免费的 solar winds 副本,并在不到一小时内完成。编写 SNMP 交互脚本也比编写 ssh/cli 脚本容易得多。

接下来我会使用某种类型的 expect 包装器。我偏爱 perl 的东西,因为它更稳定,文档更丰富。您还可以编写一个 expect 脚本并从 python 中调用它。

show version 是显而易见的命令,但它在不同设备之间可能有所不同。您有可能的平台列表吗?您可以使用正则表达式对给定列表进行排序,然后将其他所有内容放入未知堆中。在对未知内容进行排序时,更新脚本以自动找到它们。

相关内容