欢迎来到天天文库
浏览记录
ID:11216521
大小:42.00 KB
页数:4页
时间:2018-07-10
《实验三 端口扫描实验》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、网络程序设计实验报告实验名称:winsock端口扫描试验指导教师:贾浩专业班级:姓名:学号:实验地点:实验日期:实验成绩:________________4一、实验目的l了解端口扫描的基本概念和工作原理;二、实验设计(一)实验要求如下:编写一个利用全连接的端口扫描程序,能显示目标主机的端口开放情况。要求能在命令行输入要扫描的目标主机和端口范围。比如:scan*.*.*.*nnnn-mmmm。(二)、设计:1、字符串处理。实验中需要对用户输入的字符串进行处理,从中获取到要扫面的IP地址和端口号范围。可先用一个字符串
2、保存整个命令语句,然后检测到其中的第一个空格和第二个空格,在两个空格之中的内容即是需要检测的IP地址,然后获取到第二个空格和第一个横线之间的内容,并将其转换为整型数据,此为需要扫描的端口的起始端口号,最后获取到横线之后的数据,将其转化为整型数据,即需要扫面端口的终止端口号。2、设计主程序。先创建一个TCP类型的套接字,将其绑定到本地地址,然后将要发送数据的IP地址设置为从用户命令中获取到的数据,紧接着在一个循环中,将在需要扫描的端口的范围内的数据依次赋值给要发送数据的端口号,然后调用connect函数,并等待对方
3、响应连接,若得到响应则表示该端口正常开启,否则表示该端口关闭,并在控制台中打印其开关情况。3、程序流程图如下:扫描端口程序流程图4三、实验过程1.针对实验要求设计代码2.编写代码实现要求3.实验结果全开扫描:半开扫描:四、讨论与分析1.阐述全连接扫描的原理。答:全连接扫描是TCP端口扫描的基础,现有的全连接扫描有TCPconnect()扫描和TCP反向ident扫描等。其中TCPconnect()扫描的实现原理如下所述:扫描主机通过TCP/IP协议的三次握手与目标主机的指定端口建立一次完整的连接。连接由系统调用c
4、onnect开始。如果端口开放,则连接将建立成功;否则,若返回-1则表示端口关闭。建立连接成功:响应扫描主机的SYN/ACK连接请求,这一响应表明目标端口处于监听(打开)的状态。如果目标端口处于关闭状态,则目标主机会向扫描主机发送RST的响应。2.你的程序是否考虑了扫描效率?如没有考虑你准备如何改进?答:我的程序使用的全连接扫描,没有考虑扫描效率。可以尝试使用半连接扫描,若端口扫描没有完成一个完整的TCP连接,在扫描主机和目标主机的一指定端口建立连接时候只完成了前两次握手,在第三步时,扫描主机中断了本次连接,使连
5、接没有完全建立起来,这样的端口扫描称为半连接扫描,也称为间接扫描。使用这种连接的优点在于即使日志中对扫描有所记录,但是尝试进行连接的记录也要比全扫描少得多,从而提高了扫描效率。五、实验者自评通过本次实验,对端口扫描的基本概念和常用的基本方法有了熟悉和掌握,尤其是对全连接扫描和半连接扫描有了深入的认识,其各自的实现方法和优缺点也有所了解。对基本的windsockAPI函数的使用方法和实现原理有了更深入的了解,对TCP客户端编程有了更深刻的理解。在实验过程中,熟悉了网络编程方法,尤其是查阅资料并熟悉了TCP建立连接的
6、三次握手过程,重新温习了对字符串的操作,对自己的编程动手能力有了较好的锻炼和提高。通过完成实验,对TCP编程的知识有了进一步了解,重新认识了其重要性,并对课堂上学习的知识进行了巩固。在实验过程中,我认真对待,态度积极,独立了完成实验任务。4三、附录:关键代码//填写远程地址信息sockaddr_inaddr;addr.sin_family=AF_INET;//设置获取的用户输入IP地址为远程IP地址addr.sin_addr.S_un.S_addr=inet_addr(strIP);for(i=atoi(star
7、Port);i<=atoi(endPort);i++){//没扫描一个端口创建一个新的套接字SOCKETs=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//如果套接字创建失败则返回错误if(s==INVALID_SOCKET){printf("Failedsocket()%d",::WSAGetLastError());return-1;}//设置远程地址信息中的端口号为需要扫描的当前端口号addr.sin_port=htons(i);//连接设置好的远程地址,如果连接
8、失败则表示端口关闭if(::connect(s,(sockaddr*)&addr,sizeof(addr))==-1){printf("%s:%d端口关闭",strIP,i);}//连接成功则表示端口开启else{printf("%s:%d端口开启",strIP,i);}::closesocket(s);}4
此文档下载收益归作者所有