在WINDOWS平台用python实现自己的TELNET和SSH服务器(一)
(2013-02-19 17:18:29)
标签:
pythontelnetwindows中转it |
分类: python |
近期有个想法,想自己做一个TELNET服务器,在这个服务器上可以实现一个中转机的功能,即登录上这台服务器后可以使用telnet或者ssh命令转登录到其它设备。之所以要自己实现是为了实现对中转的完全控制,我可以记录用户在这个TELNET服务器上的所有操作,包括他登录了哪些设备,在设备上执行了哪些命令,甚至可以对其执行的命令进行控制,禁止其执行某些敏感命令。经过几天的调试终于做出了一个初步可用的东西,虽然还有点瑕疵,但毕竟可用了,写出来供有兴趣的人参考。
1、首先构建一个TELNET服务器的框架,这是以后一切工作的基础。
在www.python.org上用PYPI上进行查找,找到的大多是工作在UNIX上的,为WINDOWS定制的少之又少。最后我选了telnetsrv这个库。不过这个库默认情况下在WINDOWS下也是无法运行的,需要安装几个其它的库。主要是解决curse的依赖问题,到http://www.lfd.uci.edu/~gohlke/pythonlibs/#curses下载一个,安装之后就可以了。另外要注意在选择Handler时不要用Green,而要用Threaded,虽然Threaded只支持一个客户端连接,但这是在UNIX的情况下,在WINDOWS下我们的TelnetServer只要从SocketServer.ThreadingTCPServer派生就可以了(官方示例上是从SocketServer.TCPServer派生的,所以只支持一个客户端连接),具体代码如下:
from telnetsrv.threaded import TelnetHandler, command
import socket,threading
import SocketServer
class MyTelnetHandler(TelnetHandler):
class TelnetServer(SocketServer.ThreadingTCPServer):
if __name__ == '__main__':
自己试运行一下,服务器监听8023端口,一个框架就这样搭建好了,很简单的http://www/uc/myshow/blog/misc/gif/E___6724EN00SIGG.gif。
这里面有个小问题,就是如果输入删除键或者退格键会导致服务器出错,从而中止连接,只可能是我们的cursse不这么给力的原因,为此我们需要修改一个telnetsrv的源代码,在telnetsrvlib.py这个文件找到类TelnetHandlerBase里面有个setterm函数,在这个函数的最后加上这几句: