端口扫描实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

综合实验报告(2010--2011年度第二学期)名称:网络综合实验题目:端口扫描程序院系:信息工程系班级:学号:学生姓名:指导教师:鲁斌李莉王晓霞张铭泉设计周数:2周成绩:日期:2011年7月1日1一、综合实验的目的与要求1.任务:设计并实现一个端口扫描程序,检测某个IP或某段IP的计算机的端口工作情况。2.目的:加深对课堂讲授知识的理解,熟练掌握基本的网络编程技术和方法,建立网络编程整体概念,使得学生初步具有研究、设计、编制和调试网络程序的能力。3.要求:熟悉有关定义、概念和实现算法,设计出程序流程框图和数据结构,编写出完整的源程序,基本功能完善,方便易用,操作无误。4.学生要求人数:1人。二、综合实验正文1.端口扫描器功能简介:服务器上所开放的端口就是潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息,进行端口扫描的方法很多,可以是手工进行扫描、也可以用端口扫描软件进行。扫描器通过选用远程TCP/IP不同的端口的服务,并记录目标给予的回答,通过这种方法可以搜集到很多关于目标主机的各种有用的信息,例如远程系统是否支持匿名登陆、是否存在可写的FTP目录、是否开放TELNET服务和HTTPD服务等。2.实验所用的端口扫描技术:端口扫描技术有TCPconnect()扫描、TCPSYN扫描、TCPFIN扫描、IP段扫描等等。本次实验所用的技术是TCPconnect()扫描,这是最基本的TCP扫描,操作系统提供的connect()系统调用可以用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能成功。否则,这个端口是不能用的,即没有提供服务。这个技术的一个最大的优点是,你不需要任何权限。系统中的任何用户都有权利使用这个调用。3.实验具体实现方案:编写一个端口扫描程序,能够显示某个IP或某段IP的计算机的某一个或某些端口是否正在工作。基本工作过程如下:(1)设定好一定的端口扫描范围;(2)设定每个端口扫描的次数,因为有可能有的端口一次扫描可能不通;(3)创建socket,通过socket的connect方法来连接远程IP地址以及对应的端口;(4)如果返回false,表示端口没有开放,否则端口开放。4.有关TCP/IP的知识:4.1套接字概念1)在网络中要全局地标识一个参与通信的进程,需要采用三元组:协议、主机IP地址、端口号。22)要描述两个应用进程之间的端到端的通信关联则需要一个五元组:协议、信源机IP地址、信源应用进程端口、信宿机IP地址、信宿应用进程端口。3)套接字可以理解为通信连接的一端,其主要包括协议、主机IP地址和端口号。4)将两个套接字连接到一起便可以在不同应用进程之间传递数据5)套接字实现了对网络和传输层协议的封装,为应用进程之间的通信连接的建立、数据传输等通信过程提供了编程界面。4.2套接字编程的具体地位4.3面向连接的客户机/服务器程序工作模型:3本次实验所用到的知识仅仅是上图所示的一部分,先是建立socket,然后connect连接。5.实验流程图:三、综合实验总结或结论1)本机多端口的扫描,单IP的扫描:首先获得本机已经打开的端口号,在Windows+R-cmd-netstat-na-enter得到具体端口信息如下:有端口135、445、6001等端口是处于打开状态,故可设计132~139检测数据。4IP地址如下:127.0.0.1.输入数据,扫描即可开始:扫描结果如下:显示了从开始扫描到结束扫描的结果。分析:127.0.0.1为是回送地址,指本地机。只有135端口是打开的。四、参考文献[1]肖微.《端口扫描技术的原理及应用》.网络安全技术与应用.2006.10.[2]刘咏.《网络安全性能测试平台之端口扫描研究及实现》.四川大学工程硕士学位论文.2005.11.附录#includewinsock2.h#includewindef.h#includeiostream#includevector#pragmacomment(lib,ws2_32.lib)usingnamespacestd;5typedefunsignedintuint;vectoruintv;intmain(){WORDwsVersion=MAKEWORD(2,0);//socket的版本WSADATAwsaData;//这个结构被用来存储被WSAStartup函数调用后返回的WindowsSockets数据。它包含Winsock.dll执行的数据。structsockaddr_insin;//sockaddr_in结构,表示socketaddressandinternetstyleuintBeginPort;//开始端口uintEndPort;//结束端口uintCurrentPort;//正在扫描的端口uinti=0;charHostName[256];//要扫描的主机SOCKETs;//保存创建socket时的返回值/////////////////////////////////////////////创建一个套接口。#includewinsock.hSOCKETPASCALFARsocket(intaf,inttype,intprotocol);//af:一个地址描述。目前仅支持AF_INET格式,也就是说ARPAInternet地址格式type:新套接口的类型描述。//protocol:套接口所用的协议。如调用者不想指定,可用0。///////该函数如果调用成功就返回新创建的套接字的描述符intOpenPort;//开放端口个数OpenPort=0;6coutPleaseinputtheHostName:;cinHostName;coutInputtheBeginPort:;cinBeginPort;coutInputtheEndport:;cinEndPort;//对用户输入的端口进行判断while((BeginPortEndPort||BeginPort0||BeginPort65535||EndPort0||EndPort65535)){coutYouhaveinputsomewrongparamters.Tryagain.endl;coutPleaseinputtheHostName:;cinHostName;coutInputtheBeginPort:;cinBeginPort;coutInputtheEndport:;cinEndPort;}if(WSAStartup(wsVersion,&wsaData)){coutInitialFailed!endl;return-1;}coutendlNowScanHostName'sSpecifiedPortsStatus.endlendl;//循环判断范围内的端口,以判断端口是否开放,并记录结果for(CurrentPort=BeginPort;CurrentPort=EndPort;++CurrentPort){s=socket(AF_INET,SOCK_STREAM,0);//s用来记录socket的返回值。if(s==INVALID_SOCKET)7{coutEstablishSocketFailed.endl;WSACleanup();}//给结构成员赋值sin.sin_family=AF_INET;//可能是硬件地址。。sin.sin_port=htons(CurrentPort);//当前扫描的端口号sin.sin_addr.S_un.S_addr=inet_addr(HostName);//输入ip地址用的//建立连结if(connect(s,(structsockaddr*)&sin,sizeof(sin))==SOCKET_ERROR){coutPort:CurrentPort,Status:Notopen.endl;closesocket(s);//连接失败}else{coutPort:CurrentPort,Status:Opened.endl;OpenPort++;v.push_back(CurrentPort);//用于数值的自动增加vector(uint)vclosesocket(s);}}coutendlResaults:HostHostNamehasopenedOpenPortport.Openedportasfollow:endl;cout====================================================================endl;for(i=0;iv.size();++i){8coutv.at(i);if((i+1)%10==0)coutendl;}coutendl;cout====================================================================endl;closesocket(s);WSACleanup();return0;}

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功