资源预览内容
第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
第9页 / 共13页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
沈 阳 理 工 大 学 课 程 设 计 专 用 纸沈阳理工大学目 录1 课程设计目的 .12 课程设计要求 .13 相关知识 .24 课程设计分析 .25 程序代码 .66 运行结果与分析 .107 参考文献 .11沈 阳 理 工 大 学 课 程 设 计 专 用 纸沈阳理工大学摘 要计算机网络是分布在不同地理位置的多立计算机系统的集 合,其目的是共享计算机资源。计算机网络环境中进程间的通信采用客户机/服务器模式。IP 地址是网络层的地址,而端口是传输层的地址,我们用 IP 地址和端口号来对某个网络服务进行定位。应用 IP 地址,通过编程来发现服务器已开启的 TCP 服务最后,是系统测试与分析,给出程序运行结果图,并分析运行的正确性。关键词:TCP 数据包;socket;头部;套接字;源端口号;IP 地址;端口号 ;C+;线程编程;TCP 服务 沈 阳 理 工 大 学 课 程 设 计 专 用 纸 No0沈阳理工大学1 课程设计目的1: 计算机网络是分布在不同地理位置的多立计算机系统的集合,其目的是共享计算机资源。计算机网络环境中进程间的通信采用客户机/服务器模式。IP 地址是网络层的地址,而端口是传输层的地址,我们用 IP 地址和端口号来对某个网络服务进行定位。应用 IP 地址,通过编程来发现服务器已开启的 TCP 服务。2: Internet 是以客户机 /服务器模式进行工作的,服务器在某些端口上开起一些网络服务,等侯客户端请求的到来。传输层提供的网络服务有 TCP 服务和 UDP 服务两种。传输层在网络体系结构中是承下启上的以层。可以把传输层下面的几层称作传输服务提供者(transport service provider),上面的几层称着传输服务使用者(transport service user)。传输层处于中间,它既使用传输服务提供者提供的服务,又为传输服务使用者提供服务。传输层是网络体系结构中最重要的一层,所以深入理解传输层的作用和协议,对于网络课程的学习极为关键。通过本课程设计的目标是熟悉 TCP 协议和端口的概念。2 课程设计要求服务器、IP 地址、端口号、TCP 服务编制程序发现已开启的 TCP 服务。程序的具体要求如下:(1)运行命令行:ScanUsePort serverIP 其中,ScanUsePort 是程序名; 沈 阳 理 工 大 学 课 程 设 计 专 用 纸 No1沈阳理工大学serverIP 是服务器的 IP 地址。(2)输出服务器正在使用的 TCP 端口号。3 相关知识如何运用套接字,创建套接字SOCKET sock =socket(AF_INET,SOCK_STREAM, 0);扫描服务器:Sockaddr_ in severAddr; severAddr . sin_family = AF_INET;severAddr . sin_port = hotons(Port); serverAddr . sin_addr_S_un . S_adddr =severIP; 4 课程设计分析(1)常用的端口扫描技术有很多,如 TCP connect 扫描、TCP SYN 扫描以及 TCP FIN 扫描等。(2)操作系统提供的 connect()系统调用用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么 connect()就能连接成功。否则,这个端口是不能使用的,即没有提供服务。这个技术的一个最大优点是,不需要任何限制。系统中任何用户都有权限使用这个调用。(3)如果对每个目标端口以线性方式进行扫描,即用单独的 connect()调用,那么扫描速度会很慢,因此我们可以利用多个线程的并行来加快扫描速度。 沈 阳 理 工 大 学 课 程 设 计 专 用 纸 No2沈阳理工大学(4)如果对每个目标端口以线性的方式进行扫描,即用单独的 connet()调用,那么扫描速度会很慢,因此我们可以利用多个线程的并发运行来加快扫描速度(即采用多线程编程)。(5)下面给出本课程设计的核心代码。创建原始套接字SOCKET sock =socket(AF_INET,SOCK_STREAM, 0);待扫描的服务器 IPSockaddr_ in severAddr; /套接字地址变量severAddr . sin_family = AF_INET;severAddr . sin_port = hotons(Port); /端口地址赋值serverAddr . sin_addr_S_un . S_adddr =severIP; /IP 地址判断此端口是否打开struct timeval timeout; /超时时间timeout.tv_sec =100 / 1000;timeout .tv _ usec = 0 ;connect(sock, (sockaddr*) /连接服务器if(select(0, NULL, &write, NULL, &timeout)0 ) 沈 阳 理 工 大 学 课 程 设 计 专 用 纸 No3沈阳理工大学(6)本程序的流程图N Y Y NY N 41 主程序流程图开始输入参数正确?搜索端口结束?线程数目太多?还有线程未完成?启动 Ws2_32.dll创建新线程搜索端口端口+1解除与 socket 库绑定结束休眠休眠 沈 阳 理 工 大 学 课 程 设 计 专 用 纸 No4沈阳理工大学N图 42 主程序使用的线程图线程开始线程数+1端口是否打开?线程结束设置搜索目的 IP 及端口创建原始套接字设置超时时间线程数-1输出端口 沈 阳 理 工 大 学 课 程 设 计 专 用 纸 No5沈阳理工大学5 程序代码#pragma pack(4)#pragma comment(lib,Ws2_32.lib)#include#include#include#include#include/#include#define STATUS_FAILED 0xFFFF /错误码unsigned long serverIP; /扫描的服务器地址long MaxThread=200; /最大允许的扫描线程long ThreadCount=0; /当前正在扫描的线程数long *aa=DWORD WINAPI ScanPort(LPVOID lpParam); /扫描端口的线程void main(int argc,char *argv)/ if(argc!=2) /判断输入格式是否正确/ / coutstrIP;serverIP=inet_addr(strIP);cout=MaxThread) /超过最大允许线程数,等待Sleep(10);DWORD ThreadID; /创建线程,扫描端口CreateThread(NULL,0,ScanPort,(LPVOID)new short(i),0, 沈 阳 理 工 大 学 课 程 设 计 专 用 纸 No7沈阳理工大学while(ThreadCount0) /还有未完成的线程,等待Sleep(50);WSACleanup(); /调用 WSACleanup 函数来解除与 Socket 库的绑定并且释放 Socket 库所占用的系统资源 /扫描端口的线程DWORD WINAPI ScanPort(LPVOID lpParam)short Port=*(short*) lpParam;InterlockedIncrement(aa); /线程数目SOCKET sock=socket(AF_INET,SOCK_STREAM,0); /创建原始套接字if(sock=INVALID_SOCKET)cout0)coutPortendl;closesocket(sock);InterlockedDecrement(aa); 沈 阳 理 工 大 学 课 程 设 计 专 用 纸 No9沈阳理工大学return 0;6 运行结果与分析(1) 输入 IP 地址为 127.25.255.255 时,程序运行结果如下图所示:图 61(2)实验结果分析:IP 地址是网络层的地址,端口是传输层的地址。计算机使用 IP 地址和端口号来对某个服务器进行定位。在实验源代码中使用系统提供函数 connect(),来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态即端口已在使用中,那么 connect()就能连接成功,否则,这个端口是不能使用的,即没有提供服务。因此,当输入 IP 地址时,程序就能同过 connect()函 沈 阳 理 工 大 学 课 程 设 计 专 用 纸 No10沈阳理工大学数,找出正在使用中的端口号,如实验结果所示。7 参考文献1谢希仁 编著.计算机网络(第 6 版)北京:电子工业出版社,20082吴宜功 编著.计算机网络课程设计(第 2 版)北京:机械工业出版社,2012
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号