




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验5:端口扫描器的设计与实现姓名:学号:专业年级:(一)实验目的和内容:目的:加深对TCP的理解,学习端口扫描技术和原理,熟悉socket编程。内容:实现一个扫描器,使用TCPconnect进行端口扫描,并对扫描结果进行记录。(二)课程设计要求:Windows或Linux环境下,程序在单机上运行;使用端口扫描器对一台主机进行扫描,并显示出结果;编程语言不限;提供友好的用户界面。(三)端口扫描技术:“端口”是专门为计算机通信而设计的,它不是硬件,不同于计算机中的“插槽”,可以说是个“软插槽”。“端口”是由计算机的通信协议TCP/IP协议定义的。其中规定,用IP地址和端口作为套接字,它代表TCP连接的一个连接端,一般称为Socket。具体来说,就是用[IP:端口]来定位一台主机中的进程。计算机就像一座大楼,这个大楼有好多入口(端口),进到不同的入口中就可以找到不同的公司(进程)。端口与进程是一一对应的,入侵者通过扫描端口,便可以判断出目标计算机有哪些通信进程正在等待连接。(四)扫描端口的目的:端口扫描是入侵者搜集信息的几种常用手法之一,也正是这一过程最容易使入侵者暴露自己的身份和意图。 •判断目标主机上开放了哪些服务; •判断目标主机的操作系统。如果入侵者掌握了目标主机开放了哪些服务,运行何种操作系统,他们就能够使用相应的手段实现入侵。(五)端口的分类:端口是一个16bit的地址,用端口号进行标识不同的作用。端口一般分为两类。 •熟知端口号(公认端口号):由因特网指派名字和号码公司ICANN负责分配给一些常用的应用层程序固定使用的熟知端口,其数值一般为0~1023。 •一般端口号:用来随时分配给请求通信的客户进程。(六)扫描原理的基础知识:TCP/IP模型四层结构TCP与UDP协议TCP报文结构TCP连接和释放过程TCP/IP模型四层结构:TCP与UDP协议:Internet的网络通信大多是建立在这两个协议之上的,各个主机遵循着TCP/IP协议封装数据包进行通信。传输控制协议TCP(TransmissionControlProtocol):TCP提供可靠的、面向连接的运输服务,用于高可靠性数据的传输。TCP具有完善的错误检测与恢复、顺序控制和流量控制等功能。注重可靠性的场合一般使用TCP协议,例如FTP、Telnet。用户数据报协议UDP(UserDatagramProtocol):UDP在传送数据之前不需要先建立连接。远地主机的运输层在收到UDP数据报后,不需要给出任何确认。广泛应用于只需一次的C/S模式的请求-应答查询,或者要求提供高效率数据传输的场合。注重实时性、传输率、吞吐量的场合一般使用UDP,如QQ。(九)TCPconnect扫描:实现原理:通过调用socket函数connect()连接到目标计算机上,完成一次完整的三次握手过程。如果端口处于侦听状态,那么connect()就能成功返回。否则,这个端口不可用,即没有提供服务。优点:稳定可靠,不需要特殊的权限。缺点:扫描方式不隐蔽,服务器日志会记录下大量密集的连接和错误记录,并容易被防火墙发现和屏蔽。实验设计流程:原理概述通过调用socket函数connect()连接到目标计算机上,完成一次完整的三次握手过程。如果端口处于侦听状态,那么connect()就能成功返回。否则,这个端口不可用,即没有提供服务。运行环境本扫描软件用java语言开发,可稳定的运行在linux和windows环境下。基本设计思路用户界面:使用java里面的swing包来开发用户界面;端口扫描:使用socket函数connect()连接目标计算机来判定是否目标计算机开放了要测试的端口;.功能模块设计本软件只有一个功能模块,就是是指定主机的端口扫描。5.程序流程及主要算法核心算法是TCP的连接函数 Socketsocket=newSocket(host,port); //建立套接字if(socket.isConnected()) //判断端口号是否开放 { jta.append("port:"+port+"isopen!\n"); list.add(String.valueOf(port));.............程序使用说明(1)运行程序输入IP地址、开始端口号、技术端口号,点击“开始扫描”可以看到开放端口号与未开放端口号,得到如下结果:7.程序分析与总结本程序使用java语言开发,可以稳定的运行在windows和linux系统下,不过程序是单线程的扫描起来比较慢。附录-源程序代码文件PortScanWind.javaimportjava.awt.Color;importjava.awt.Font;importjava.awt.Point;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.IOException;import.InetAddress;import.Socket;import.UnknownHostException;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JOptionPane;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;importjavax.swing.JTextField;publicclassPortScanWindimplementsActionListener,Runnable{ privateJFramewind;//构建窗口 privateJTextFieldjtf,jtf2,jtf3;//3个文本 privateJLabel[]label=newJLabel[6];//6个标签 privateintstartPort,endPort;//端口 privateInetAddresshost;//取得本机IP privateJButtonbtn,stop;//点击事件 privateJTextAreajta,jta2;//2个显示纯文本的多行区域 privateJScrollPanejspane,jspane2;//滚动条 privateThreadps; privateList<String>list; publicPortScanWind(){ wind=newJFrame("端口扫描程序"); wind.setSize(400,600); jta=newJTextArea(10,10); jta2=newJTextArea(10,10); jspane=newJScrollPane(jta); jspane2=newJScrollPane(jta2);//两个竖直滚动条 list=newArrayList<String>(); jtf=newJTextField(20); jtf2=newJTextField(20); jtf3=newJTextField(20);//20个字符 label[0]=newJLabel("端口扫描程序"); label[1]=newJLabel("主机地址:"); label[2]=newJLabel("开始端口号:"); label[3]=newJLabel("结束端口号:"); label[4]=newJLabel("开放端口:"); label[5]=newJLabel("未开放端口:"); btn=newJButton("开始扫描"); stop=newJButton("停止扫描"); ps=newThread(this); label[0].setBounds(100,35,400,40);//(X,Y,宽,高)端口扫描程序 label[0].setFont(newFont("微软雅黑",Font.BOLD,32)); label[0].setForeground(Color.BLACK); label[1].setBounds(30,100,300,30);//主机地址: jtf.setBounds(150,100,200,30); label[1].setForeground(Color.BLUE);//蓝色 label[2].setBounds(30,150,300,30);//开始端口号: jtf2.setBounds(150,150,200,30); label[2].setForeground(Color.BLUE); label[3].setBounds(30,200,300,30);//结束端口号: jtf3.setBounds(150,200,200,30); label[3].setForeground(Color.BLUE); label[4].setBounds(30,280,200,30);//开放端口: label[5].setBounds(220,280,200,30);//未开放端口: label[4].setForeground(Color.BLUE); label[5].setForeground(Color.BLUE); btn.setBounds(90,250,100,30);//开始扫描 btn.addActionListener(this); stop.setBounds(220,250,100,30);//停止扫描 stop.addActionListener(this); stop.setEnabled(false); jspane.setBounds(30,310,150,230);//结果显示 jspane2.setBounds(220,310,150,230); wind.setLayout(null); for(inti=0;i<6;i++) { wind.add(label[i]); } wind.add(jtf); wind.add(jtf2); wind.add(jtf3); wind.add(btn); wind.add(jspane); wind.add(stop); wind.add(jspane2); wind.setResizable(false); wind.setLocationRelativeTo(null); wind.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); wind.setVisible(true); } publicstaticvoidmain(String[]args){ newPortScanWind(); } @SuppressWarnings("deprecation") @Override publicvoidactionPerformed(ActionEvente){ if(e.getSource()==btn) { jta.setText(""); jta2.setText(""); stop.setEnabled(true); //获取用户输入的地址和端口号 Stringip=jtf.getText(); Stringsport=jtf2.getText(); Stringeport=jtf3.getText(); //对用户的输入进行验证 if(ip.equals("")||ip==null) { JOptionPane.showMessageDialog(wind,"请输入主机地址!"); return; }else { try{ host=InetAddress.getByName(ip); }catch(UnknownHostExceptione1){ JOptionPane.showMessageDialog(wind,"请输入有效的主机地址!"); System.out.println("host初始化失败"); return; //e1.printStackTrace(); } } if(sport.equals("")||sport==null) { JOptionPane.showMessageDialog(wind,"请输入开始扫描的端口号!"); return; }else { startPort=Integer.parseInt(sport); } if(eport.equals("")||eport==null) { JOptionPane.showMessageDialog(wind,"请输入结束扫描的端口号!"); return; }else { endPort=Integer.parseInt(eport); if(endPort<startPort) { JOptionPane.showMessageDialog(wind,"您输入的结束端口号太小,请重新输入!"); return; } } //jta.append("开始扫描端口了。。。。。。。。。。。\n"); JOptionPane.showMessageDialog(wind,"开始扫描!"); btn.setEnabled(false);//不可按 jtf.setEditable(false); jtf2.setEditable(false); jtf3.setEditable(false); if(ps!=null) { ps.start(); }else { ps=newThread(this); ps.start(); } } if(e.getSource()==stop) { btn.setEnabled(true); jtf.setEditable(true); jtf2.setEditable(true); jtf3.setEditable(true); stop.setEnabled(false); ps.stop(); ps=null; list.removeAll(list);//清空保存的端口数据 } } @Override publicvoidrun(){ intport=startPort;//正在扫描的端口号 while(port<=endPort){ //循环扫描指定范围的端口 try{ Socketsocket=newSocket(host,port); //建立套接字 if(socket.isConnected()) //判断端口号是否开放 { jta.append("port:"+port+"isopen!\n"); list.add(String.valueOf(port)); intheight=8; Pointp=newPoint(); p.setLocation(0,this.jta.getLineCount()*height)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 文具安全教案课件
- 印刷业互联网+与融合发展考核试卷
- 冷藏车运输企业风险管理与内部控制系统考核试卷
- 天然气藏动态模拟与预测考核试卷
- 影视录放设备显示技术考核试卷
- 文化艺术与城市品牌建设考核试卷
- 木片干燥技术与木材应力释放考核试卷
- 健身器材行业企业文化建设与品牌形象提升考核试卷
- 保险业与新能源保险市场的机遇与挑战应对策略案例分析考核试卷
- 制糖业的可持续发展评估考核试卷
- 劳务合同协议书书
- 白城2025年吉林大安市事业单位面向上半年应征入伍高校毕业生招聘5人笔试历年参考题库附带答案详解
- 全球人工智能产业发展现状和趋势
- 2025年内蒙古化工职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 民法典解读之婚姻家庭编
- 2025年菏泽医学专科学校高职单招数学历年(2016-2024)频考点试题含答案解析
- 2025年漯河职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- Unit 2 What time is it?-A Let's spell(课件)-2024-2025学年人教PEP版英语四年级下册
- 2024-2025学年人教版数学六年级下册第二单元百分数(二)(含答案)
- 创新教案:《歌唱二小放牛郎》在2025年音乐教学中的应用
- 2024年西安电力高等专科学校高职单招职业技能测验历年参考题库(频考版)含答案解析
评论
0/150
提交评论