端口扫描程序设计(详细的报告+源代码)_第1页
端口扫描程序设计(详细的报告+源代码)_第2页
端口扫描程序设计(详细的报告+源代码)_第3页
端口扫描程序设计(详细的报告+源代码)_第4页
端口扫描程序设计(详细的报告+源代码)_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、网络综合实验任务书1.2.目的与要求性质:设计性实验。任务:设计并实现一个端口扫描程序,检测某个IP或某段IP的计算机的端口工作情况。3.目的:加深对课堂讲授知识的理解,熟练掌握基本的网络编程技术和方法,建立网络编程整体概念,使得学生初步具有研究、设计、编制和调试网络程序的能力。4. 要求:熟悉有关定义、概念和实现算法,设计出程序流程框图和数据结构,编写出完整的源程序,基本功能完善,方便易用,操作无误。5. 学生要求人数:主要内容1人。1. 编写一个端口扫描程序,能够显示某个IP或某段IP的计算机的某一个或某些端口 是否正在工作。基本工作过程如下:设定好一定的端口扫描范围;设定每个端口扫描的次

2、数,因为有可能有的端口一次扫描可能不通;创建socket,通过socket的connect方法来连接远程IP地址以及对应的端口;如果返回false,表示端口没有开放,否则端口开放。进度计划序号设计内容完成时间备注1任务布置及资料收集第1周周、周二2软件方案设计与制定第1周周三至周四3编程实现第1周周周五至第2周周二4程序测试与修改,撰写报告第2周周三至周五上午5报告提交,软件验收周五下午四、设计成果要求1. 完成规定的实验任务,保质保量;2. 完成综合实验报告, 要求格式规范,内容具体而翔实,应体现自身所做的工作,注重对实验思路的归纳和对问题解决过程的总结。五、考核方式1.平时成绩+验收答辩+

3、实验报告;2.五级分制。学生姓名:指导教师:2009年6月8日、综合实验的目的与要求1目的:加深对课堂讲授知识的理解,熟练掌握基本的网络编程技术和方法,建立网络编程整体概念,加深对 JAVA编程语言的使用,促进编程能力的提高,同时为网络编程打下一个比较好的基础。同时对实验的过程要有完全的了解。2. 要求:熟悉有关定义、概念和实现算法,设计出程序流程框图和数据结构,编写出完整的源程序,基本功能完善,方便易用,操作无误。二、综合实验正文1 编程语言的选择针对编写的是端口扫描的程序,所以我选择了JAVA编程,因为要简单而方便的试验端口扫描的功能。2.端口扫描实现的功能是:显示某个IP或某段IP的计算

4、机的某一个或某些端口是否正在工作2. 1如何选择IP段和端口创建socket,通过socket的connect方法来连接远程IP地址以及对应的端口。而我使用的是socket函数来实现端口的扫描和 IP地址的选择扫描。2. 2如何实现快速扫描端口通过实现多线程,当一个IP或者一个端口同时分配多个线程进行扫描,速度会比单线程扫描快许多。2. 3显示扫描结果可以在使用JAVA编写的时候,可以通过使用JScrollPane控件实现显示结果。2. 4实现要求功能之余美化外观3. 创建应用程序界面3. 1建立主窗体 ,“JAVA端口扫描器”图1-13. 2 IP地址的输入部分 诸选擇:00 0 *0C01

5、P地址:Iccaltiost图1-2端口部分,其中包括指定的端口和指定扫描的端口范围端口菇匿I:1000多线程的实现和延时的控制部分增加的保存及快捷键功能您口扫輛二 g退出(Q)图1-3100图1-4图1-54 扫描的整个过程4.4.4.4.1234填写 IP 地址 192.168.1.100 192.168.1.120填写端口扫描的范围为1 300线程数选择为100扫描结果如下ria IPl辿址:J1031100-ta120192O主机名=localhost-m域程数:10019£.15S.1.1OO:139:net0IOS1i192.156.1.100:110: POP>1

6、92 1&8 1101:e0;(HITP|伯 2詛3 g: fn etB 10 5)图1-6端口扫描的主要部分程序如下import java .n et.*;import java.io.*;import java.awt.*;import java.awt.eve nt.*;import javax.swi ng.*;/*实现扫描的主体程序*/p ublic class ThreadSca npublic static JFrame main=new JFrame("JA VA 端口扫描器”);显示扫描结果P ublic static JTextArea Result=ne

7、w JTextArea("",4,40);滚动条面板publicstaticJScrollPan eresult PanenewJScroll Pan e(Result,JScroll Pan e.VERTICAL_SCROLLBAR_AS_NEEDED, JScroll Pan e.HORIZONTAL_SCROLLBAR_AS_NEEDED;输入主机名文本框p ublic static JTextField host name=new JTextField("localhost",8);输入ip地址前3位的输入框public static JText

8、Field fromi p仁 new JTextField("0",3);输入ip地址46位的输入框public static JTextField fromi p2=n ew JTextField("0",3);输入ip地址79位的输入框public static JTextField fromi p3=new JTextField("0",3);输入起始ip地址最后4位的输入框public static JTextField fromi p4=new JTextField("0",3);输入目标ip地址最后4位

9、的输入框public static JTextField toi p=new JTextField("0",3);输入最小端口的输入框public static JTextField mi nP ort= new JTextField("0",4);输入最大端口的输入框public static JTextField max Port=new JTextField("1000",4);/输入最大线程数量的输入框public static JTextField maxThread=new JTextField("100&quo

10、t;,3);错误提示框public static JDialog DLGError= new JDialog(main," 错误!"); public static JLabel DLGINFO=new JLabel("");public static JLabel type=new JLabel(" 请选择:”);扫描类型public static JRadioButt on radioI p = new JRadioButto n("l P 地址:”); public static JRadioButton radioHost =

11、 new JRadioButton(” 主机名:",true);单选框组P ublic static Butt onGroup group = new Butt onGroup();public static JLabel P1= new JLabel("端口范围:"); public static JLabel P2=new JLabel("");public static JLabel P3=new JLabel("");public static JLabel Pdot1 = new JLabel(".&qu

12、ot;); public static JLabel P dot2 = new JLabel(".");public static JLabel P dot3 = new JLabel(".");public static JLabel TNUM=new JLabel(" 线程数:"); public static JLabel RST=new JLabel("扫描结果:"); p ublic static JLabel con=new JLabel("");定义按钮public static

13、JButton OK = new JButton(” 确定");public static JButton Submit = new JButton(” 开始扫描");public static JButton Cancel = new JButton(” 退出");public static JButton saveButton = new JButton(” 保存扫描结果");/菜单栏p ublic static JMe nuBar myBar = new JMe nuBar();public static JMenu myMenu = new JM

14、enu(” 文件(F)");public static JMenultem saveltem = new JMenultem(” 保存扫描结果(S)"); public static JMenultem exitltem = new JMenultem(” 退出(Q)");p ublic static void main( Stri ng args) mai n. setSize(500,400);mai n.setLocatio n(300,300);mai n.setResizable(false);main. setLayout (new GridBagLa

15、yout();mai n. setDefaultCloseO perati on (JFrame.EXIT_ON_CLOSE);DLGError.setSize(300,100);DLGError.setLocatio n(400,400);添加“菜单栏”myMe nu .add(saveltem); myMe nu .add(exitltem); myBar.add(myMe nu);mai n.setJMe nuBar(myBar);设置热键myMe nu .set Mnemoni c('F'); saveltem.set Mnemonic ('S');为“

16、另存为”组件设置快捷键为ctrl+s saveltem.setAccelerator(KeyStroke.getKeyStroke(KeyEve nt.VK_S,l np utEve nt.CTRL_MASK);exitltem.set Mnemoni c('Q');exitltem.setAccelerator(KeyStroke.getKeyStroke(KeyEve nt.VK_E,l np utEve nt.CTRL_ MASK);采用表格包型布局Container mPanel = main. getC ontentPan e();GridBagC on stra i

17、nts c = new GridBagC on stra in ts(); c.i nsets = new In sets(10,0,0,10);c.gridx = 0;c.gridy = 0;c.gridwidth = 10;c.fill = GridBagCo nstrai nts.BOTH;c.an chor = GridBagCo nstrai nts.CENTER; mPan el.add(t yp e,c);group .add(radi olp); group .add(radioHost);c.gridx = 0;c.gridy = 1;c.gridwidth = 1;c.fi

18、ll = GridBagCo nstrai nts.BOTH;c.an chor = GridBagCo nstrai nts.CENTER; mPan el.add(radi olp,c);c.gridx = 1;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagCo nstrai nts.BOTH;c.an chor = GridBagCo nstrai nts.CENTER; mPan el.add(fro mip 1,c);c.gridx = 2;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagCo nstr

19、ai nts.BOTH;c.an chor = GridBagCo nstrai nts.CENTER; mPan el.add( Pdot1,c);c.gridx = 3;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagCo nstrai nts.BOTH;c.an chor = GridBagCo nstrai nts.CENTER; mPan el.add(fro mip 2,c);c.gridx = 4;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagCo nstrai nts.BOTH;c.an chor

20、 = GridBagCo nstrai nts.CENTER; mPan el.add( Pdot2,c);c.gridx = 5;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagCo nstrai nts.BOTH;c.an chor = GridBagCo nstrai nts.CENTER; mPan el.add(fro mip 3,c);c.gridx = 6;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagCo nstrai nts.BOTH;c.an chor = GridBagCo nstrai n

21、ts.CENTER; mPan el.add( Pdot3,c);c.gridx = 7;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagCo nstrai nts.BOTH;c.an chor = GridBagCo nstrai nts.CENTER; mPan el.add(fro mip4 ,c);c.gridx = 8;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagCo nstrai nts.BOTH;c.an chor = GridBagCo nstrai nts.CENTER; mPan el.ad

22、d( P2,c);c.gridx = 9;c.gridy = 1;c.gridwidth = 1;c.fill = GridBagCo nstrai nts.BOTH;c.an chor = GridBagCo nstrai nts.CENTER; mPan el.add(to ip,c);c.gridx = 0;c.gridy = 2;c.gridwidth = 1;c.fill = GridBagCo nstrai nts.BOTH;c.an chor = GridBagCo nstrai nts.CENTER; mPan el.add(radioHost,c);c.gridx = 1;c

23、.gridy = 2;c.gridwidth = 3;c.fill = GridBagCo nstrai nts.BOTH;c.an chor = GridBagCo nstrai nts.CENTER; mPan el.add(host name,c);c.gridx = 0;c.gridy = 3;c.gridwidth = 1;c.fill = GridBagCo nstrai nts.BOTH;c.an chor = GridBagCo nstrai nts.CENTER; mPan el.add( P1,c);c.gridx = 1;c.gridy = 3;c.gridwidth =

24、 1;c.fill = GridBagCo nstrai nts.BOTH;c.an chor = GridBagCo nstrai nts.CENTER; mPan el.add( minP ort,c);c.gridx = 2; c.gridy = 3;c.gridwidth = 1;c.fill = GridBagCo nstrai nts.BOTH;c.an chor = GridBagCo nstrai nts.CENTER; mPan el.add( P3,c);c.gridx = 3;c.gridy = 3;c.gridwidth = 1;c.fill = GridBagCo n

25、strai nts.BOTH;c.an chor = GridBagCo nstrai nts.CENTER; mPan el.add(max Port,c);c.gridx = 0;c.gridy = 4;c.gridwidth = 1;c.fill = GridBagCo nstrai nts.BOTH;c.an chor = GridBagCo nstrai nts.CENTER; mPan el.add(TNUM,c);c.gridx = 1;c.gridy = 4;c.gridwidth = 3;c.fill = GridBagCo nstrai nts.BOTH;c.an chor

26、 = GridBagCo nstrai nts.CENTER; mPan el.add(maxThread,c);c.gridx = 0;c.gridy = 5;c.gridwidth = 3;c.fill = GridBagCo nstrai nts.VERTICAL;c.an chor = GridBagCo nstrai nts.CENTER; mPan el.add(Submit,c);c.gridx = 6;c.gridy = 5;c.gridwidth = 4;c.fill = GridBagCo nstrai nts.VERTICAL; c.an chor = GridBagCo

27、 nstrai nts.CENTER; mPan el.add(Ca ncel,c);c.gridx = 0;c.gridy = 6;c.gridwidth = 10;c.fill = GridBagCo nstrai nts.BOTH;c.an chor = GridBagCo nstrai nts.CENTER; mPan el.add(RST,c);设置文本区域可以换行Result.setL in eWra p(true);设置文本区域不可编辑Result.setEditable(false);c.gridx = 0;c.gridy = 7; c.gridwidth = 10;c.gri

28、dheight = 4;c.fill = GridBagCo nstrai nts.VERTICAL;c.an chor = GridBagCo nstrai nts.CENTER; mPan el.add(result Pan e,c);Container dPanel = DLGError.getC ontentPan e();dPan el.setLayout( new FlowLayout(FlowLayout.CENTER); dPan el.add(DLGINFO);dPan el.add(OK);Submit.addActio nListe ner(new SubmitActio

29、 n(); Can cel.addAct ion Liste ner(new Can cleActi on(); OK.addActio nListe ner(new OKActio n();实现退出功能exitItem.addActi on Liste ner(new java.awt.eve nt.Act ion Liste ner() p ublic void actionP erformed(java.awt.eve nt.Acti onEvent e) System.exit(0););实现帮助功能saveButt on. addActi on Liste ner(new java.

30、awt.eve nt.Act ion Liste ner() p ublic void actionP erformed(java.awt.eve nt.Acti onEvent e) JFileChooser fc=new JFileChooser(); int retur nVal=fc.showSaveDialog( null);点击“保存”if(returnVal = 0)File saveFile=fc.getSelectedFile();try FileWriter writeOut = new FileWriter(saveFile); writeOut.write(Thread

31、Sca n.Result.getText(); writeOut.close();catch (IOExce ptio n ex) System.out.println(” 保存失败”);点击“取消”elsereturn;);mai n.setVisible(true); /*实现“取消”功能*退出程序*/class Can cleAct ion impi eme nts Action Liste nerp ublic void actionP erformed (Acti onEvent e) System.exit(0); /*实现“确定”功能*完成扫描*/class SubmitActi

32、o n impI eme nts Actio nListe nerp ublic void actionP erformed (Acti onEvent a)int minP ort;int maxP ort;int maxThread;int ip1 = 0; int ip2 = 0;int ip3 = 0; int ip start = 0;int ipend = 0;String ip address =""String host name =""ThreadSca n.Result.setText("");将"确定&

33、quot;按钮设置成为不可用if(ThreadSca n.Submit.isE nabled()ThreadSca n.Submit.setE nabled(false); /*判断搜索的类型*按照ip地址扫描:type = 0*按照主机名称扫描:type = 1*/if(ThreadSca n.radi olp .isSelected()TCP Thread.ty pe = 0;判断ip的前3位是否为int型tryip1=ln teger. parse In t(ThreadSca n.fromip 1.getText(); catch(NumberFormatExce pti on e)T

34、hreadScan.DLGINFO.setText(” 错误的 ip!");ThreadSca n.DLGError.setVisible(true); return;判断ip的46位是否为int型tryip2=ln teger. parse In t(ThreadSca n.fromip 2.getText(); catch(NumberFormatExce pti on e)ThreadScan.DLGINFO.setText(” 错误的 ip!");ThreadSca n.DLGError.setVisible(true); return; /判断ip的79位是否为i

35、nt型tryip 3=1 nteger. parsel nt(ThreadSca n.fromi p3.getText(); catch(NumberFormatExce pti on e)ThreadScan.DLGINFO.setText(” 错误的 ip!”);ThreadSca n.DLGError.setVisible(true); return;/判断起始ip的最后4位是否为int型tryip start= In teger. parse In t(ThreadSca n.fromip4 .getText(); catch(NumberFormatExce pti on e)Thr

36、eadScan.DLGINFO.setText(” 错误的 ip!");ThreadSca n.DLGError.setVisible(true);return;/判断目标ip的最后4位是否为int型tryipend=ln teger. parse In t(ThreadSca n.to ip. getText(); catch(NumberFormatExce pti on e)ThreadScan.DLGINFO.setText(” 错误的目标 ip!");ThreadSca n.DLGError.setVisible(true); return;/判断起始ip是否正确

37、/判断条件:大于0且小于等于255if(ip 1<0 II ip 1>255|i p2<0 | ip 2>255|i p3<0 | ip 3>255|i pstart<0 | ip start>255) ThreadScan.DLGINFO.setText(" ip 地址为 0-255 的整数!"); ThreadSca n.DLGError.setVisible(true);return;elseTCP Thread.i p1 = ip1;TCP Thread.i p2 = ip2;TCP Thread.i p3 = ip3

38、;TCP Thread.i pstart = ip start;/判断目标ip是否正确/判断条件:大于0且小于等于255if(ipen d<0 | ipen d>255)ThreadScan.DLGINFO.setText(” 目标 ip 地址为 0-255 的整数! ”);ThreadSca n.DLGError.setVisible(true); return;elseTCP Thread.i pend = ipend; ip address = "" + ip1 + ip2 + ip3 + ip start;/*判断ip地址的有效性*/tryTCP Thr

39、ead.hostAddress= In etAddress.getByName(i paddress);catch( UnknownH ostExce pti on e)ThreadScan.DLGINFO.setText(” 错误的 IP 或地址不可达!");ThreadSca n.DLGError.setVisible(true);return;根据主机名进行端口扫描if(ThreadSca n. radioHost.isSelected()TCP Thread.ty pe = 1;/*判断主机名称的有效性*/tryTCP Thread.hostAddress= In etAdd

40、ress.getByName(ThreadSca n. host name.getText(); catch( UnknownH ostExce ptio n e)ThreadScan.DLGINFO.setText(”错误的域名或地址不可达! ”);ThreadSca n.DLGError.setVisible(true);return; /*判断端口号的有效性*/tryminP ort=l nteger. parsel nt(ThreadSca n.mi nP ort.getText(); maxP ort= In teger. parse In t(ThreadSca n. max Po

41、rt.getText(); maxThread=I nteger. parsel nt(ThreadSca n. maxThread.getText();catch(NumberFormatExce ptio n e)ThreadScan.DLGINFO.setText(”错误的端口号或线程数!端口号和线程数必须为整数!");ThreadSca n.DLGError.setVisible(true);return;整数r);整数r?;/*判断最小端口号的有效范围*判断条件:大于 0且小于65535,最大端口应大于最小端口*/if(mi nPort<0 | minP ort>

42、;65535 | minP ort>max Port)ThreadScan.DLGINFO.setText(”最小端口必须是0-65535并且小于最大端口的ThreadSca n.DLGError.setVisible(true); return;elseTCP Thread.MIN _p ort=mi nP ort; "/*判断最大端口号的有效范围*判断条件:大于 0且小于65535,最大端口应大于最小端口*/if(max Po rt<0 | max Port>65535 | max Port<mi nPo rt)ThreadScan.DLGINFO.set

43、Text(”最大端口必须是 0-65535并且大于最小端口的ThreadSca n.DLGError.setVisible(true); return;elseTCP Thread.MAX_port=max Port; "/*判断线程数量的有效范围*判断条件:大于1且小于200*/if(maxThread<1 | maxThread>200)ThreadScan.DLGINFO.setText(” 线程数为 1-200 的整数! ”);ThreadSca n.DLGError.setVisible(true); return;ThreadScan.Result.appen

44、d("线程数"+ThreadScan.maxThread.getText()+"n");启动线程for(i nt i=0;i<maxThread;i+)new TCP Thread("T" + i,i).start(); /*实现错误提示框中的“确定”按钮功能*/class OKAction impi eme nts Action Liste nerP ublic void actionP erformed (Acti onEvent e)ThreadSca n.DLGError.dis po se();多线程类文件:impor

45、t java .n et.*;import java.io.*;import java.awt.*; import java.awt.eve nt.*; import javax.sw in g.*;P ublic class TCP Thread exte nds Threadp ublic static In etAddress hostAddress;最小的端口号public static int MIN_ port;最大的端口号public static int MAX_ port;线程总数p rivate int thread num;1为主机名/查询方式:0为ip ; p ubli

46、c static int type;/ip地址前3位 p ublic static int ip1;ip地址46位 p ublic static int ip2;ip地址79位 p ublic static int ip3;/起始ip地址的最后 p ublic static int ip start;结束ip地址的最后 p ublic static int ipend;完整的ip地址p ublic static String ip All;扫描的主机名称或ipString host name =""端口的类别Stri ng porttype = "0"/

47、*构造函数*/p ublic TCP Thread(Stri ng n ame,i nt thread num) super(n ame);this.thread num = thread num;/*运行函数*/p ublic void run() /ip地址 int h = 0;/端口号int i = 0;Socket theTC Psocket;根据ip地址进行扫描if(ty pe = 0)ip地址循环扫描for(h = ip start; h <=ipend; h+)组成完整的ip地址ip All = "" + ip1 + "." + ip

48、2 + "." + ip3 + "." + h; host name = ip All;try在给定主机名的情况下确定主机的IP地址hostAddress=In etAddress.getByName(i pAII);catch( UnknownH ostExce pti on e)< MAX_p Ort i+=/不同的端口循环扫描for (i =MIN_p ort+thread num;In teger. parse In t(ThreadSca n. maxThread.getText();In teger. parsel nt(ThreadS

49、ca n. maxThread.getText()trytheTC Psocket=new Socket(hostAddress,i);theTC Psocket.closeO;ThreadSca n.Result.a ppen d(host name+":"+i);判断端口的类别switch(i)case 21:portt ype = "(FT P)" break;case 23:portty pe = "(TELNET)" break;case 25:portty pe = "(SMT P)" break;ca

50、se 80:portty pe = "(HTT P)" break;case 110:portty pe = "(POP)" break;case 139:portty pe = "(n etBIOS)" break;case 1433:portty pe = "(SQL Server)"break;case 3389:p ortt ype = "(Term inal Service)" break;case 443: porttype = "(HTT PS)" break;case 1521: porttype = "(Oracle)" break;端口没有特定类别if(porttyp e.equals("0")T

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论