您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 网络空间安全技术实践教程-10.1课件
网络空间安全技术实践教程第三篇网络安全理论与技术实验篇第十章网络安全编程实验10.1端口扫描器编程实验网络空间安全技术实践教程210.1端口扫描器编程实验实验目的:一个开放的网络端口就是一条与计算机进行通信的虚拟信道,网络攻击者通过对网络端口的扫描可以得到目标主机开放的网络服务程序,而网络安全防护者也可以通过扫描系统的端口,发现安全隐患;因此网络扫描器有着非常重要的地位。本次实验通过在理解扫描器原理的基础上,利用VS开发环境来编程实现一款简单的扫描器。网络空间安全技术实践教程310.1端口扫描器编程实验实验要点说明:(实验难点说明)VS的下载及安装理解扫描器的实现原理用不同的方式编程实现端口扫描器功能网络空间安全技术实践教程410.1端口扫描器编程实验实验准备:(实验环境,实验先有知识技术说明)操作系统Windows7及以上VS2010及以上开发环境网络空间安全技术实践教程510.1端口扫描器编程实验实验步骤:1)扫描器简要介绍(1)扫描技术的分类黑客攻击往往分为三个阶段:信息搜集,攻击实施,隐身巩固。在信息搜集阶段中,扫描器发挥着巨大作用。扫描器根据扫描技术来分可以分为:主机扫描技术、端口扫描技术、栈指纹OS识别技术、漏洞扫描技术。1主机扫描技术主机扫描的目的是确定在目标网络上的主机是否可达。这是信息收集的初级阶段,其效果直接影响到后续的扫描。网络空间安全技术实践教程610.1端口扫描器编程实验实验步骤:1)扫描器简要介绍2端口扫描技术确定目标主机可达后,使用端口扫描技术,发现目标主机的开放端口,包括网络协议和各种应用监听的端口。3栈指纹OS识别技术根据各个OS在TCP/IP协议栈实现上的不同特点,采用黑盒测试方法,通过研究其对各种探测的响应形成识别指纹,进而识别目标主机运行的操作系统。网络空间安全技术实践教程710.1端口扫描器编程实验实验步骤:1)扫描器简要介绍4漏洞扫描技术在端口扫描后得知目标主机开启的端口以及端口上的网络服务,将这些相关信息与网络漏洞扫描系统提供的漏洞库进行匹配,查看是否有满足匹配条件的漏洞存在。通过模拟黑客的攻击手法,对目标主机系统进行攻击性的安全漏洞扫描,如测试弱势口令等。若模拟攻击成功,则表明目标主机系统存在安全漏洞。而在上述4类扫描技术中,端口扫描是最常用的扫描手段。网络空间安全技术实践教程810.1端口扫描器编程实验实验步骤:1)扫描器简要介绍(2)扫描器实现原理通常人们将端口分为如下两类:公认端口和已注册端口。从0到1023,这些端口由IANA分配,通常只有系统进程可以使用它们,一些入侵者利用了这些端口,则潜在地控制了整个系统。从1024到65535,这些端口则不受IANA控制。端口扫描是向目标主机的TCP/IP服务端口发送探测数据包,并记录目标主机的响应的技术。通过分析响应来判断服务端口是打开还是关闭,就可以得知端口提供的服务或信息。扫描类型:可分为TCPconnect()扫描、半连接扫描和秘密扫描等。其中TCPconnect()扫描是端口扫描最基础的一种扫描方式。秘密扫描包含有TCPFIN扫描、TCPACK扫描等多种扫描方式。网络空间安全技术实践教程910.1端口扫描器编程实验实验步骤:1)扫描器简要介绍(2)扫描器实现原理1TCPconnect()扫描TCP连接扫描是向目标端口发送SYN报文,等待目标端口发送SYN/ACK报文,收到后向目标端口发送ACK报文,即著名的“三次握手”过程。在许多系统中只需调用connect()即可完成。优点:不需要任何权限。系统中的任何用户都有权利使用这个调用。另一个好处是速度,可以通过同时打开多个套接字,从而加速扫描。缺点:会在目标主机的日志记录中留下痕迹,易被发现,并且数据包会被过滤掉。目标主机的logs文件会显示一连串的连接和连接出错的服务信息,并且能很快地使它关闭。网络空间安全技术实践教程1010.1端口扫描器编程实验实验步骤:1)扫描器简要介绍(2)扫描器实现原理2TCPSYN扫描TCPSYN扫描(半开放扫描)就是利用3次握手的弱点来实现的。通过向远程主机的端口发送一个请求连接的SYN数据报文,如果没有收到目标主机的SYN/ACK确认报文,而是RST数据报文,就说明远程主机的这个端口没有打开。而如果收到远程主机的SYN/ACK应答,则说明远程主机端口开放。在收到远程主机的SYN/ACK后,不再做ACK应答,这样3次握手并没有完成,正常的TCP连接无法建立,因此,这个扫描信息不会被记入系统日志,不会在目标主机上留下记录。网络空间安全技术实践教程1110.1端口扫描器编程实验实验步骤:1)扫描器简要介绍(2)扫描器实现原理3秘密扫描端口扫描容易被在端口处监听的服务记录到日志中:这些服务监听到一个没有任何数据的连接,就记录一个错误。半开放扫描现在已经不是一种秘密,很多防火墙和路由器都有了相应的措施。这些防火墙和路由器会对一些指定的端口进行监视,将对这些端口的连接请求全部进行记录。秘密扫描能躲避IDS、防火墙、包过滤器和日志的审计,从而获取目标端口的开放或关闭的信息。由于没有TCP三次握手的任何部分所以无法被记录下来,比半连接扫描更为隐蔽。缺点:扫描结果的不可靠性会增加,而且扫描主机也需要构建自己的IP包。现有的秘密扫描有TCPFIN扫描、TCPACK扫描、NULL扫描、XMAS扫描和SYN/ACK扫描等。网络空间安全技术实践教程1210.1端口扫描器编程实验实验步骤:2)利用TCPconnect()实施端口扫描关键源码在Windows平台下实际编程过程中只要调用套接字的connect()函数,根据该函数执行的返回结果来判断是否连接成功,从而判定该端口是否开放。实现该函数的调用可以采用原始套接字,CSocket,CASynSocket等,同时也可选择阻塞模式或非阻塞模式来实现.(1)利用原始套接字编程实现扫描的控制台程序代码不需要输入,实现对给定IP:127.0.0.1(可根据目标在源代码中修改自己的IP地址),从1到200的端口进行Connect()连接,连接成功即表示该端口开放,否则为关闭。可以将这些代码放到一个cpp文件调试通过。网络空间安全技术实践教程1310.1端口扫描器编程实验实验步骤:2)利用TCPconnect()实施端口扫描关键源码#includewinsock2.h#include“stdio.h”#pragmacomment(lib,”ws2_32”)#includestdlib.h#includewindows.hvoidmain(){WSADATAws;SOCKETs;structsockaddr_inaddr;网络空间安全技术实践教程1410.1端口扫描器编程实验实验步骤:2)利用TCPconnect()实施端口扫描关键源码intRESULT;longlRESULT;for(inti=1;i200;i++){lRESULT=WSAStartup(0x0101,&ws);s=socket(PF_INET,SOCK_STREAM,0);addr.sin_family=PF_INET;addr.sin_addr.s_addr=inet_addr(“127.0.0.1”);addr.sin_port=htons(i);if(s==INVALID_SOCKET)break;网络空间安全技术实践教程1510.1端口扫描器编程实验实验步骤:2)利用TCPconnect()实施端口扫描关键源码RESULT=connect(s,(structsockaddr*)&addr,sizeof(addr));if(RESULT!=0)//连接失败,表明该端口没开放{printf(“127.0.0.1:%iinactive\n”,i);WSACleanup();}else{printf(“127.0.0.1:%iactive\n”,i);}closesocket(s);}}其具体的思路是首先申明一个Socket,给其相应的目标IP,目标端口赋值,然后调用Connect();其中端口号是一个for循环的控制变量。网络空间安全技术实践教程1610.1端口扫描器编程实验实验步骤:2)利用TCPconnect()实施端口扫描关键源码(2)利用CSocket实现扫描的关键代码举例CSocket的扫描设计思路与前面的例子一样的,关键是使用的形式不一样,具体的Socket创建和连接调用的关键代码如下:网络空间安全技术实践教程1710.1端口扫描器编程实验实验步骤:2)利用TCPconnect()实施端口扫描关键源码CSockettestSocekt;CStringtemp;for(i=1;i200;i++){testSocekt.Create();if(testSocekt.Connect(127.0.0.1,i)==1){temp.Format(%d%s,i,开放);AfxMessageBox(temp);}testSocekt.Close();}网络空间安全技术实践教程1810.1端口扫描器编程实验实验步骤:3)实现基于TCPconnect()的端口扫描软件以CSocket编程为例,使用VS2010进行MFC编程。(1)新建工程建立一个基于对话框的工程C**Scanner,注意在创建工程的时候需要勾选上包含WindowsSocket的头文件,否则后续编程在使用CSocket的时候会出现未定义的情况。建立成功后,设计好界面,如图10-1-2所示:其中“开放端口报告”下方的框选择VS工具栏中ListBox绘制。“输入IP地址”后面选择工具栏中IPAddressControl控件进行绘制。设计好后,分别给各个控件填上恰当的名字或者ID。网络空间安全技术实践教程1910.1端口扫描器编程实验实验步骤:3)实现基于TCPconnect()的端口扫描软件(2)为控件添加变量完成上述内容后,右键选择类向导,添加成员变量。如图10-1-3所示。网络空间安全技术实践教程20(3)实现扫描功能添加成员变量后,回到设计界面(图10-1-2),双击开始扫描按钮,进入代码编辑页。10.1端口扫描器编程实验实验步骤:3)实现基于TCPconnect()的端口扫描软件voidCJiaocaiScannerDlg::OnBnClickedButton1(){UpdateData(TRUE);WSADATAws;CSockettestSocket;structsockaddr_inaddr;CStringtemp;CStringipstr;CStringfini;BYTEnFild[4];网络空间安全技术实践教程2110.1端口扫描器编程实验实验步骤:3)实现基于TCPconnect()的端口扫描软件m_remoaddress.GetAddress(nFild[0],nFild[1],nFild[2],nFild[3]);//将ip控件内容强制转换ipstr.Format(%d.%d.%d.%d,nFild[0],nFild[1],nFild[2],nFild[3]);for(inti=m_startport;im_endport;i++){addr.sin_family=PF_INET;/*实现协议族,采用TCP/IP方式*/addr.sin_addr.S_un.S_addr=inet_addr(ipstr);/*目的IP地址*/addr.sin_port=htons(i);/*扫描端口号*/testSocket.Create();网络空间安全技术实践教程2210.1端口扫描器编程实验实验步骤:3)实现基于TCPconnect()的端口扫描软件if(testSocket.Connect(127.0.0.1,i)==1){/*端口开放成功*/temp.Format(%d%s,i,open);m_strmessage.AddString(temp);/*将扫描结果显示到列表框里面*/}else{temp.Format(%d%s,i,c
本文标题:网络空间安全技术实践教程-10.1课件
链接地址:https://www.777doc.com/doc-1743787 .html