当前位置:文档之家› 端口扫描实验报告 杨青

端口扫描实验报告 杨青

实验报告题目:端口扫描实验学校:**************班级:******学号:学生姓名杨:指导教师:2014年12月8日一、综合实验的目的与要求1.任务:设计并实现一个端口扫描程序,检测某个IP或某段IP的计算机的端口工作情况。

2.目的:加深对课堂讲授知识的理解,熟练掌握基本的网络编程技术和方法,建立网络编程整体概念,使得学生初步具有研究、设计、编制和调试网络程序的能力。

3.要求:熟悉有关定义、概念和实现算法,设计出程序流程框图和数据结构,编写出完整的源程序,基本功能完善,方便易用,操作无误。

4.学生要求人数:1人。

二、综合实验正文1.端口扫描器功能简介:服务器上所开放的端口就是潜在的通信通道,也就是一个入侵通道。

对目标计算机进行端口扫描,能得到许多有用的信息,进行端口扫描的方法很多,可以是手工进行扫描、也可以用端口扫描软件进行。

扫描器通过选用远程TCP/IP不同的端口的服务,并记录目标给予的回答,通过这种方法可以搜集到很多关于目标主机的各种有用的信息,例如远程系统是否支持匿名登陆、是否存在可写的FTP目录、是否开放TELNET 服务和HTTPD服务等。

2.实验所用的端口扫描技术:端口扫描技术有TCP connect()扫描、TCP SYN扫描、TCP FIN 扫描、IP段扫描等等。

本次实验所用的技术是TCP connect()扫描,这是最基本的TCP 扫描,操作系统提供的connect()系统调用可以用来与每一个感兴趣的目标计算机的端口进行连接。

如果端口处于侦听状态,那么connect()就能成功。

否则,这个端口是不能用的,即没有提供服务。

这个技术的一个最大的优点是,你不需要任何权限。

系统中的任何用户都有权利使用这个调用。

3.实验具体实现方案:编写一个端口扫描程序,能够显示某个IP或某段IP的计算机的某一个或某些端口是否正在工作。

基本工作过程如下:(1) 设定好一定的端口扫描范围;(2) 设定每个端口扫描的次数,因为有可能有的端口一次扫描可能不通;(3) 创建socket,通过socket的connect方法来连接远程IP地址以及对应的端口;(4) 如果返回false,表示端口没有开放,否则端口开放。

4.有关TCP/IP的知识:4.1套接字概念1)在网络中要全局地标识一个参与通信的进程,需要采用三元组:协议、主机IP地址、端口号。

2)要描述两个应用进程之间的端到端的通信关联则需要一个五元组:协议、信源机IP地址、信源应用进程端口、信宿机IP地址、信宿应用进程端口。

3)套接字可以理解为通信连接的一端,其主要包括协议、主机IP地址和端口号。

4)将两个套接字连接到一起便可以在不同应用进程之间传递数据5)套接字实现了对网络和传输层协议的封装,为应用进程之间的通信连接的建立、数据传输等通信过程提供了编程界面。

4.2套接字编程的具体地位4.3 面向连接的客户机/服务器程序工作模型:本次实验所用到的知识仅仅是上图所示的一部分,先是建立socket,然后connect连接。

5.实验流程图:三、综合实验总结或结论1)本机多端口的扫描,单IP的扫描:首先获得本机已经打开的端口号,在Windows + R->cmd->netstat -na->enter 得到具体端口信息如下:有端口135、445、6001等端口是处于打开状态,故可设计132~139检测数据。

IP地址如下:127.0.0.1.输入数据,扫描即可开始:扫描结果如下:显示了从开始扫描到结束扫描的结果。

分析:127.0.0.1为是回送地址,指本地机。

只有135端口是打开的。

四、参考文献[1] 肖微.《端口扫描技术的原理及应用》.网络安全技术与应用.2006.10.[2] 刘咏.《网络安全性能测试平台之端口扫描研究及实现》.四川大学工程硕士学位论文.2005.11.附录#include <winsock2.h>#include <windef.h>#include <iostream>#include <vector>#pragma comment(lib,"ws2_32.lib")using namespace std;typedef unsigned int uint;vector<uint> v;intmain(){WORD wsVersion = MAKEWORD(2,0); //socket的版本WSADATA wsaData; //这个结构被用来存储被WSAStartup函数调用后返回的Windows Sockets数据。

它包含Winsock.dll 执行的数据。

struct sockaddr_in sin; //sockaddr_in结构,表示socket address and internet styleuint BeginPort; //开始端口uint EndPort; //结束端口uint CurrentPort; //正在扫描的端口uint i=0;char HostName[256]; //要扫描的主机SOCKET s; //保存创建socket时的返回值/////////////////////////////////////////////创建一个套接口。

#include <winsock.h> SOCKET PASCAL FAR socket( int af, int type, int protocol);//af:一个地址描述。

目前仅支持AF_INET格式,也就是说ARPA Internet地址格式type:新套接口的类型描述。

//protocol:套接口所用的协议。

如调用者不想指定,可用0。

///////该函数如果调用成功就返回新创建的套接字的描述符int OpenPort; //开放端口个数OpenPort = 0;cout<<"Please input the HostName:";cin>>HostName;cout<<"Input the Begin Port:";cin>>BeginPort;cout<<"Input the End port:";cin>>EndPort;//对用户输入的端口进行判断while((BeginPort > EndPort || BeginPort < 0 || BeginPort >65535 || EndPort <0 || EndPort >65535)){cout<<"You have input some wrong paramters.Try again."<<endl;cout<<"Please input the HostName:";cin>>HostName;cout<<"Input the Begin Port:";cin>>BeginPort;cout<<"Input the End port:";cin>>EndPort;}if(WSAStartup(wsVersion,&wsaData)){cout<<"Initial Failed!"<<endl; return -1;}cout<<endl<<"Now Scan "<<HostName<<"'s Specified Ports Status."<<endl<<endl;//循环判断范围内的端口,以判断端口是否开放,并记录结果for(CurrentPort=BeginPort; CurrentPort<=EndPort;++CurrentPort){s = socket(AF_INET,SOCK_STREAM,0); //s用来记录socket的返回值。

if(s == INVALID_SOCKET){cout<<"Establish Socket Failed."<<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,(struct sockaddr*)&sin,sizeof(sin)) == SOCKET_ERROR){cout<<"Port: "<<CurrentPort<<", Status: Not open."<<endl;closesocket(s);//连接失败}else{cout<<"Port: "<<CurrentPort<<", Status: Opened."<<endl;OpenPort ++;v.push_back(CurrentPort);//用于数值的自动增加vector(uint)vclosesocket(s);}}cout<<endl<<"Resaults: Host "<<HostName<<" has opened "<<OpenPort<<" port.Opened port as follow:"<<endl;cout<<"============================================================= ======="<<endl;for(i=0;i<v.size();++i){cout<<v.at(i)<<" ";if((i+1)%10==0)cout<<endl;}cout<<endl;cout<<"============================================================= ======="<<endl;closesocket(s);WSACleanup();return 0;}。

相关主题