linux putty源码解析,兑现命令拦截

linux putty源码解析,实现命令拦截
本帖最后由 woshiyipihaoma 于 2011-03-29 15:04:41 编辑 最近在研究linux下的开源putty,用putty连接上远程主机后,通过命令行来操控远程主机,想实现命令拦截的功能
代码越看越困惑,始终找不到输入的命令和执行命令交互的代码,望热心的朋友指点解惑,谢谢关注
如下图,用root用户登录后,输入 ls 命令查看,怎样拦截 ls 命令的执行

调试ssh.c 源码发现,do_ssh2_authconn 函数能对命令行的每个字符输入进行相应,包括输入一个完整的命令字符串后回车的响应,但是始终找不到回车后调用命令的代码


------解决方案--------------------
经过putty源码的反复调试和分析,发现putty是获取键盘的输入,然后一个一个字符通过ssh服务程序传到Linux的控制台,执行结果再由ssh服务程序发回来。
这样要实现命令拦截, 就要把它接收到键盘的输入字符,保存到一个全局的命令缓冲区,屏蔽其原来提交单个字符到控制台的动作,直到接收回车字符后,把命令缓冲区里的所有字符拼接为一个命令字符串,一次性提交到控制台。
以上方法经过修改其源码,证明了是可行的。目前存在一个控制台不能即时显示命令的问题,如dir命令,依次输入dir,控制台窗口看不到这些字符,输入回车后控制台显示dir命令和其执行的结果。

命令拦截的关键源文件和函数
gtkwin.c //控制台窗口源文件
//键盘事件函数
gint key_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
//提交命令字符到控制台函数 
void luni_send(void *, wchar_t * widebuf, int len, int interactive);

------解决方案--------------------
顶了。。。。
------解决方案--------------------
引用:
经过putty源码的反复调试和分析,发现putty是获取键盘的输入,然后一个一个字符通过ssh服务程序传到Linux的控制台,执行结果再由ssh服务程序发回来。
这样要实现命令拦截, 就要把它接收到键盘的输入字符,保存到一个全局的命令缓冲区,屏蔽其原来提交单个字符到控制台的动作,直到接收回车字符后,把命令缓冲区里的所有字符拼接为一个命令字符串,一次性提交到控制台。
以上方法经过修改其源码,证明……

发现用gdb调试  不好用
研究的怎么样了  没有找到再哪里接收数据的
------解决方案--------------------
期待你有新的发现,
打算把pscp.c中的默认用-pw记录密码的功能来生成密钥..那样可以省去输入密码...写死就好了...还要读好多啊..(我这样做是很不安全的..我知道)
------解决方案--------------------
plink 不能自动保存hostkey 这点在服务器数量很多的时候很不方便,而且官网写了不会支持,只能自己改造了