书评:《使用 Tcl/Tk 构建网络管理工具》

作者:Dave Zeltserman 和 Gerard Puoplo
出版社:Prentice Hall
电子邮件:sales@prenhall.com
网址:http://www.prenhall.com/
价格:48 美元
ISBN:0130807273
评论者:Syd Logan
本书的目标读者是需要开发网络管理软件的系统管理员或网络顾问。虽然功能丰富的第三方网络管理工具(例如,HP 的 Openview)已广泛应用,但有时管理员或网络顾问可能会发现他们可用的工具不够灵活,无法解决特定问题。此外,购买第三方工具的成本通常可能令人望而却步;如果一个人的网络状态监控需求趋于适度,那么花费数千美元购买一个软件包可能是不切实际的。
用 Tcl/Tk 开发您自己的工具需要付出一些努力,但 Linux 附带了除可能需要的 Tcl 扩展之外的所有内容,这些扩展用于执行 SNMP(简单网络管理协议)通信。(在网上搜索表明 Scotty 有一个 Red Hat RPM,Scotty 是扩展之一。)本书介绍了 Tcl 的两个 SNMP 扩展。第一个是 Tickleman,这是一个商业产品,需要付费才能使用。第二个是 Scotty,这是一个可以通过互联网免费获得的软件包。
对于那些不熟悉 Tcl/Tk、SNMP 或 RMON(远程监控)的人来说,本书包含了大量新材料供您阅读。那些有兴趣了解这些技术的人是本书的第二个目标读者,我也属于其中之一。我已经熟悉 SNMP,几年前曾用它开发了一个用于 X 终端的远程配置工具。我对 Tcl/Tk 是新手,但对脚本编写或 GUI 开发并不陌生。我阅读本书主要是为了了解 Tcl/Tk。我想通过了解如何使用 Tcl/Tk 解决一个重要的编程任务来学习 Tcl/Tk 的工具、命令和语法。
本书的第三个目标读者是对网络管理软件设计感兴趣的工程师。介绍的高级概念应适用于任何编程语言或 GUI API,无论开发人员选择使用哪种,尽管读者需要自行完成从 Tcl/Tk 到要使用的任何工具集的过渡。
本书由三个主要部分组成。第一部分包括第 1 章和第 2 章,介绍了允许 Tcl 与 SNMP 一起使用的扩展(Scotty 和 Tickleman)。第 2 章对作者打算使用涵盖的技术编写的各种网络管理工具进行了很好的概述。本章中的许多信息对于不熟悉 SNMP 或 TCP/IP 网络技术的读者来说是全新的,并且几乎没有解释。我对此没有意见;毕竟,本书的既定读者是网络顾问,而且我期望网络顾问熟悉本章和本书其他部分中与网络相关的概念和技术。但是,如果您不熟悉 SNMP 等技术,您可能需要在网上搜索背景信息,或者阅读作者列出的书籍之一。他们说学习 SNMP 的基础知识很容易。我同意,但我认为本书如果能早些时候增加一章介绍 TCP/IP、SNMP 和 RMON,包括类似于本书第 12 章后面提供的 MIB-II 变量概述,将会受益匪浅。
第二部分,第 3 章到第 9 章,介绍了 Tcl/Tk,并进一步讨论了 Scotty 和 Tickleman SNMP 到 Tcl 的扩展。
第 3 章的标题是“Tcl 基础知识”。本章涵盖了 Tcl 的数组、变量、表达式、过程和函数、字符串操作以及控制流等方面。第 4 章“更多 Tcl”涵盖了诸如 Tcl 内置变量、编写 HTML 源文件、文件 I/O、事件驱动编程和模式匹配等主题。为了说明模式匹配,介绍了一个能够验证 IP 地址或掩码的例程,并且该例程在本书后面的代码中使用。因此,我建议即使您已经有 Tcl 经验,也要略读第 4 章,并密切关注提供的代码示例。如果您是 Tcl 新手,您可能想要启动 wish 并在阅读时尝试这些章节中的一些代码;这将有助于巩固所呈现的材料。
第 5 章是所有乐趣开始的地方。本章讨论了 Scotty 和 Tickleman SNMP 到 Tcl 的扩展。阅读本章将教会您使用 SNMP 连接到主机上的 SNMP 守护程序,一旦连接,就可以同步和异步地设置和获取 MIB 变量并执行其他 SNMP 操作。本章首先介绍 Tickleman,然后继续展示如何使用 Scotty 执行与 Tickleman 相同的操作。本章非常重要,应该仔细研究(如果需要,甚至可以阅读两次)然后再继续。
第 6 章通过设计和实现一个能够从多个网络设备获取信息的轮询循环,总结了对 Tcl 和 Scotty/Tickleman 的讨论。本章代码密集;我建议慢慢仔细地阅读。本章首先描述了作者维护有关被轮询设备的数据的方法(特别是 SNMP 重试计数和超时值,以及按 IP 地址和子网组织的社区名称)。此数据以 Tcl 代码开头的 Tcl 脚本的形式存储,该脚本执行轮询任务。当被要求轮询给定设备时,将搜索此数据,首先是精确的 IP 地址匹配,然后在未找到精确 IP 匹配的情况下,基于子网掩码进行匹配。如果这些搜索都没有找到匹配项,则使用硬编码的默认值。详细介绍了执行查找和检索数据的代码。本章的其余部分讨论了轮询循环的实现和使用。
现在读者已经掌握了 Tcl 以及 Scotty 和 Tickleman 的使用,作者开始讨论使用 Tk 进行 GUI 开发。与 Tcl 类似,第 7 章从头开始,假设读者没有任何先前的经验。同样,我建议启动 wish 并在阅读时尝试 Tk 示例。在介绍了一些基本的 Tk 小部件之后,作者开发了一个类似于第 1 章中介绍的完整 StatusMgr 的 Tk 应用程序示例,使用了本章前面介绍的 Tk 小部件。作者在讨论本章中介绍的 Tk 小部件时没有进行任何详细介绍;有关详细信息,您需要参考 Tcl/Tk 参考资料。他们的目标是为读者提供足够的信息,以便理解所提供的 Tk 示例代码。但是,请注意,提供的一些示例代码使用了文本中未解释的 Tk 小部件。
第 8 章“更多 Tk”继续本书对 Tk 的介绍。本章首先使用 Tk 组件设计一个表格小部件。接下来,设计了一个交互式 IP 路径跟踪图形,其中代码说明了如何在画布中注册和响应鼠标进入、移动和离开事件。本章的结尾讨论了 Itcl Mega-Widgets。这些是 Tk 的扩展小部件,随 Tickleman 软件包提供,或者可以从网上下载以与 Scotty 一起使用。作者首先以类似于第 7 章中介绍 Tk 小部件的方式讨论了几个 Mega-Widgets。然后,他们使用这些小部件重新实现了第 7 章前面开发的 StatusMgr 界面。
第 9 章讨论了使用 Tcl 的 socket 命令进行套接字编程。本章首先介绍了一些与 Tcl 套接字相关的命令,然后提供了一个非常简单的客户端/服务器示例。最后,作者描述了如何构建基于 Web 的界面,以便用户可以使用 Navigator 等浏览器查看网络管理数据。
本书的第三部分也是最后一部分使用前两部分中介绍的信息构建了四个完整的网络管理工具。第 10 章开发了一个响应时间监控工具。该工具收集以下统计信息:当前(上次测量)延迟、平均延迟、峰值延迟和已完成测试次数,作为被测设备可达性的指标。该工具能够同时监控多个网络设备,结果显示在本书前面开发的表格小部件中。
在第 11 章中,作者介绍并讨论了实现网络发现工具的代码。该代码基于 Tickleman,而不是 Scotty。作者在源代码中仔细指出了所有 SNMP 特定的地方;我认为这样做是为了识别那些使用 Scotty 的读者需要移植的代码部分。作者提供 Scotty 和 Tickleman 版本的代码可能会有所帮助。第 11 章代码密集;也许 90% 的章节由带注释的列表组成。
第 12 章讨论了另一个示例应用程序 StatusMgr。与第 11 章相反,本章不提供代码,仅描述程序的组织和控制流程,使其成为更轻松的阅读。StatusMgr 应用程序使用了前面章节中讨论和开发的代码,作者会告诉您在需要时在哪里查找。为了充分理解本章的效果,您可以从互联网上下载源代码,以便在阅读时浏览。
StatusMgr 似乎是一个严肃的网络管理工具,管理员应该会觉得有用。可以通过 Tk 用户界面从控制台或 X 终端访问应用程序数据,也可以通过 Web 浏览器通过 Web 访问。该应用程序显示设备网络可用性、重置计数、接口正常运行时间、接口利用率和接口丢弃等信息。它还能够报告哪些节点路由的 IP 流量最多,以及生成和接收的 IP 流量最多。该应用程序还报告过去 48 小时内的历史可用性信息。
读者应该会发现 StatusMgr 是添加自己的自定义网络管理功能的一个良好起点。用户界面的设计似乎适合扩展。(Tk 版本中的功能组组织为选项卡对话框。)由于您将拥有源代码和本书,您应该有足够的可用信息来调整代码并添加您自己的自定义功能。
第 13 章介绍了下一个完整的应用程序,一个 IP 路径跟踪工具。该工具类似于 traceroute,但存在显着差异。该应用程序不仅显示从源到目标的路由,还指示沿途的设备类型(例如,串行、以太网、令牌环)和每个链路的运行特性(例如,速度、设备供应商、每秒转发的数据包数)。路由以图形方式使用第 8 章中开发的代码进行描述,运行数据使用第 8 章中开发的简单表格小部件显示。该工具每 60 秒轮询一次运行数据,因此可以用于监控所描述链路的健康状况。作者谨慎地警告读者,该工具可能无法 100% 完成其工作。这是由于使用了 RFC 1213 IP 路由表,而不是 RFC 1354 中定义的较新的 IP 转发表。他们选择这样做是有逻辑原因的;在本书编写时,RFC 1354 尚未广泛部署。
本章组织良好,第一节概述了该工具。接下来的章节描述了跟踪 IP 路径、构建用户界面以及轮询路径上节点的运行状态的代码。
第 14 章讨论了 RMONv2,它可以用于应用程序级协议监控。这些工具可用于配置 RMONv2 并构建当前 RMONv2 探针配置的清单。
第 15 章是本书的最后一章。它描述了如何将 Tcl 插件用于 Netscape Navigator 和 Microsoft 的 Internet Explorer。提供了有关从互联网下载插件的信息。该插件基本上允许您的浏览器处理带有嵌入式 Tcl/Tk 脚本的 HTML 文档。作者简要概述了 Tcl 插件支持的安全策略,然后继续描述用于在 HTML 文档中嵌入 Tcl 代码的 <EMBED> HTML 标签。然后,作者提出了 Tcl 插件在网络管理中的两个实际用途。第一个是为基于服务器的管理应用程序提供图形前端,这意味着嵌入在 HTML 页面中的 Tcl 小程序可以通过套接字连接到主机以检索网络管理数据,然后小程序将呈现该数据。第二个用途是显示存储在基于服务器的文件或数据库中的网络管理报告数据的图表。提供了这两种嵌入式 Tcl 用途的示例,以及实现它们所需的代码。
附录 A 提供了一个 Tcl 脚本,该脚本创建了一个将 RMON 八位字节字符串映射到名称(例如 ether2.ip.tcp.kerberos)的表。此表定义了本章中开发的应用程序类型感兴趣配置的协议集。作者在第 14 章的开头开发了连接到设备并查询 RMONv2 以获取设备支持的协议的代码。然后在应用程序定义的表中搜索这些结果协议。此搜索的结果定义了 Tcl 应用程序可以探测的协议。接下来,开发了用于配置 RMONv2 协议分发控制表、地址映射控制表、主机控制表和矩阵控制表的脚本。最后,本章开发了访问每个表以获取数据的代码。例如,开发了可以使用协议分发控制表访问给定协议(例如,ether2.ip.tcp.nntp)的数据包和八位字节计数的代码。由于以前没有接触过 RMONv2,本章将提供对其功能的了解;查看相关的 RFC 将提供更全面的概述。我相信这是有意的,因为 RMON 不是本书的主要主题。对 RMONv2 矩阵组的讨论提供了配置 hiMatrixControlTable 的代码,但没有提供检索信息的代码。
本书提供了有关获取示例代码和 SNMP Tcl 扩展的说明。示例代码可从 Net Mgmt Solutions, Inc. 获得,需要登录名和密码,这些信息在本书的前言中提供。为了访问下载页面,您必须提供您的姓名、电话号码和电子邮件地址,就我而言,这有点过分了。就我个人而言,我认为本书应该附带包含 Tcl/Tk、Scotty 和示例代码最新版本的 CD 或软盘。Scotty 代码是从网上下载的。
本书全面概述了如何使用 Tcl/Tk 开发独立的和基于 Web 的网络管理工具。如果您是网络顾问或系统管理员,本书应该为您开发当前工具集中不存在的自定义工具提供一个良好的起点。作者提供了有关 Tcl/Tk 以及 Scotty 和 Tickleman SNMP 到 Tcl 的扩展的信息。有了这些信息,您应该能够从他们的任何示例应用程序的代码开始,并将其调整为您最需要的网络管理工具。
对于想要了解 Tcl/Tk 和 SNMP 的读者,我认为本书在一定程度上很有用。如果您不熟悉 SNMP 或网络技术,您可能需要在互联网上查找更完整的介绍。就 Tcl/Tk 而言,本书在描述事物方面做得相当不错,但最终您将需要用 Tcl 参考资料或编程入门书来补充它。作者(在第 15 章末尾)列出了提供有关 SNMP、Tcl/Tk 和一般网络管理信息的其他书籍、新闻组和网站。
