最近3个月比较闲,主要就做了下telnet协议的还原,但效果还是不理想。
目前的telnet协议还原程序的主要问题如下:
1、协议合法性检查不够,将很多不属于telnet协议的东西也当telnet处理了(如占用了23端口的某些bt协议)
2、用户名和密码的获取效果不理想(虽然用户名密码确实难以完美的提取到,但我的提取过程还是需要改进)
由于先前的架构,将网络状况考虑得过于理想,导致最近几个星期程序都在打补丁,而这个架构貌似不太适应现在的需求。也想过要推翻重来,但有时候想,编程序不是非常注重可重用性吗?我这么一个程序的改版都要那么跳跃式发展。。
但昨晚稍微想了下,觉得整个构架还是动下大手笔比较好~~希望时间还来得及~~
新版telnet还原大概遵循如下原则:
i)与其他程序接口不变
ii)首先做到利用状态机处理telnet流(不以包为记录边界)
iii)利用选项协商能确定当前的23端口会话是否是传统的telnet会话。
iv)避免产生垃圾文件(未插入数据库的文件)
PS:对于应用层协议还原我一直存在一个误区,认为如果客户端的请求和服务器端的响应包要结合起来处理的话,必须先把客户端的请求包和服务器端的响应包统一排序(根据seq)。事实上,这是一种极为错误的观点,要将请求和响应结合起来,只需交替在客户端或服务器端寻找想要的数据即可,如对于这样一个交互过程"C: USER bripengandre S:+250 OK C: PASS XXX S:+250 OK",我们只需先在客户端请求包中寻找USER,然后再到服务器端响应包中寻找“+250 OK”,接着再到客户端请求包中寻找PASS,如此循环。如果处理的会话不符合协议流程,则可丢掉这个会话,因为以我们掌握的信息是难以再准确还原出这个会话了(即算网络中的这个会话是正常的,只是我们抓包出问题了,如处理没跟上)。另外,TCP的发送缓冲区和接收缓冲区显然是分开的,我们写应用层协议程序时,遵循的流程也和上述提到的第二种方法类似。。
但愿我能把那个可恶的telnet还原程序改好^_^
目前的telnet协议还原程序的主要问题如下:
1、协议合法性检查不够,将很多不属于telnet协议的东西也当telnet处理了(如占用了23端口的某些bt协议)
2、用户名和密码的获取效果不理想(虽然用户名密码确实难以完美的提取到,但我的提取过程还是需要改进)
由于先前的架构,将网络状况考虑得过于理想,导致最近几个星期程序都在打补丁,而这个架构貌似不太适应现在的需求。也想过要推翻重来,但有时候想,编程序不是非常注重可重用性吗?我这么一个程序的改版都要那么跳跃式发展。。
但昨晚稍微想了下,觉得整个构架还是动下大手笔比较好~~希望时间还来得及~~
新版telnet还原大概遵循如下原则:
i)与其他程序接口不变
ii)首先做到利用状态机处理telnet流(不以包为记录边界)
iii)利用选项协商能确定当前的23端口会话是否是传统的telnet会话。
iv)避免产生垃圾文件(未插入数据库的文件)
PS:对于应用层协议还原我一直存在一个误区,认为如果客户端的请求和服务器端的响应包要结合起来处理的话,必须先把客户端的请求包和服务器端的响应包统一排序(根据seq)。事实上,这是一种极为错误的观点,要将请求和响应结合起来,只需交替在客户端或服务器端寻找想要的数据即可,如对于这样一个交互过程"C: USER bripengandre S:+250 OK C: PASS XXX S:+250 OK",我们只需先在客户端请求包中寻找USER,然后再到服务器端响应包中寻找“+250 OK”,接着再到客户端请求包中寻找PASS,如此循环。如果处理的会话不符合协议流程,则可丢掉这个会话,因为以我们掌握的信息是难以再准确还原出这个会话了(即算网络中的这个会话是正常的,只是我们抓包出问题了,如处理没跟上)。另外,TCP的发送缓冲区和接收缓冲区显然是分开的,我们写应用层协议程序时,遵循的流程也和上述提到的第二种方法类似。。
但愿我能把那个可恶的telnet还原程序改好^_^