欢迎来到天天文库
浏览记录
ID:38636135
大小:629.00 KB
页数:21页
时间:2019-06-16
《VC299基于半打开的端口扫描技术的实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、VC299基于半打开的端口扫描技术的实现
2 需求分析2.1 端口扫描器的总体要求2.1.1 设计背景该端口扫描器是面向普通用户使用,以期成为一个普通用户用来检测端口网络主机端口并有效地保护自己。在采用SYN刺探方式进行扫描的基础上成为一个基于半打开的实用、简单、方便的端口扫描工具。2.1.2 用户特点由于该端口扫描系统是一个基于半打开的端口扫描器,其面向的是普通的对于端口扫描有需求的用户,因此需要提供一个简洁、方便、高效的界面和功能。2.1.3 
2、;软件开发及运行环境系统开发工具:VisualC++6.02.2 端口扫描器的需求分析端口扫描器的一般需求:(1)隐蔽性需求作为扫描的一方来说,端口扫描除了要能扫出目标主机的端口信息以外,还需要能有一定的隐蔽性,以最大的可能不在目标主机留下访问信息。如果仍然采用基于TCPconnect()的扫描则将很容易被目标主机记录,因此从隐蔽性上考虑SYN半打开扫描或者FIN扫描会是很好的选择。(2)端口选择需求当我们在使用扫描软件对目标主机进行扫描的时候,有的时候是有目的性地扫描目标主机的某
3、一个端口,然而在大部分时候却需要扫描批量端口或者是一些重要的指定端口。这个时候需要端口扫描系统具有自定义端口列表的功能。(3)扫描结果存储需求在进行完一次端口扫描之后,需要对结果进行保存。无论是攻击还是检测,端口扫描器是需要与其他的一些工具配合到一起使用的,所以要求端口扫描器一定要具有存储结果的功能,以将扫描得到的目标主机端口信息保存下来。3 端口扫描器的实现3.1 功能模块简介所完成的端口扫描器的界面如图1所示,相关功能介绍如下: 图1 端口扫描器功
4、能界面目标IP范围选择模块:选择起始IP和结束IP以确定目标IP的范围。端口范围选择模块:自定义起始端口和结束端口以确定扫描范围。扫描结果存储模块:自定义扫描结果的显示方式,或将扫描结果保存下来。自定义默认端口列表模块:对默认的重要端口进行添加或删除以更符合扫描需要。3.2 程序实现流程程序实现的流程如图2所示:
图2 程序实现流程图主函数首先创建一个侦听线程以准备获得返回信息。然后调用FillLocalIP函数将本地IP写入IP列表中,接着读取要扫描
5、的IP和端口,判断是否是本地IP,若是则调用函数scanlocal对本地IP和端口发起连接并获得扫描结果;如果不是本地IP就调用scan函数对远程IP发送SYN包,并通过创建的套接字rawsock得到从系统中返回的信息,分析数据后得到扫描结果。最后将扫描的结果插入结果树中排序并可保存为文本文件。3.3 SYN探测的实现定义了一个线程体ScanStart调用其他的函数来实现端口扫描。(1)DWORD WINAPI ScanStart(LPVOIDlpvoid){CDWordArr
6、ay& CPortList=*lpPortList;//为侦听线程分配句柄空间*handle=(HANDLE*)malloc(sizeof(HANDLE)*(numadapter-1));//为LocalIP分配空间*lpLocalIP=(ULONG*)malloc(sizeof(ULONG)*numadapter); HANDLE* hListen=*handle;//创建侦听线程每块网卡绑定一个线程while(InforL.num>=0)
7、>{ hListen[InforL.num]=CreateThread(NULL,0,ListeningFunc,&InforL,NULL,NULL);//创建一个嗅包的线程,分析接收到的包。 if(hListen[InforL.num]==NULL) { AfxMessageBox("创建侦听线程失败!"); } Sleep(500);
8、 //Sleep0.5s.使ListeningFunc线程初始化完毕. InforL.num--
此文档下载收益归作者所有