您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 发现服务器已开启的TCP服务课程设计
计算机网络课程设计报告题目发现服务器已开启的TCP服务成绩学院名称信息学院专业班级计科(高职)09-3学生姓名曹志先学号200903014113指导教师姚进二○一二年六月二十一日I目录1.课程设计的目的与任务...........................................................................................12.课程设计的内容.......................................................................................................12.1课题分析与设计.................................................................................................12.2.课题实现..............................................................................................................23.设计总结....................................................................................................................64.附录............................................................................................................................75.参考文献....................................................................................................................7山东轻工业学院信息学院11-12学年第2学期2009级计算机网络课程设计11.课程设计的目的与任务Internet是以客户机/服务器模式进行工作的,服务器在某些端口上开起一些网络服务,等侯客户端请求的到来。传输层提供的网络服务有TCP服务和UDP服务两种。传输层在网络体系结构中是承下启上的以层。可以把传输层下面的几层称作传输服务提供者(transportserviceprovider),上面的几层称着传输服务使用者(transportserviceuser)。传输层处于中间,它既使用传输服务提供者提供的服务,又为传输服务使用者提供服务。传输层是网络体系结构中最重要的一层,所以深入理解传输层的作用和协议,对于网络课程的学习极为关键。通过本课程设计的目标是熟悉TCP协议和端口的概念。2.课程设计的内容2.1.课题分析与设计1.选题方向及内容简介计算机网络是分布在不同地理位置的多台独立计算机系统的集合,其目的是共享计算机资源。计算机网络环境中进程间的通信采用客户机/服务器模式。IP地址是网络层的地址,而端口是传输层的地址,我们用IP地址和端口号来对某个网络服务进行定位。应用IP地址,通过编程来发现服务器已开启的TCP服务。2.课题分析与设计本次设计的内容是编制程序发现已开启的TCP服务。程序的具体要求如下:(1)运行命令行:ScanUsePortserverIP。其中,ScanUsePort是程序名;山东轻工业学院信息学院11-12学年第2学期2009级计算机网络课程设计2serverIP是服务器的IP地址。(2)输出服务器正在使用的TCP端口号。3.设计使用的技术介绍(1)常用的端口扫描技术有很多,如TCPconnect扫描、TCPSYN扫描以及TCPFIN扫描等。1)操作系统提供的connect()系统调用用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能连接成功。否则,这个端口是不能使用的,即没有提供服务。这个技术的一个最大优点是,不需要任何限制。系统中任何用户都有权限使用这个调用。2)如果对每个目标端口以线性方式进行扫描,即用单独的connect()调用,那么扫描速度会很慢,因此我们可以利用多个线程的并行来加快扫描速度。3)如果对每个目标端口以线性的方式进行扫描,即用单独的connet()调用,那么扫描速度会很慢,因此我们可以利用多个线程的并发运行来加快扫描速度(即采用多线程编程)。2.2.课题实现1.实现过程描述山东轻工业学院信息学院11-12学年第2学期2009级计算机网络课程设计3图1主程序流程图开始输入参数正确?启动Ws_32.dll搜索端口结束?线程数目太多?休眠创建新线程搜索端口端口+1还有线程未完成?解除线程与socket库绑定结束线程开始线程数+1创建原始套接字山东轻工业学院信息学院11-12学年第2学期2009级计算机网络课程设计4图2主程序使用的线程2.各模块具体实现●创建原始套接字SOCKETsock=socket(AF_INET,SOCK_STREAM,0);●待扫描的服务器IPSockaddr_inseverAddr;//套接字地址变量severAddr.sin_family=AF_INET;severAddr.sin_port=hotons(Port);//端口地址赋值serverAddr.sin_addr_S_un.S_adddr=severIP;//IP地址●判断此端口是否打开structtimevaltimeout;//超时时间timeout.tv_sec=100/1000;timeout.tv_usec=0;connect(sock,(sockaddr*)&severAddr,sizeof(severAddr));//连接服务设置搜索目的的IP及端口设置超时时间端口是否打开?输出端口线程数—1线程结束山东轻工业学院信息学院11-12学年第2学期2009级计算机网络课程设计5器if(select(0,NULL,&write,NULL,&timeout)0)3.系统测试1).运行实验源代码,当输入IP地址127.0.0.1时,使用的端口好及结果如下图所示:图1输入IP地址为172.16.74.121时,程序运行结果如下图所示:山东轻工业学院信息学院11-12学年第2学期2009级计算机网络课程设计6图22)实验结果分析:IP地址是网络层的地址,端口是传输层的地址。计算机使用IP地址和端口号来对某个服务器进行定位。在实验源代码中使用系统提供函数connect(),来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态即端口已在使用中,,那么connect()就能连接成功,否则,这个端口是不能使用的,即没有提供服务。因此,当输入IP地址时,程序就能同过connect()函数,找出正在使用中的端口号,如实验结果所示。3.设计总结(1)在这次课程设计中,遇到了许多的困难,但同学,还是顺利完成了。在实验过程中,开始调试实验程序时,由于实验程序的缘故,输出结果不是:输入格式出错:ScanUsePortserverip山东轻工业学院信息学院11-12学年第2学期2009级计算机网络课程设计7Pressanykeytocontinue就是:使用中的端口号:Pressanykeytocontinue在VC++窗口中的“工程”选项的“设置”中,将程序变量(即IP地址)栏输入IP地址后,运行程序才得出结果。最后对实验程序进行修改后,变为现在的实验程序,实验通过实验者输入任一IP地址后,运行结果显示该IP地址的计算机正在使用的端口号。如当输入IP地址为:172.16.74.121时,实验运行结果如图2所示。(2)修改后的实验程序在运行时也出现了一点小的问题,就是在改变输入的IP地址后,而输出显示的端口号却不变,这就有问题了,不同的计算机使用的端口号不可能完全相同。对与这个问题在课后通过自己反复运行,得出了输入IP地址为127.0.0.1,输出结果为图1所示的实验结果。(3)本次课程设计主要是建立在传输层,在传输层上进行TCP和UPD的分析。在理论课学习时,只是简单的对理论知识进行了解而没有进行实际的操作。这次课程设计让我在理论学习的同时对传输层的工作有了更深了了解。4.附录#pragmapack(4)#pragmacomment(lib,Ws2_32.lib)#includestdio.h#includewinsock2.h#includews2tcpip.h山东轻工业学院信息学院11-12学年第2学期2009级计算机网络课程设计8#includestdlib.h#includeiostream.h//#includestring.h#defineSTATUS_FAILED0xFFFF//错误码unsignedlongserverIP;//扫描的服务器地址longMaxThread=200;//最大允许的扫描线程longThreadCount=0;//当前正在扫描的线程数long*aa=&ThreadCount;DWORDWINAPIScanPort(LPVOIDlpParam);//扫描端口的线程voidmain(intargc,char*argv[]){//if(argc!=2)//判断输入格式是否正确//{//cout输入格式错误:ScanUsePortserveripendl;//return;//}WSADATAWSAData;if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0)//开始使用Ws-32.dll{coutWSAStartupfaide:GetLastError()endl;ExitProcess(STATUS_FAILED);}charstrIP[80];山东轻工业学院信息学院11-12学年第2学期2009级计算机网络课程设计9cout输入IP地址:endl;cinstrIP;serverIP=inet_addr(strIP);cout使用中的端口号:endl;for(inti=1;i1024;i++)//扫描所有服务器端口{while(ThreadCount=MaxThread)//超过最大允许线程数,等待{Sleep(10);}DWORDThreadID;//创建线程,扫描端口CreateThread(NULL,0,ScanPort,(LPVOID)newshort(i),0,&ThreadID);}while(ThreadCount0)//还有未完成的线程,等待{Sleep(50);}WSACleanup();//调用WSACleanup函数来解除与Socket库的绑定并且释放Socket库所占用的系统资源}//扫描端口的线程DWORDWINAPIScanPort(LPVOIDlpParam){山东轻工业学院信息学院11-12学年第2学期2009级计算机网络课程设计10shortPort=*(short*)lpParam;InterlockedIncrement(aa);//线程数目+1SOCKETsock=socket(AF_INET,SOCK_STREAM,0);//创建原始套接字if(sock==INVALID_SOCKET){cout创建套接字失败!endl;return0;}else{sockaddr_inseverAddr;//搜索服务器IPseverAddr.sin_family=AF_INET;severAddr.sin_port=htons(Port);//端口地址severAddr.sin_addr.S_un.S_addr=serverIP;//IP地址connect(sock,(sockaddr*)&
本文标题:发现服务器已开启的TCP服务课程设计
链接地址:https://www.777doc.com/doc-5922807 .html