我想在Python中编写一个简单的命令行代理,以便位于Telnet/SSH连接和本地串行接口之间.应用程序应该简单地在两者之间桥接I/O,但过滤掉某些不允许的字符串(由正则表达式匹配).(这适用于路由器/交换机实验室,在该实验室中,用户可以远程串行访问这些盒子.)
基本上,客户端建立了与守护进程的Telnet或SSH连接.守护进程将客户端的输入传递出去(例如)/ dev/ttyS0,并将来自ttyS0的输入传递回客户端.但是,我希望能够将来自客户端的某些字符串列入黑名单.例如,不应该允许命令'delete foo'.
我不确定如何最好地接近这个.沟通必须是异步的; 我不能简单地等待回车以允许缓冲区从串行接口输出.将正则表达式与流匹配似乎也很棘手,因为必须截获以下所有内容:
delete foo(enter) del foo(enter) el foo(ctrl+a)d(enter) dl(left)e(right) foo(enter)
......等等.唯一可靠的分隔符是CR/LF.
我希望有人能指出我正确的方向.我一直在浏览Python模块,但到目前为止还没有提出任何建议.
Python不是我的主要语言,因此我将把这部分答案留给其他人.不过,我做了很多安全工作,我会敦促采用"白名单"方法,而不是"黑名单"方法.换句话说,选择一组安全命令并禁止所有其他命令.这比试图考虑所有恶意可能性并防范所有这些可能性要容易得多.