发现服务器已开启的TCP服务.docx
- 文档编号:9708279
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:10
- 大小:67.42KB
发现服务器已开启的TCP服务.docx
《发现服务器已开启的TCP服务.docx》由会员分享,可在线阅读,更多相关《发现服务器已开启的TCP服务.docx(10页珍藏版)》请在冰点文库上搜索。
发现服务器已开启的TCP服务
计算机网络课程设计报告
题目:
发现服务器已开启的TCP服务
学生姓名:
蒋宏国
学号:
0120149
专业班级:
芙蓉学院计算机09101班
同组姓名:
龙番李骥邓力全
指导教师:
李若兰
设计时间:
2012年下学期第19周
指导老师意见:
评定成绩:
签名:
日期:
年月日
目录
一、课程设计的目的和意义…………………………………………3
二、课程设计的内容和要求……………….…………………………3
三、课程设计的相关技术……………………………………………3
四、课程设计过程……………………………………….…………3
五、课程设计小结………………………….………………………4
六.参考文献…...…………………………………………………14
一.课程设计的意义和目的
计算机网络是分布在不同地理位置的多台独立计算机系统的集合,其目的是共享计算机资源。
计算机网络环境中进程间的通信采用客户机/服务器模式。
IP地址是网络层的地址,而端口是传输层的地址,我们用IP地址和端口号来对某个网络服务进行定位。
应用IP地址,通过编程来发现服务器已开启的TCP服务。
Internet是以客户机/服务器模式进行工作的,服务器在某些端口上开起一些网络服务,等侯客户端请求的到来。
传输层提供的网络服务有TCP服务和UDP服务两种。
传输层在网络体系结构中是承下启上的以层。
可以把传输层下面的几层称作传输服务提供者(transportserviceprovider),上面的几层称着传输服务使用者(transportserviceuser)。
传输层处于中间,它既使用传输服务提供者提供的服务,又为传输服务使用者提供服务。
传输层是网络体系结构中最重要的一层,所以深入理解传输层的作用和协议,对于网络课程的学习极为关键。
通过本课程设计的目标是熟悉TCP协议和端口的概念。
二.课程设计的内容和要求
2.1课程设计要求
服务器、IP地址、端口号、TCP服务
2.2课程设计内容
编制程序发现已开启的TCP服务。
程序的具体要求如下:
(1)运行命令行:
ScanUsePortserverIP
其中,ScanUsePort是程序名;serverIP是服务器的IP地址。
(2)输出服务器正在使用的TCP端口号。
三.课程设计过程
3.1课程设计分析
(1)常用的端口扫描技术有很多,如TCPconnect扫描、TCPSYN扫描以及TCPFIN扫描等。
1)操作系统提供的connect()系统调用用来与每一个感兴趣的目标计算机的端口进行连接。
如果端口处于侦听状态,那么connect()就能连接成功。
否则,这个端口是不能使用的,即没有提供服务。
这个技术的一个最大优点是,不需要任何限制。
系统中任何用户都有权限使用这个调用。
2)如果对每个目标端口以线性方式进行扫描,即用单独的connect()调用,那么扫描速度会很慢,因此我们可以利用多个线程的并行来加快扫描速度。
3)如果对每个目标端口以线性的方式进行扫描,即用单独的connet()调用,那么扫描速度会很慢,因此我们可以利用多个线程的并发运行来加快扫描速度(即采用多线程编程)。
4)下面给出本课程设计的核心代码。
●创建原始套接字
SOCKETsock=socket(AF_INET,SOCK_STREAM,0);
●待扫描的服务器IP
Sockaddr_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)
3.2课程设计流程图
开始
输入参数正确?
启动Ws2_32.dll
搜索端口结束?
N
线程数目太多?
休眠
Y
创建新线程搜索端口
YN
端口+1
休眠
还有线程未完成?
Y
N
解除与socket库绑定
结束
上图为图1——1,是主程序流程图,下图是图1——2,是主程序使用的线程流程图。
线程开始
线程数+1
创建原始套接字
设置搜索目的IP及端口
设置超时时间
端口是否打开?
N
输出端口
线程数-1
线程结束
图1——2主程序使用的线程
四.课程设计的相关技术
4.1课程设计源代码
#pragmapack(4)
#pragmacomment(lib,"Ws2_32.lib")
#include
#include
#include
#include
#include
//#include
#defineSTATUS_FAILED0xFFFF//错误码
unsignedlongserverIP;//扫描的服务器地址
longMaxThread=200;//最大允许的扫描线程
longThreadCount=0;//当前正在扫描的线程数
long*aa=&ThreadCount;
DWORDWINAPIScanPort(LPVOIDlpParam);//扫描端口的线程
voidmain(intargc,char*argv[])
{
//if(argc!
=2)//判断输入格式是否正确
//{
//cout<<"输入格式错误:
ScanUsePortserverip"< //return; //} WSADATAWSAData; if(WSAStartup(MAKEWORD(2,2),&WSAData)! =0)//开始使用Ws-32.dll { cout<<"WSAStartupfaide: "< ExitProcess(STATUS_FAILED); } charstrIP[80]; cout<<"输入IP地址: "< cin>>strIP; serverIP=inet_addr(strIP); cout<<"使用中的端口号: "< for(inti=1;i<1024;i++)//扫描所有服务器端口 { while(ThreadCount>=MaxThread)//超过最大允许线程数,等待 { Sleep(10); } DWORDThreadID;//创建线程,扫描端口 CreateThread(NULL,0,ScanPort,(LPVOID)newshort(i),0,&ThreadID); } while(ThreadCount>0)//还有未完成的线程,等待 { Sleep(50); } WSACleanup();//调用WSACleanup函数来解除与Socket库的绑定并且释放Socket库所占用的系统资源 }//扫描端口的线程 DWORDWINAPIScanPort(LPVOIDlpParam) { shortPort=*(short*)lpParam; InterlockedIncrement(aa);//线程数目+1 SOCKETsock=socket(AF_INET,SOCK_STREAM,0);//创建原始套接字 if(sock==INVALID_SOCKET) { cout<<"创建套接字失败! "< return0; } else { sockaddr_inseverAddr;//搜索服务器IP severAddr.sin_family=AF_INET; severAddr.sin_port=htons(Port);//端口地址 severAddr.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) { cout< } closesocket(sock); } InterlockedDecrement(aa); return0; } 4.2课程设计实验结果及分析 1).运行实验源代码,当输入IP地址127.0.0.1时,使用的端口好及结果如下图所示: 图1 输入IP地址为172.16.74.121时,程序运行结果如下图所示: 图2 2)实验结果分析: IP地址是网络层的地址,端口是传输层的地址。 计算机使用IP地址和端口号来对某个服务器进行定位。 在实验源代码中使用系统提供函数connect(),来与每一个感兴趣的目标计算机的端口进行连接。 如果端口处于侦听状态即端口已在使用中,,那么connect()就能连接成功,否则,这个端口是不能使用的,即没有提供服务。 因此,当输入IP地址时,程序就能同过connect()函数,找出正在使用中的端口号,如实验结果所示。 五.课程设计小结 (一).在这次课程设计中,遇到了许多的困难,最后在同学的帮助下,经过多次找错后,将程序的结构理清楚,并且对程序做出修改和调试,得到想要的效果,如在VC++窗口中的“工程”选项的“设置”中,将程序变量(即IP地址)栏输入IP地址后,运行程序才得出结果。 (二).修改后的实验程序,在运行后仍然存在一些错误,如在改变输入的IP地址后,而输出显示的端口号却不变,不同的计算机使用的端口号不可能完全相同。 对与这个问题在课后通过自己反复运行,得出了输入IP地址为127.0.0.1,输出结果为图1所示的实验结果。 (三)最后,在此次课程设计期间,我们通过网上搜索资料,逛图书馆,看视屏教程了解本次课程设计的相关知识。 通过大家的努力,在同学和指导老师的帮助下,成功的完成了本次课程设计,对与他们的帮助,我们组在此表示感谢! 六.参考文献 1.《计算机网络》,第5版,谢希仁,电子工业出版社,2010.7 2.《计算机网络基础》,王寅涛、李兴元,北京理工大学出版社 3.《计算机网络基础》,袁晖,人民邮电出版社 4.《计算机网络技术》,陆瑶远,高等教育出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 发现 服务器 开启 TCP 服务