《计算机网络课程设计报告--端口扫描器.docx》由会员分享,可在线阅读,更多相关《计算机网络课程设计报告--端口扫描器.docx(10页珍藏版)》请在第一文库网上搜索。
1、计算机网络课程设计报告题目:端口扫描器一、问题描述(把你所选的题目及要求说一下)我们做的题目是端口扫描器。实现一个扫描器,使用TCPconnect进行端口扫描,并对扫描结果进行记录。主要是为了加深对TCP/IP的理解,学习端口扫描技术和原理。端口扫描器包括IP扫描和端口扫描,IP扫描使用同一网段的IP地址,端口扫描是对特定主机的一个范围段内的端口进行扫描,两者使用相同的原理,均使用TCP三次握手对主机的端口进行侦听来进行判断。扫描器是一种自动检测远程或本地主机安全性弱点的程序,通过使用扫描器你可以不留痕迹的发现远程服务器的各种TCP端口的分配。这就能让我们间接的或直观的了解到远程主机所存在的安
2、全问题。为了保证网络中计算机的安全性,必须采取主动策略,快速、及时、准确、安全的检测出网络中计算机及防火墙开放的和未开放的端口。计算机端口扫描技术就是这种主动防御策略实现的重要技术手段。而端口扫描器中的“端口”是专门为计算机通信而设计的,它并非硬件,不同于计算机中的“插槽”。“端口”是由计算机的通信协议TCP/IP协议定义的。其中规定,用IP地址和端口作为套接字,它代表TCP连接的一个连接端,一般称为Socketo具体来说,就是用IP:端口来定位一台主机中的进程。计算机就像一座大楼,这个大楼有好多入口(端口),进到不同的入口中就可以找到不同的公司(进程)。端口与进程是一一对应的,入侵者通过扫描
3、端口,便可以判断出目标计算机有哪些通信进程正在等待连接。要求是:使用端口扫描器对一台主机进行扫描,并显示出结果;对一个网段进行IP扫描,显示出结果。二、概要设计输出结果输出结果图1流程图三、详细设计(主要算法和函数间的调用关系)1、主要算法思想:利用系统提供的connect系统调用,用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么ConneCt就会成功;否则,这个端口是不能够用的,即没有提供服务。端口侦听状态:就是端口处于开放状态,等待连接,但是没有被连接。扫描有很多种,包括TCPConneCt()扫描、TCPSYN扫描、TCPFIN扫描、IP段扫描、TCP反向iden
4、t扫描、FTP返回攻击等等。本设计采用TCPCOrmeCt()扫描。优点是稳定可靠,不需要特殊权限;缺点是扫描方式不隐蔽,服务器日志会记录大量密集的链接和错误记录,并容易被防火墙发现和屏蔽。2、实现原理:通过调用SoCket方法COnnneCt()连接到目标计算机上,完成一次完整的三次握手,如果端口处于侦听状态,那么该方法就返回成功;否则,该端口不可用,即没有提供服务。本设计采用JaVa编程语言实现,加深对计算机网络TCP连接的认知和掌握,同时增加对Java的认识使用。端口扫描:通过对界面提交数据的处理,调用端口扫描程序依次对特定主机的端口进行扫描,并将扫描结果呈现在界面中。IP扫描:通过对界
5、面提交数据的处理,调用IP扫描程序依次对该IP段的多个常用端口进行扫描,如果连接成功,代表IP正在使用,否则,IP停止使用。两者都是对端口进行扫描,是通过JaVa提供的套接字Socket的COnneCt()方法对端口进行连接,如果端口处于侦听状态,即连接成功,否则就连接失败。3、网络基础知识:TCP三次握手原理及过程:第一次握手:建立连接时,客户端发送Syn包(syn=j)到服务器,并进入SYN_SEND,等待服务器确认;第二次握手:服务器收到Syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态第三次
6、握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k1),此包发送完毕,客户端和服务器进入ESTAB11SHED状态,完成三次握手。Java网络套接字Socket:网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个SocketoSocket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。4、程序方法:Main类作为主类启动程序。PortScannerFrame类作为界面类和相应扫描处理类;其中的PortScannerFrame构造方法初始化程序界
7、面,并对界面相应组件添加事件监听;actionPerformed方法是对扫描数据进行监听,并对一些异常进行处理,并调用相应的处理方法。PortScanThread类是端口扫描的类,其中的方法StartScan是进行端口扫描处理的方法。IpScanThread类是IP扫描的类,其中的方法StartScan是IP扫描处理的方法。IPData类和PortData类是一JaVaBean对象,是对界面数据进行封装并在相应处理类中进行创建实例的对象。四、调试分析(调式过程中出现的问题及如何改正)1、问题:界面提交数据进行封装时,错误数据也可以提交解决:在触发监听后,对数据进行校验,并对错误数据进行提示取消
8、操作2、问题:端口扫描实现过程中,出现连接异常解决:经过查找后,异常时端口连接不成功时抛出的,需要进行处理,就对异常进行了显示处理3、问题:端口扫描采用线程池出现重复内容解决:取消线程池的使用,采用线性方式开启多个端口连接线程同时连接达到同样的效果4、问题:数据校验问题,包括前后顺序,大小比较的忘记,导致出现空指针异常解决:添加相应的顺序控制和大小比较来解决5、问题:这次计算机网络课程设计,界面布局开始自己写,但布局自己写的时候频频出现问题解决:通过网上查资料、看书、等方法不断改进并解决五、心得体会(组内成员的分工及实习期间的体会)成员分工:王力争负责程序的编写与调试。王宏东与刘佳东负责搜索资
9、料和写报告书。体会:通过这次课程设计我们学到了很多,不但让我们更加深刻了解课本知识,也得以往对知识的疏忽得以补充,同时也使我们学会了成员之间要相互合作与协调,才能使工作更有效率,更有成效。通过课程设计也使我们了解到一些实际与理论之间的差异。通过课程设计不仅可以巩固专业知识,为以后的工作打下了坚实的基础,而其还可以培养和熟练使用资料,运用工具书的能力,把我们所学的课本知识与实践结合起来,起到温故而知新的作用。课程设计给了我们很多专业知识以及专业技能上的提升。同时我们也发现自己有许多不足的地方,还有许多东西待我们去学习。总之,这次课程设计使我们收获很多、学会很多、比以往更有耐心。六、用户手册(系统
10、的使用方法介绍)IP地址扫描使用方法:打开界面后,可以根据界面上的提示,输入需要查询的起始IP地址和终止IP地址。然后点击开始按钮,系统便开始自动查询,并把结果显示出来。端口扫描使用方法:打开界面后,根据界面提示,首先输入需要查询的主机IP地址,然后端口的起始与终止端口号。在点击开始端口扫描按钮,系统便开始查询,并把结果显示出来。附录:主要代码如下:/*事件监听*/pub1icvoidactionPerformcd(ActionEvente)/IP扫描if(e.getSource()=StartButton)/点击开始扫描ip地址jta.setText(IP地址链接状态n);jta1.setT
11、ext(IP地址链接状态n);intipNum=0;/IP个数初始化Patternpattern=Ppi1eb(?!ddd)d+11dd1204d1250-5).(?!ddd)d+11dd120-4d1250-5).(2!ddd)d+1dd20-4d1250-5)W.(?!ddd)d+1dd120-4d1250-5)b*);Matchermatcher1=pattern,matcher(ipFie1d.getText();Matchermatcher2=pattern,matcher(ipFie1d2.getText();if(!matcher1.matches()!matcher2.matc
12、hes()JOPtionPane.ShowMessageDia1og(nu11,“您输入的IP地址有误!”);return;)ipData.setStartIP(ipFie1d.getText();ipData.setEndIP(ipFie1d2.getText();ipNum=this.Ca1cu1ateIPCountO;if(ipNum=-1)(JOptionPane.ShowMessagcDia1og(nu11,”您输入的IP地址不在同一网段!);return;)ExecutorServiceexecutor=Executors.newScheduIedThreadPoo1(50);/设
13、定线程池/先全部添加到线程池中,再启动线程for(inti=0;iipNum;i+)executor,execute(newIpScanThread();)/端口扫描if(e.getSource()=this.StartPortScan)jta2.setText主机IP端口号端口状态n);jta3.setText主机IP端口号端口状态n);Patternpattern=Ppi1eb(?!ddd)d+11dd120-4d1250-5).(?!ddd)d+1dd120-4d1250-5).(?!ddd)d+11dd204d1250-5)W.(?!ddd)d+1dd20-4d1250-5)b*);M
14、atchermatcher1=pattern,matcher(ipFie1dForPortScan.getText();if(!matcher1.matches()JOPtionPane.ShowMessageDia1og(nu11,“您输入的IP地址有误!”);return;)Integerport;IntegerndPort;try(port=Integer,parse1nt(startPort.getText();ndPort=Integer,parse1nt(cndPort.getText();if(port65535portndPort)JOptionPanc.ShowMessageDia1og(nu11,最小端口必须是0-65535并且小于最大端口的整数!”);return;)portData.setIp(ipFie1dForPortScan.getText().trim();portData.setPort(port);/设置起始扫描端口portData.SetEndPort(ndPort);newThreacKnewPortScanThread().start();catch(NumberFormatExceptione1)JOptionPane.ShowMessagcDia1og(nu11,“错误的端口号或线程数,其值须为整数!);return;)