服务器已开启的TCP服务Word文档下载推荐.docx

上传人:b****5 文档编号:19513707 上传时间:2023-01-07 格式:DOCX 页数:13 大小:92.27KB
下载 相关 举报
服务器已开启的TCP服务Word文档下载推荐.docx_第1页
第1页 / 共13页
服务器已开启的TCP服务Word文档下载推荐.docx_第2页
第2页 / 共13页
服务器已开启的TCP服务Word文档下载推荐.docx_第3页
第3页 / 共13页
服务器已开启的TCP服务Word文档下载推荐.docx_第4页
第4页 / 共13页
服务器已开启的TCP服务Word文档下载推荐.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

服务器已开启的TCP服务Word文档下载推荐.docx

《服务器已开启的TCP服务Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《服务器已开启的TCP服务Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。

服务器已开启的TCP服务Word文档下载推荐.docx

IP地址是网络层的地址,而端口是传输层的地址,我们用IP地址和端口号来对某个网络服务进行定位。

应用IP地址,通过编程来发现服务器已开启的TCP服务。

二.课程设计关键字

服务器、IP地址、端口号、TCP服务

三.课程设计目的

Internet是以客户机/服务器模式进行工作的,服务器在某些端口上开起一些网络服务,等侯客户端请求的到来。

传输层提供的网络服务有TCP服务和UDP服务两种。

传输层在网络体系结构中是承下启上的以层。

可以把传输层下面的几层称作传输服务提供者(transportserviceprovider),上面的几层称着传输服务使用者(transportserviceuser)。

传输层处于中间,它既使用传输服务提供者提供的服务,又为传输服务使用者提供服务。

传输层是网络体系结构中最重要的一层,所以深入理解传输层的作用和协议,对于网络课程的学习极为关键。

通过本课程设计的目标是熟悉TCP协议和端口的概念。

四.课程设计方法

编制程序发现已开启的TCP服务。

程序的具体要求如下:

(1)运行命令行:

ScanUsePortserverIP

其中,ScanUsePort是程序名;

serverIP是服务器的IP地址。

(2)输出服务器正在使用的TCP端口号。

五.课程设计分析

(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)

六.课程设计流程图

开始

输入参数正确?

搜索端口结束?

线程数目太多?

创建新线程搜索端口

端口+1

还有线程未完成?

解除线程与socket库绑定

结束

休眠

启动Ws_32.dll

上图为图1——1,是主程序流程图,下图是图1——2,是主程序使用的线程流程图。

线程开始

创建原始套接字

设置搜索目的的IP及端口

设置超时时间

输出端口

线程数—1

线程结束

端口是否打开?

线程数+1

图1——2主程序使用的线程

七.课程设计源代码

#pragmapack(4)

#pragmacomment(lib,"

Ws2_32.lib"

#include<

stdio.h>

winsock2.h>

ws2tcpip.h>

stdlib.h>

iostream.h>

//#include<

string.h>

#defineSTATUS_FAILED0xFFFF//错误码

unsignedlongserverIP;

//扫描的服务器地址

longMaxThread=200;

//最大允许的扫描线程

longThreadCount=0;

//当前正在扫描的线程数

long*aa=&

ThreadCount;

DWORDWINAPIScanPort(LPVOIDlpParam);

//扫描端口的线程

voidmain(intargc,char*argv[])

{

//if(argc!

=2)//判断输入格式是否正确

//{

//cout<

<

"

输入格式错误:

ScanUsePortserverip"

endl;

//return;

//}

WSADATAWSAData;

if(WSAStartup(MAKEWORD(2,2),&

WSAData)!

=0)//开始使用Ws-32.dll

{

cout<

WSAStartupfaide:

GetLastError()<

ExitProcess(STATUS_FAILED);

}

charstrIP[80];

cout<

输入IP地址:

cin>

>

strIP;

serverIP=inet_addr(strIP);

使用中的端口号:

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)

创建套接字失败!

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,&

structtimevaltimeout;

//超时

timeout.tv_sec=100/1000;

timeout.tv_usec=0;

//设置超时时间

if(select(0,NULL,&

write,NULL,&

0)

cout<

Port<

closesocket(sock);

InterlockedDecrement(aa);

return0;

}

八.课程设计实验结果及分析

1).运行实验源代码,当输入IP地址127.0.0.1时,使用的端口好及结果如下图所示:

图1

输入IP地址为172.16.74.121时,程序运行结果如下图所示:

图2

2)实验结果分析:

IP地址是网络层的地址,端口是传输层的地址。

计算机使用IP地址和端口号来对某个服务器进行定位。

在实验源代码中使用系统提供函数connect(),来与每一个感兴趣的目标计算机的端口进行连接。

如果端口处于侦听状态即端口已在使用中,,那么connect()就能连接成功,否则,这个端口是不能使用的,即没有提供服务。

因此,当输入IP地址时,程序就能同过connect()函数,找出正在使用中的端口号,如实验结果所示。

九.课程设计总结

(一).在这次课程设计中,遇到了许多的困难,但同学和老师的帮助下,还是顺利完成了。

在实验过程中,开始调试实验程序时,由于实验程序的缘故,输出结果不是:

输入格式出错:

ScanUsePortserverip

Pressanykeytocontinue

就是:

最后在同学的帮助下,结果多次找错后,在VC++窗口中的“工程”选项的“设置”中,将程序变量(即IP地址)栏输入IP地址后,运行程序才得出结果。

最后对实验程序进行修改后,变为现在的实验程序,实验通过实验者输入任一IP地址后,运行结果显示该IP地址的计算机正在使用的端口号。

如当输入IP地址为:

172.16.74.121时,实验运行结果如图2所示。

(二).修改后的实验程序在运行时也出现了一点小的问题,就是在改变输入的IP地址后,而输出显示的端口号却不变,这就有问题了,不同的计算机使用的端口号不可能完全相同。

对与这个问题在课后通过自己反复运行,得出了输入IP地址为127.0.0.1,输出结果为图1所示的实验结果。

(三).通过此次课程设计,学到了不少的东西,在此期间,我们通过网上搜索资料,逛图书馆,看视屏教程了解本次课程设计的相关知识,真的使人受益匪浅,收获颇多!

通过大家的努力,在同学和指导老师的帮助下,成功的完成了本次课程设计,对与他们的帮助,我们组在此表示感谢!

十.参考文献

1.《计算机网络》,第5版,谢希仁,电子工业出版社,2010.7

2.《计算机网络基础》,王寅涛、李兴元,北京理工大学出版社

3.《计算机网络基础》,袁晖,人民邮电出版社

4.《计算机网络技术》,陆瑶远,高等教育出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1