使用 Twisted 框架进行网络编程,第 4 部分
2008-11-13 13:13:47 来源:WEB开发网SSH Weblog 客户机
下面接着讨论本系列文章的例子,我创建了一个工具,用来检查我的 Web 服务器 log 文件中的点击率,不过这次是在一条加密的 SSH 通道上完成的。这个目标实际上也是现实的 -- 也许我不希望监听我的数据包流的人公然看到我的点击率。
Twisted 包自身并没有相应的支持模块,显然也没有确切的文档来说明其原理。在深入工作之前,我需要弄清楚 twisted.conch 包中的 import Crypto 那一行究竟有什么用处。它的名字显然是一种提示,不过我对由 Andrew Kuchling 维护的 Python 加密库也有一定程度的了解(请看 参考资料中的链接)。搜索一下Google,下载,然后安装,Twisted 的 test_conch.py 就很顺利地运行起来了。这样就可以开始创建定制的 SSH 客户机了。
我是基于 Twisted 文件 doc/examples/sshsimpleclient.py 中提供的例子创建客户机的;您也许还想看看那个例子中还有些什么。twisted.conch 像大多数 Twisted 组件一样,包含若干层,其中的每一层都是可以定制的。我猜想“conch”这个名字在安全 Shell 的世界中代替了“shell”的角色。
传输层是一个定制的 SSHClientTransport 。我们可以定义若干个方法,不过至少需要定义 .verifyHostKey() 和 .connectionSecure() 。在实现时,我们完全信任所有的主机密钥,只是通过返回一个 defer.succeed 对象,将控制交回给异步反应器(reactor)的核心。当然了,如果您打算根据已知密钥验证某台主机,您可以在 .verifyHostKey() 中实现。
创建通道的过程也就是其他几层加入进来的时候。 SSHUserAuthClient 的子类完成实际的登录认证工作;如果认证成功,它就建立起一条连接(我将连接定义为 SSHConnection 的子类)。这条连接紧接着创建一个通道——即 SSHChannel 的子类。我将这条通道简单命名为 Channel ,实际的定制工作正是通过它来完成的。明确地说就是,这条通道实现了数据和命令的发送与接受。下面让我们来看看我定制的客户机:
- ››使用脚本恢复WinXP系统的用户登录密码
- ››使用phpMyadmin创建数据库及独立数据库帐号
- ››使用Zend Framework框架中的Zend_Mail模块发送邮件...
- ››使用cout标准输出如何控制小数点后位数
- ››使用nofollow标签做SEO的技巧
- ››使用 WebSphere Message Broker 的 WebSphere Tra...
- ››使用SQL Server事件探查器做应用程序的性能分析
- ››使用SQL Server事件探查器分析死锁原因
- ››使用纯文本文件打造WCF服务
- ››使用 Dojo 开发定制 Business Space 小部件,第 4...
- ››使用 ADDRESS 与 INDIRECT函数查询信息
- ››使用 COLUMN函数编制单元信息
更多精彩
赞助商链接