您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 发现服务器已开启的TCP服务
1计算机网络课程设计报告题目:发现服务器已开启的TCP服务学生姓名:蒋宏国学号:0120149专业班级:芙蓉学院计算机09101班同组姓名:龙番李骥邓力全指导教师:李若兰设计时间:2012年下学期第19周指导老师意见:评定成绩:签名:日期:年月日2目录一、课程设计的目的和意义…………………………………………3二、课程设计的内容和要求……………….…………………………3三、课程设计的相关技术……………………………………………3四、课程设计过程……………………………………….…………3五、课程设计小结………………………….………………………4六.参考文献…...…………………………………………………143一.课程设计的意义和目的计算机网络是分布在不同地理位置的多台独立计算机系统的集合,其目的是共享计算机资源。计算机网络环境中进程间的通信采用客户机/服务器模式。IP地址是网络层的地址,而端口是传输层的地址,我们用IP地址和端口号来对某个网络服务进行定位。应用IP地址,通过编程来发现服务器已开启的TCP服务。Internet是以客户机/服务器模式进行工作的,服务器在某些端口上开起一些网络服务,等侯客户端请求的到来。传输层提供的网络服务有TCP服务和UDP服务两种。传输层在网络体系结构中是承下启上的以层。可以把传输层下面的几层称作传输服务提供者(transportserviceprovider),上面的几层称着传输服务使用者(transportserviceuser)。传输层处于中间,它既使用传输服务提供者提供的服务,又为传输服务使用者提供服务。传输层是网络体系结构中最重要的一层,所以深入理解传输层的作用和协议,对于网络课程的学习极为关键。通过本课程设计的目标是熟悉TCP协议和端口的概念。二.课程设计的内容和要求2.1课程设计要求服务器、IP地址、端口号、TCP服务42.2课程设计内容编制程序发现已开启的TCP服务。程序的具体要求如下:(1)运行命令行:ScanUsePortserverIP其中,ScanUsePort是程序名;serverIP是服务器的IP地址。(2)输出服务器正在使用的TCP端口号。三.课程设计过程3.1课程设计分析(1)常用的端口扫描技术有很多,如TCPconnect扫描、TCPSYN扫描以及TCPFIN扫描等。1)操作系统提供的connect()系统调用用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能连接成功。否则,这个端口是不能使用的,即没有提供服务。这个技术的一个最大优点是,不需要任何限制。系统中任何用户都有权限使用这个调用。2)如果对每个目标端口以线性方式进行扫描,即用单独的connect()调用,那么扫描速度会很慢,因此我们可以利用多个线程的并行来加快扫描速度。3)如果对每个目标端口以线性的方式进行扫描,即用单独的connet()调用,那么扫描速度会很慢,因此我们可以利用多个线5程的并发运行来加快扫描速度(即采用多线程编程)。4)下面给出本课程设计的核心代码。●创建原始套接字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));//连接服务器if(select(0,NULL,&write,NULL,&timeout)0)63.2课程设计流程图NYYNYN上图为图1——1,是主程序流程图,下图是图1——2,是主程序使用的线程流程图。开始输入参数正确?搜索端口结束?线程数目太多?还有线程未完成?启动Ws2_32.dll创建新线程搜索端口端口+1解除与socket库绑定结束休眠休眠7N图1——2主程序使用的线程四.课程设计的相关技术4.1课程设计源代码#pragmapack(4)#pragmacomment(lib,Ws2_32.lib)#includestdio.h#includewinsock2.h线程开始线程数+1端口是否打开?线程结束设置搜索目的IP及端口创建原始套接字设置超时时间线程数-1输出端口8#includews2tcpip.h#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{9coutWSAStartupfaide:GetLastError()endl;ExitProcess(STATUS_FAILED);}charstrIP[80];cout输入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);10}WSACleanup();//调用WSACleanup函数来解除与Socket库的绑定并且释放Socket库所占用的系统资源}//扫描端口的线程DWORDWINAPIScanPort(LPVOIDlpParam){shortPort=*(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);//端口地址11severAddr.sin_addr.S_un.S_addr=serverIP;//IP地址connect(sock,(sockaddr*)&severAddr,sizeof(severAddr));structfd_setwrite;//写socket集合FD_ZERO(&write);FD_SET(sock,&write);structtimevaltimeout;//超时timeout.tv_sec=100/1000;timeout.tv_usec=0;//设置超时时间if(select(0,NULL,&write,NULL,&timeout)0){coutPortendl;}closesocket(sock);}InterlockedDecrement(aa);return0;}4.2课程设计实验结果及分析121).运行实验源代码,当输入IP地址127.0.0.1时,使用的端口好及结果如下图所示:图1输入IP地址为172.16.74.121时,程序运行结果如下图所示:13图22)实验结果分析:IP地址是网络层的地址,端口是传输层的地址。计算机使用IP地址和端口号来对某个服务器进行定位。在实验源代码中使用系统提供函数connect(),来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态即端口已在使用中,,那么connect()就能连接成功,否则,这个端口是不能使用的,即没有提供服务。因此,当输入IP地址时,程序就能同过connect()函数,找出正在使用中的端口号,如实验结果所示。五.课程设计小结(一).在这次课程设计中,遇到了许多的困难,最后在同学的帮助下,经过多次找错后,将程序的结构理清楚,并且对程序做出修改和调试,得到想要的效果,如在VC++窗口中的“工程”选项的“设置”14中,将程序变量(即IP地址)栏输入IP地址后,运行程序才得出结果。(二).修改后的实验程序,在运行后仍然存在一些错误,如在改变输入的IP地址后,而输出显示的端口号却不变,不同的计算机使用的端口号不可能完全相同。对与这个问题在课后通过自己反复运行,得出了输入IP地址为127.0.0.1,输出结果为图1所示的实验结果。(三)最后,在此次课程设计期间,我们通过网上搜索资料,逛图书馆,看视屏教程了解本次课程设计的相关知识。通过大家的努力,在同学和指导老师的帮助下,成功的完成了本次课程设计,对与他们的帮助,我们组在此表示感谢!六.参考文献1.《计算机网络》,第5版,谢希仁,电子工业出版社,2010.72.《计算机网络基础》,王寅涛、李兴元,北京理工大学出版社3.《计算机网络基础》,袁晖,人民邮电出版社4.《计算机网络技术》,陆瑶远,高等教育出版社
本文标题:发现服务器已开启的TCP服务
链接地址:https://www.777doc.com/doc-5923807 .html