《计算机网络课程设计 扫描正在服务tcp端口》由会员分享,可在线阅读,更多相关《计算机网络课程设计 扫描正在服务tcp端口(10页珍藏版)》请在金锄头文库上搜索。
1、- 1 -计计算算机机网网络络课课程程设设计计报报告告题目:扫描服务器 TCP 服务学生姓名:xx学号:xx专业班级:xx同组姓名:xx指导教师:xx设计时间:2012 年下学期第 16 周指导老师意见:评定成绩:签名:日期:- 2 -目录一、 课程设计目的和要求- 3 -二、 原理分析- - 3 -三、 基本思路及关键问题的解决方法- 4 -四、 源代码- - 6 -五、 调试过程中出现的问题及解决方法- 8 -六、 总结及心得体会- 9 -七、 参考文献- 10 - 3 -一、 课程设计目的和要求1) 课程设计目的UDP 是 TCPIP 协议族为传输层设计的两个协议之一,它在进程与进程的通
2、信过程中, 提供了有限的差错校验功能, 是一种无连接的, 不可靠的协议。 UDP在一个较低的水平上完成进程之间的通信, 在收到分组的时候没有流量控制机制也没有确认机制,适用于可靠性比较高的局域网。由于 UDP 采取了无连接的方式,因此协议简单,在一些特定的应用中协议运行效率高。UDP 适合一些实时的应用,如 IP 电话、视频会议,它们要求源主机以恒定的速率发送数据,并且在网络出现拥塞时,可以丢失一些数据,但是延迟不能太大。基于这些特点,流式多媒体通信、多播等应用在传输层采用的就是 UDP 协议。2) 课程设计要求编写程序,设计 UDP 服务器。因为考虑到实时性,所以选择 UDP 为主要的网络通
3、信技术。A)程序能流畅地完成视频文件的传输。B)要能对多个客户端进行管理。需要通过 UDP 模拟多个客户端连接验证的情况。C)操作系统、使用语言和编译环境不限,但在作业中必须注明。二、 原理分析(1)常用的端口扫描技术有很多,如 TCP connect 扫描、TCP SYN 扫描以及 TCPFIN 扫描等。1)操作系统提供的connect()系统调用用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么 connect()就能连接成功。否则,这个端口是不能使用的,即没有提供服务。这个技术的一个最大优点是,不需要任何限制。系统中任何用户都有权限使用这个调用。2)如果对每个目标端
4、口以线性方式进行扫描,即用单独的 connect()调用,那么扫描速度会很慢,因此我们可以利用多个线程的并行来加快扫描速度。3)如果对每个目标端口以线性的方式进行扫描,即用单独的 connet()调用,- 4 -那么扫描速度会很慢, 因此我们可以利用多个线程的并发运行来加快扫描速度(即采用多线程编程) 。4)下面给出本课程设计的核心代码。创建原始套接字SOCKET sock =socket(AF_INET,SOCK_STREAM, 0);待扫描的服务器 IPSockaddr_ inseverAddr;/套接字地址变量 severAddr . sin_family = AF_INET; seve
5、rAddr . 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*) /连接服务器 if(select(0, NULL, /扫描的服务器地址 long MaxThread=200;/最大允许的扫描线程 long ThreadCount=0;/当前正在扫描的
6、线程数 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,- 7 - while(ThreadCount
7、0)/还有未完成的线程,等待 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; clo
8、sesocket(sock); InterlockedDecrement(aa);- 8 -return 0; (java 代码) import java.io.IOException; import .Socket; public class ScanUsePort extends Thread private int port; private static String serverIP; public ScanUsePort(int p) this.port=p; public void run() try Socket s=new Socket(serverIP ,port); Sy
9、stem.out.println(port); s.close(); catch (IOException e) public static void main(String args) if(args.length0) System.out.println(“USage:n java ScanUsePort serverIP“); return ; else serverIP=args0; System.out.println(“主机“+args0+“使用中在 TCP 端口为:“); for(int i=0;i1024;i+) ScanUsePort scanUsePort =new Sca
10、nUsePort(i); scanUsePort.start(); 五、 调试过程中出现的问题及解决方法结果图 1- 9 -结果图 2(一).在这次课程设计中,遇到了一些困难,但同学和老师的帮助下,还是顺利完成了。在实验过程中,开始调试实验程序时,由于实验程序的缘故,输出结果不是:输入格式出错:ScanUsePortserveripPressanykeytocontinue就是:使用中的端口号:Pressanykeytocontinue最后在同学的帮助下,结果多次找错后,在 VC+窗口中的“工程”选项的“设置”中,将程序变量(即 IP 地址)栏输入 IP 地址后,运行程序才得出结果。最后对实验
11、程序进行修改后,变为现在的实验程序,实验通过实验者输入任一 IP 地址后,运行结果显示该 IP 地址的计算机正在使用的端口号。如当输入IP 地址为:118。239.52.45 时,实验运行结果如图 2 所示。(二).修改后的实验程序在运行时也出现了一点小的问题,就是在改变输入的IP 地址后,而输出显示的端口号却不变,这就有问题了,不同的计算机使用的端口号不可能完全相同。对与这个问题在课后通过自己反复运行,得出了输入IP 地址为 192.168.1.103,输出结果为图 1 所示的实验结果。六、 总结及心得体会- 10 -通过此次课程设计,学到了不少的东西,在此期间,我们通过网上搜索资料,逛图书
12、馆,看视屏教程了解本次课程设计的相关知识,真的使人受益匪浅,收获颇多!通过大家的努力,在同学和指导老师的帮助下,成功的完成了本次课程设计,对与他们的帮助,我们组在此表示感谢!七、参考文献1. 谢希仁 计算机网络第 5 版 :电子工业出版社,20102.王寅涛、李兴元 计算机网络基础 :北京理工大学出版社3.袁晖 计算机网络基础 :人民邮电出版社4.陆瑶远 计算机网络技术 :高等教育出版社5.陈维兴, 林小茶 C+面向对象程序设计教程 第三版: 清华大学出版社, 20106.李尊朝,苏军 Java 语言程序设计第二版:中国铁道出版社,20116.吴宜功,吴英 计算机网络课程设计 :机械工业出版社,2012