端口扫描设计过程(一)
目标
或许在有像nmap这样功能强大的扫描工具的今天,我们根本没必要考虑再设计一个功能可能不成熟的扫描工具。但是当你希望做到下面的几点时你就有必要进一步思考一个扫描工具的设计过程或者继续阅读这篇文档。
•我希望这个扫描工具的开发过程是易理解的,我即使不用阅读文档都能完全看懂源代码。良好的设计是可以做到这一点,这也是这个项目的主要目标之一;
•我希望了解扫描技术,操作系统的安全策略,防火墙针对扫描的安全策略。虽然这一系列的文章目标不在于提供安全策略的详细描述,但是只要是与项目有关的技术,文章中都会有所介绍。
•我希望低成本地定制自己的开发环境,以简化我的开发过程。系列文章中会介绍一些作者认为较好的开源框架在针对该项目的应用。
如果你有上述的需求,我强烈建议阅读这系列的文章。而且,我希望你能随时向作者提供反馈,只有大家的反馈,作者才会有继续写下去的动力。
适宜读者
很遗憾,这一系列的文章不是所有人都适宜阅读的,作者假设你具备下面的基础。
•Java语言及面向对象技术
•设计模式,UML
•TCP/IP协议簇,接入互联网技术
•操作系统,尤其是Windows系统
•常见防火墙
不过,绝对不要认为你需要一下子精通上面的所有的基础知识,作者会在不同的文档中要求读者有不同的相应技术基础,你可以在每篇文档的“适宜读者”一小节中获取该文档的知识基础。而且,针对那些不同需求的人阅读这一系列文章中,可能只会对特定的文档感兴趣。对于他们,具备的基础知识只要是他感兴趣的就可以了。
开发前的几句话
测试驱动开发与模型驱动开发
我们是采用极限编程中推荐的测试驱动开发,还是基于UML的模型驱动开发呢?这一个问题会贯穿于该系列的文档中。基本思路是当面对复杂的问题时,我们会先建立模型,然后再编码。而针对简单的问题,或者可以从复杂的问题解脱出来获得一个简单的原型时就会对其先写单元测试,然后实现它,并不断重构代码。
并行处理
如果我们的目标是扫描大型网络,并希望结合各种扫描技术以做到高确度的扫描。此时,我就必须引进并行处理,并会为扫描任务建模,从而做到均分任务,同时项目的目标是任务能协作完成。即没完成的任务,可以获取已完成任务的资源继续运行。而且,项目的目标还包括可以在分布式环境下完成扫描任务。不过,这不容易,到目前为止,作者已经尝试了很多种并行处理解决方案。主要的难点就是:同步数据,任务模型的确定或/以及对已有的解决方案的集成工作。
界面,数据持久化
在项目的目标中,强调软件的核心模块不依赖于特定的界面,也不依赖于特定的数据持久化解决方案。所以开发过程中会对软件核心与界面,数据持久化的映射工作大做文章。
对界面的目标是能快速的从命令行程序转化为桌面、Web应用。对数据持久化的主要方向将是XML。
扫描技术
项目的目标不是实现当今社会的所有扫描技术,也没有打算探索新的扫描技术。而是,希望通过软件设计方法提供一个可以与并行处理机制相互兼容的同时又可扩展的扫描技术框架。不难分析出,很多的扫描技术它们是极其相似,或者它们在发送包或对响应包的处理中某个部分是极其相似的。很多扫描技术是以前的扫描技术的变种。我们完全可以利用良好的设计来减少代码的重复并提高易读性。
但这并不容易。所有的扫描技术都依赖于特定的操作系统、特定的网络环境及特定的用户权限。我们必须将依据上述的不同情况分门别类进行处理。而且,很多扫描技术的依赖条件可以提前统一分析。比如,确定操作系统就可以在分配到目标IP就可以开始进行,而不应该细分到在特定的IP与端口之后再确定。这就使得并行处理的事务精度更加难以确定。显然,不能把针对一个IP、一个端口、一种扫描技术的扫描作为并行处理调度的最小单位!
工具
项目的目标不是让软件从0开始进行开发,而是利用大量现有的工具简化开发流程。开发过程中所使用的所有工具都是来自网络的开源项目,系列文章中更加关注的是如何集成这些开源项目。其中就包括,工具的选择、扩展、集成等问题。使用这些工具,将解决并行处理、命令解析、数据访问等问题。
反馈
“开发前的几句话”,这一小节是本文最需要反馈的部分。希望大家能提供宝贵意见,以让我及时更新本文,使其更加成熟,使本文具有活跃的生命力。
下一篇
下一篇将搜集用户素材,并对其进行整理。这是为了做需求分析而进行的准备工作。或许,通过用户素材我们可以看到软件的结构。
联系作者
你可以通过邮件:ruyunrufeng126@163.com联系到我。欢迎大家,把反馈意见发到我到的邮箱中。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ruyun126/archive/2009/09/11/4542756.aspx