【问题标题】:Managing Cisco programmatically; Telnet vs SNMP? [closed]以编程方式管理思科; Telnet 与 SNMP? [关闭]
【发布时间】:2010-09-19 01:56:03
【问题描述】:

最近,一位网络工程师同事找到了我,他想将他的次要网络管理职责交给初级帮助台技术人员。需要管理的特定位置作为其单站点物业的租户的 ISP,因此每天都会进行很多小调整。

我认为为他编写一个用于现场管理 32 台 Cisco 设备的 winform 应用程序会很有帮助。我想最初提供可以修改访问控制列表、端口 VLAN 分配和每个 VLAN 的带宽限制的功能......在列表中添加更多认为有价值的内容。

我最初的想法是用网络设备模拟一个 telnet 会话;利用我的网络工程师对命令行/IOS 交互的熟悉程度。我自己学习 Cisco IOS 约定所需的时间最少。

虽然在寻找解决方案时,似乎大多数人都偏爱 SNMP。 那,或者说,他们的具体情况将他们推向了 SNMP 的方向。

我想知道我是否忽略了 SNMP 的一个明显优势。 我应该使用 SNMP 吗?为什么或为什么不?

【问题讨论】:

    标签: network-programming telnet snmp cisco


    【解决方案1】:

    我已经使用 Cisco 交换机完成了相当数量的真实世界 SNMP 编程,并发现基于 Net-SNMP 的 Python 非常合理。以下是通过 Google 书籍通过 Net-SNMP 和 Python 上传新 Cisco 配置的示例:Cisco Switch Upload via Net-SNMP and Python。我应该透露我是链接中引用的这本书的合著者。

    每个人的里程可能会有所不同,但我个人不喜欢使用expect,而是更喜欢使用SNMP,因为它实际上被设计为“简单网络管理协议”。在紧要关头,expect 是可以的,但它不会是我的第一选择。一些公司使用 expect 的原因之一是开发人员只是习惯了使用 expect。我不一定会因为有人自动化 telnet 或 ssh 的例子就绕过 SNMP。先自己试试吧。

    expect 可能会发生一些真正可怕的事情,这也可能并不明显。因为expect等待输入,在合适的条件下会出现非常细微的问题,难以调试。这并不意味着经验丰富的开发人员无法使用 expect 开发可靠的代码,但也需要注意这一点。

    您可能想要查看的其他内容之一是使用多处理模块编写非阻塞 SNMP 代码的示例。因为这是我在 stackoverflow 上的第一篇文章,所以我不能发布多个链接,但如果你用谷歌搜索它,你可以找到它,或者另一个关于使用 IPython 和 Net-SNMP 的文章。

    编写 SNMP 代码时要记住的一件事是,它涉及阅读大量文档并进行反复试验。在 Cisco 的情况下,文档非常好。

    【讨论】:

      【解决方案2】:

      对期望的另一票。

      此外,您不希望允许通过 telnet 或 SNMP 配置防火墙 - ssh 是唯一的方法。原因是 ssh 对其有效负载进行加密,并且不会将特权管理凭据暴露给潜在的拦截。

      如果由于某种原因您不能直接使用 ssh,请考虑将启用 ssh 的串行控制台服务器连接到防火墙的控制台端口并以这种方式进行配置。

      【讨论】:

        【解决方案3】:

        思科为帮助台应用程序提供了菜单选项。基本上你telnet到盒子,它会提供一个漂亮的干净菜单(按1、2、3)。欲了解更多信息,请查看此链接:

        http://www.cisco.com/en/US/docs/ios/12_2/configfun/command/reference/frf001.html#wp1050026

        【讨论】:

          【解决方案4】:

          SNMP 非常适合输出 Cisco 设备的信息,但对于控制设备不是很有用。 (虽然从技术上讲,您可以使用 SNMP 和 TFTP 的组合将新配置推送到 Cisco IOS 设备。但是发送一个全新的配置对于控制您的路由器或交换机来说是一种相当生硬的工具)。

          其他评论者之一提到了 Cisco IOS XR XML API。请务必注意,IOS XR XML API 仅在运行 IOS XR 的设备上可用。 IOS XR 仅用于少数思科的高端运营商级设备,因此对于 99% 的所有思科路由器和交换机,IOS XR XML API 不是一个选项。

          其他可能性是 SSH 或 HTTP(许多 Cisco 路由器、交换机、AP 等都有可选的 Web 界面)。但我建议反对其中任何一个。据我所知,不同设备的 Web 界面并不是很一致,而且相当数量的 Cisco 设备不支持 SSH,或者至少在基本许可证中不支持它。

          Telnet 确实是唯一的选择,除非您只针对一小部分设备型号。为了给您一些比较的东西,思科自己的 CiscoWorks 网络管理软件使用 Telnet 连接到托管设备。

          【讨论】:

          • 此外,Cisco Web 界面在历史上一直是安全问题的成熟领域,我建议您默认禁用它,除非您绝对必须启用它。
          【解决方案5】:

          我不会使用 SNMP,而是使用一种叫做“expect”的小语言。它为这些路由器提供了一个非常好的期望/响应处理器。

          【讨论】:

            【解决方案6】:

            与 telnet 相比,SNMP 对相关设备的 CPU 占用相当大;我会尽可能推荐telnet。 (如上一个回答所述,IOS XR XML API 会很好,但据我所知,IOS XR 仅部署在高端运营商级路由器上)。

            在现有的配置管理系统方面,两个商业参与者是 HP Opsware 和 EMC Voyence。两者都可能满足您的需求。我不知道实际上支持部署更改的许多开源解决方案。 (例如,RANCID 仅进行配置监控,而不进行预暂存和部署配置更改)。

            如果您要推出自己的解决方案,我建议您与您的网络管理员坐下来,为他提供的服务(例如标准化 ACL、QoS 队列和 VLAN)提出最佳实践部署模型名称;ACL 中对不同客户具有相同功能的类似条目等)。在开始设计之前,确保所有现有部署的配置都符合此 BP,这将使问题更易于管理。祝你好运。

            【讨论】:

              【解决方案7】:

              旁注:在重新发明轮子编写另一个服务供应系统/网络管理系统之前,请尝试寻找现有的。我知道很多不同程度的灵活性/功能的商业解决方案,但我确信有很多开源解决方案。

              【讨论】:

              • 你可能是对的。但在这里,好奇心说服了我做出诚实的努力。
              【解决方案8】:

              我发现 SNMP 对管理来说很麻烦。如果您只需要获取一些数据,那就太好了;如果您需要更改或大量使用它可能非常耗时。就我而言,我对 CLI 很满意,因此 Telnet 方法效果很好。我编写了一些 Python 脚本来使用 Telnetlib 对各种网络设备执行管理任务

              【讨论】:

                【解决方案9】:

                SNMP 还不错,但它可能无法完成您需要它做的所有事情。根据您使用的库以及它如何隐藏与 SNMP 交互的细节,您可能很难找到要更改的 MIB 的正确部分,甚至不知道要更改什么或如何更改它们以执行您想要的操作。

                不使用 SNMP 的一个原因是您可以使用IOS XR XML API 进行所有您需要的配置。使用它来捆绑您想要发送到设备的命令可能比与 SNMP 交互要容易得多。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-04-26
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-08-08
                  • 2015-03-17
                  相关资源
                  最近更新 更多