端口掃描程序設計(詳細的報告+源代碼)_第1頁
端口掃描程序設計(詳細的報告+源代碼)_第2頁
端口掃描程序設計(詳細的報告+源代碼)_第3頁
端口掃描程序設計(詳細的報告+源代碼)_第4頁
端口掃描程序設計(詳細的報告+源代碼)_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、網(wǎng)絡綜合實驗任務書一、 目的與要求1性質:設計性實驗。2 任務:設計并實現(xiàn)一個端口掃描程序, 檢測某個 ip 或某段 ip 的計算機的端口工作情況。3 目的:加深對課堂講授知識的理解, 熟練掌握基本的網(wǎng)絡編程技術和方法, 建立網(wǎng)絡編程整體概念,使得學生初步具有研究、設計、編制和調試網(wǎng)絡程序的能力。4 要求:熟悉有關定義、概念和實現(xiàn)算法, 設計出程序流程框圖和數(shù)據(jù)結構, 編寫出完整的源程序,基本功能完善,方便易用,操作無誤。5學生要求人數(shù):1 人。二、 主要內容1編寫一個端口掃描程序,能夠顯示某個ip 或某段 ip 的計算機的某一個或某些端口是否正在工作。基本工作過程如下:(1) 設定好一定的端

2、口掃描范圍;(2) 設定每個端口掃描的次數(shù),因為有可能有的端口一次掃描可能不通;(3) 創(chuàng)建 socket ,通過 socket 的 connect 方法來連接遠程 ip 地址以及對應的端口;(4) 如果返回 false ,表示端口沒有開放,否則端口開放。三、進度計劃序號設計內容完成時間備注1任務布置及資料收集第 1周周一、周二2軟件方案設計與制定第 1周周三至周四3編程實現(xiàn)第 1 周周周五至第2 周周二4程序測試與修改,撰寫報告第 2 周周三至周五上午5報告提交,軟件驗收周五下午四、設計成果要求1完成規(guī)定的實驗任務,保質保量;2完成綜合實驗報告,要求格式規(guī)范, 內容具體而翔實,應體現(xiàn)自身所做

3、的工作,注重對實驗思路的歸納和對問題解決過程的總結。五、 考核方式1平時成績驗收答辯實驗報告;2五級分制。學生姓名:指導教師:2009年 6 月 8 日一、綜合實驗的目的與要求1目的:加深對課堂講授知識的理解,熟練掌握基本的網(wǎng)絡編程技術和方法,建立網(wǎng)絡編程整體概念,加深對java編程語言的使用,促進編程能力的提高,同時為網(wǎng)絡編程打下一個比較好的基礎。同時對實驗的過程要有完全的了解。2. 要求:熟悉有關定義、概念和實現(xiàn)算法,設計出程序流程框圖和數(shù)據(jù)結構,編寫出完整的源程序,基本功能完善,方便易用,操作無誤。二、綜合實驗正文1編程語言的選擇針對編寫的是端口掃描的程序,所以我選擇了java 編程,因

4、為要簡單而方便的試驗端口掃描的功能。2端口掃描實現(xiàn)的功能是:顯示某個ip 或某段 ip 的計算機的某一個或某些端口是否正在工作2 1 如何選擇ip 段和端口創(chuàng)建 socket ,通過 socket 的 connect 方法來連接遠程ip 地址以及對應的端口。而我使用的是 socket函數(shù)來實現(xiàn)端口的掃描和ip 地址的選擇掃描。2 2 如何實現(xiàn)快速掃描端口通過實現(xiàn)多線程,當一個ip 或者一個端口同時分配多個線程進行掃描,速度會比單線程掃描快許多。2 3 顯示掃描結果可以在使用java編寫的時候,可以通過使用jscrollpane控件實現(xiàn)顯示結果。2 4 實現(xiàn)要求功能之余美化外觀3創(chuàng)建應用程序界面

5、3 1 建立主窗體,“ java端口掃描器”圖 1-13 2 ip地址的輸入部分圖 1-23 3 端口部分,其中包括指定的端口和指定掃描的端口范圍圖 1-33 4 多線程的實現(xiàn)和延時的控制部分圖 1-43 5 增加的保存及快捷鍵功能圖 1-54 掃描的整個過程4 1 填寫 ip 地址 00 204 2 填寫端口掃描的范圍為1 3004 3 線程數(shù)選擇為1004 4 掃描結果如下圖 1-6三端口掃描的主要部分程序如下import .*;import java.io.*;import java.awt.*;import java.awt.

6、event.*;import javax.swing.*;/* 實現(xiàn)掃描的主體程序*/public class threadscanpublic static jframe main=new jframe(java端口掃描器 );/ 顯示掃描結果public static jtextarea result=new jtextarea(,4,40);/ 滾動條面板publicstaticjscrollpaneresultpane=newjscrollpane(result,jscrollpane.vertical_scrollbar_as_needed, jscrollpane.horizont

7、al_scrollbar_as_needed;/ 輸入主機名文本框public static jtextfield hostname=new jtextfield(localhost,8);/ 輸入 ip 地址前 3 位的輸入框public static jtextfield fromip1=new jtextfield(0,3);/ 輸入 ip 地址 46 位的輸入框public static jtextfield fromip2=new jtextfield(0,3);/ 輸入 ip 地址 79 位的輸入框public static jtextfield fromip3=new jtext

8、field(0,3);/ 輸入起始 ip 地址最后 4 位的輸入框public static jtextfield fromip4=new jtextfield(0,3);/ 輸入目標 ip 地址最后 4 位的輸入框public static jtextfield toip=new jtextfield(0,3);/ 輸入最小端口的輸入框public static jtextfield minport=new jtextfield(0,4);/ 輸入最大端口的輸入框public static jtextfield maxport=new jtextfield(1000,4);/ 輸入最大線程數(shù)

9、量的輸入框public static jtextfield maxthread=new jtextfield(100,3);/ 錯誤提示框public static jdialog dlgerror=new jdialog(main,錯誤 !);public static jlabel dlginfo=new jlabel();public static jlabel type=new jlabel(請選擇: );/ 掃描類型public static jradiobutton radioip = new jradiobutton(ip地址: );public static jradiobut

10、ton radiohost= new jradiobutton( 主機名: ,true);/ 單選框組public static buttongroup group = new buttongroup();public static jlabel p1=new jlabel(端口范圍 :);public static jlabel p2=new jlabel();public static jlabel p3=new jlabel();public static jlabel pdot1 = new jlabel(.);public static jlabel pdot2 = new jlab

11、el(.);public static jlabel pdot3 = new jlabel(.);public static jlabel tnum=new jlabel(線程數(shù) :);public static jlabel rst=new jlabel(掃描結果 :);public static jlabel con=new jlabel();/ 定義按鈕public static jbutton ok = new jbutton(確定 );public static jbutton submit = new jbutton(開始掃描 );public static jbutton can

12、cel = new jbutton(退出 );public static jbutton savebutton = new jbutton(保存掃描結果 );/ 菜單欄public static jmenubar mybar = new jmenubar();public static jmenu mymenu = new jmenu(文件 (f);public static jmenuitem saveitem = new jmenuitem(保存掃描結果 (s);public static jmenuitem exititem = new jmenuitem(退出 (q);public s

13、tatic void main(string args)main.setsize(500,400);main.setlocation(300,300);main.setresizable(false);main.setlayout(new gridbaglayout();main.setdefaultcloseoperation(jframe.exit_on_close);dlgerror.setsize(300,100);dlgerror.setlocation(400,400);/ 添加“菜單欄”mymenu.add(saveitem);mymenu.add(exititem);mybar

14、.add(mymenu);main.setjmenubar(mybar);/ 設置熱鍵mymenu.setmnemonic(f);saveitem.setmnemonic (s);/ 為“另存為”組件設置快捷鍵為ctrl+ssaveitem.setaccelerator(keystroke.getkeystroke(keyevent.vk_s,inputevent .ctrl_mask);exititem.setmnemonic(q);exititem.setaccelerator(keystroke.getkeystroke(keyevent.vk_e,inputevent .ctrl_ma

15、sk);/ 采用表格包型布局container mpanel = main.getcontentpane();gridbagconstraints c = new gridbagconstraints();c.insets = new insets(10,0,0,10);c.gridx = 0;c.gridy = 0;c.gridwidth = 10;c.fill = gridbagconstraints.both;c.anchor = gridbagconstraints.center;mpanel.add(type,c);group.add(radioip);group.add(radio

16、host);c.gridx = 0;c.gridy = 1;c.gridwidth = 1;c.fill = gridbagconstraints.both;c.anchor = gridbagconstraints.center;mpanel.add(radioip,c);c.gridx = 1;c.gridy = 1;c.gridwidth = 1;c.fill = gridbagconstraints.both;c.anchor = gridbagconstraints.center;mpanel.add(fromip1,c);c.gridx = 2;c.gridy = 1;c.grid

17、width = 1;c.fill = gridbagconstraints.both;c.anchor = gridbagconstraints.center;mpanel.add(pdot1,c);c.gridx = 3;c.gridy = 1;c.gridwidth = 1;c.fill = gridbagconstraints.both;c.anchor = gridbagconstraints.center;mpanel.add(fromip2,c);c.gridx = 4;c.gridy = 1;c.gridwidth = 1;c.fill = gridbagconstraints.

18、both;c.anchor = gridbagconstraints.center;mpanel.add(pdot2,c);c.gridx = 5;c.gridy = 1;c.gridwidth = 1;c.fill = gridbagconstraints.both;c.anchor = gridbagconstraints.center;mpanel.add(fromip3,c);c.gridx = 6;c.gridy = 1;c.gridwidth = 1;c.fill = gridbagconstraints.both;c.anchor = gridbagconstraints.cen

19、ter;mpanel.add(pdot3,c);c.gridx = 7;c.gridy = 1;c.gridwidth = 1;c.fill = gridbagconstraints.both;c.anchor = gridbagconstraints.center;mpanel.add(fromip4,c);c.gridx = 8;c.gridy = 1;c.gridwidth = 1;c.fill = gridbagconstraints.both;c.anchor = gridbagconstraints.center;mpanel.add(p2,c);c.gridx = 9;c.gri

20、dy = 1;c.gridwidth = 1;c.fill = gridbagconstraints.both;c.anchor = gridbagconstraints.center;mpanel.add(toip,c);c.gridx = 0;c.gridy = 2;c.gridwidth = 1;c.fill = gridbagconstraints.both;c.anchor = gridbagconstraints.center;mpanel.add(radiohost,c);c.gridx = 1;c.gridy = 2;c.gridwidth = 3;c.fill = gridb

21、agconstraints.both;c.anchor = gridbagconstraints.center;mpanel.add(hostname,c);c.gridx = 0;c.gridy = 3;c.gridwidth = 1;c.fill = gridbagconstraints.both;c.anchor = gridbagconstraints.center;mpanel.add(p1,c);c.gridx = 1;c.gridy = 3;c.gridwidth = 1;c.fill = gridbagconstraints.both;c.anchor = gridbagcon

22、straints.center;mpanel.add(minport,c);c.gridx = 2;c.gridy = 3;c.gridwidth = 1;c.fill = gridbagconstraints.both;c.anchor = gridbagconstraints.center;mpanel.add(p3,c);c.gridx = 3;c.gridy = 3;c.gridwidth = 1;c.fill = gridbagconstraints.both;c.anchor = gridbagconstraints.center;mpanel.add(maxport,c);c.g

23、ridx = 0;c.gridy = 4;c.gridwidth = 1;c.fill = gridbagconstraints.both;c.anchor = gridbagconstraints.center;mpanel.add(tnum,c);c.gridx = 1;c.gridy = 4;c.gridwidth = 3;c.fill = gridbagconstraints.both;c.anchor = gridbagconstraints.center;mpanel.add(maxthread,c);c.gridx = 0;c.gridy = 5;c.gridwidth = 3;

24、c.fill = gridbagconstraints.vertical;c.anchor = gridbagconstraints.center;mpanel.add(submit,c);c.gridx = 6;c.gridy = 5;c.gridwidth = 4;c.fill = gridbagconstraints.vertical;c.anchor = gridbagconstraints.center;mpanel.add(cancel,c);c.gridx = 0;c.gridy = 6;c.gridwidth = 10;c.fill = gridbagconstraints.b

25、oth;c.anchor = gridbagconstraints.center;mpanel.add(rst,c);/ 設置文本區(qū)域可以換行result.setlinewrap(true);/ 設置文本區(qū)域不可編輯result.seteditable(false);c.gridx = 0;c.gridy = 7;c.gridwidth = 10;c.gridheight = 4;c.fill = gridbagconstraints.vertical;c.anchor = gridbagconstraints.center;mpanel.add(resultpane,c);container

26、 dpanel = dlgerror.getcontentpane();dpanel.setlayout(new flowlayout(flowlayout.center);dpanel.add(dlginfo);dpanel.add(ok);submit.addactionlistener(new submitaction();cancel.addactionlistener(new cancleaction();ok.addactionlistener(new okaction();/ 實現(xiàn)退出功能exititem.addactionlistener(new java.awt.event.

27、actionlistener() public void actionperformed(java.awt.event.actionevent e) system.exit(0););/ 實現(xiàn)幫助功能savebutton.addactionlistener(new java.awt.event.actionlistener() public void actionperformed(java.awt.event.actionevent e) jfilechooser fc=new jfilechooser();int returnval=fc.showsavedialog(null);/ 點擊

28、“保存” if(returnval = 0)file savefile=fc.getselectedfile();try filewriter writeout = new filewriter(savefile);writeout.write(threadscan.result.gettext();writeout.close();catch (ioexception ex) system.out.println(保存失敗 );/ 點擊“取消”elsereturn;);main.setvisible(true);/* 實現(xiàn)“取消”功能* 退出程序*/class cancleaction im

29、plements actionlistenerpublic void actionperformed (actionevent e)system.exit(0);/* 實現(xiàn)“確定”功能* 完成掃描*/class submitaction implements actionlistenerpublic void actionperformed (actionevent a)int minport;int maxport;int maxthread;int ip1 = 0;int ip2 = 0;int ip3 = 0;int ipstart = 0;int ipend = 0;string ip

30、address = ;string hostname = ;threadscan.result.settext();/ 將 確定 按鈕設置成為不可用if(threadscan.submit.isenabled()threadscan.submit.setenabled(false);/* 判斷搜索的類型* 按照 ip 地址掃描: type = 0* 按照主機名稱掃描: type = 1*/if(threadscan.radioip.isselected()tcpthread.type = 0;/ 判斷 ip 的前 3 位是否為 int 型tryip1=integer.parseint(thre

31、adscan.fromip1.gettext();catch(numberformatexception e)threadscan.dlginfo.settext(錯誤的 ip!);threadscan.dlgerror.setvisible(true);return;/ 判斷 ip 的 46 位是否為 int 型 tryip2=integer.parseint(threadscan.fromip2.gettext();catch(numberformatexception e)threadscan.dlginfo.settext(錯誤的 ip!);threadscan.dlgerror.se

32、tvisible(true);return;/ 判斷 ip 的 79 位是否為 int 型 tryip3=integer.parseint(threadscan.fromip3.gettext();catch(numberformatexception e)threadscan.dlginfo.settext(錯誤的 ip!);threadscan.dlgerror.setvisible(true);return;/ 判斷起始 ip 的最后 4 位是否為 int 型tryipstart=integer.parseint(threadscan.fromip4.gettext();catch(nu

33、mberformatexception e)threadscan.dlginfo.settext(錯誤的 ip!);threadscan.dlgerror.setvisible(true);return;/ 判斷目標 ip 的最后 4 位是否為 int 型 tryipend=integer.parseint(threadscan.toip.gettext();catch(numberformatexception e) threadscan.dlginfo.settext( 錯誤的目標 ip!); threadscan.dlgerror.setvisible(true);return;/ 判斷

34、起始 ip 是否正確/ 判斷條件:大于 0 且小于等于 255if(ip1255|ip2255|ip3255|ipstart255)threadscan.dlginfo.settext( ip地址為0-255的整數(shù)! );threadscan.dlgerror.setvisible(true);return;elsetcpthread.ip1 = ip1;tcpthread.ip2 = ip2;tcpthread.ip3 = ip3;tcpthread.ipstart = ipstart;/ 判斷目標 ip 是否正確/ 判斷條件:大于 0 且小于等于 255if(ipend255)thread

35、scan.dlginfo.settext( 目標 ip 地址為 0-255 的整數(shù) ! ); threadscan.dlgerror.setvisible(true); return;elsetcpthread.ipend = ipend;ipaddress = + ip1 + ip2 + ip3 + ipstart;/* 判斷 ip 地址的有效性*/trytcpthread.hostaddress=inetaddress.getbyname(ipaddress);catch(unknownhostexception e)threadscan.dlginfo.settext(錯誤的 ip 或地

36、址不可達 ! );threadscan.dlgerror.setvisible(true);return;/ 根據(jù)主機名進行端口掃描 if(threadscan.radiohost.isselected()tcpthread.type = 1;/* 判斷主機名稱的有效性*/trytcpthread.hostaddress=inetaddress.getbyname(threadscan.hostname.gettext();catch(unknownhostexception e)threadscan.dlginfo.settext(錯誤的域名或地址不可達! );threadscan.dlge

37、rror.setvisible(true);return;/* 判斷端口號的有效性*/tryminport=integer.parseint(threadscan.minport.gettext(); maxport=integer.parseint(threadscan.maxport.gettext(); maxthread=integer.parseint(threadscan.maxthread.gettext();catch(numberformatexception e)threadscan.dlginfo.settext(錯誤的端口號或線程數(shù)! 端口號和線程數(shù)必須為整數(shù) !);t

38、hreadscan.dlgerror.setvisible(true);return;/* 判斷最小端口號的有效范圍* 判斷條件:大于 0 且小于 65535,最大端口應大于最小端口*/if(minport65535 | minportmaxport)threadscan.dlginfo.settext(最小端口必須是0-65535并且小于最大端口的整數(shù) !);threadscan.dlgerror.setvisible(true);return;elsetcpthread.min_port=minport;/* 判斷最大端口號的有效范圍* 判斷條件:大于 0 且小于 65535,最大端口應大

39、于最小端口*/if(maxport65535 | maxportminport)threadscan.dlginfo.settext(最大端口必須是0-65535并且大于最小端口的整數(shù) !);threadscan.dlgerror.setvisible(true);return;elsetcpthread.max_port=maxport;/* 判斷線程數(shù)量的有效范圍* 判斷條件:大于 1 且小于 200*/if(maxthread200) threadscan.dlginfo.settext( 線程數(shù)為 1-200 的整數(shù) ! ); threadscan.dlgerror.setvisibl

40、e(true);return;threadscan.result.append( 線 程 數(shù) +threadscan.maxthread.gettext()+n);/ 啟動線程for(int i=0;imaxthread;i+)new tcpthread(t + i,i).start();/* 實現(xiàn)錯誤提示框中的“確定”按鈕功能*/class okaction implements actionlistenerpublic void actionperformed (actionevent e)threadscan.dlgerror.dispose();多線程類文件:import java.n

41、et.*;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class tcpthread extends threadpublic static inetaddress hostaddress;/ 最小的端口號public static int min_port;/ 最大的端口號public static int max_port;/ 線程總數(shù)private int threadnum;/ 查詢方式: 0 為 ip ; 1 為主機名public static int t

42、ype;/ip地址前 3 位public static int ip1;/ip地址 46 位public static int ip2;/ip地址 79 位public static int ip3;/ 起始 ip 地址的最后 4 位 public static int ipstart;/ 結束 ip 地址的最后 4 位 public static int ipend;/ 完整的 ip 地址public static string ipall;/ 掃描的主機名稱或 ip string hostname = ;/ 端口的類別string porttype = 0;/* 構造函數(shù)*/public

43、tcpthread(string name,int threadnum)super(name);this.threadnum = threadnum;/* 運行函數(shù)*/public void run() /ip地址int h = 0;/ 端口號int i = 0;socket thetcpsocket;/ 根據(jù) ip 地址進行掃描if(type = 0)/ip地址循環(huán)掃描for(h = ipstart; h =ipend; h+)/ 組成完整的 ip 地址ipall = + ip1 + . + ip2 + . + ip3 + . + h;hostname = ipall;try/ 在給定主機名

44、的情況下確定主機的 ip hostaddress=inetaddress.getbyname(ipall);地址catch(unknownhostexception e)/ 不同的端口循環(huán)掃描for(i=min_port+threadnum;imax_port+integer.parseint(threadscan.maxthread.gettext();i+=integer.parseint(threadscan.maxthread.gettext()trythetcpsocket=new socket(hostaddress,i);thetcpsocket.close();threadsc

45、an.result.append(hostname+:+i);/ 判斷端口的類別switch(i)case 21:porttype = (ftp);break;case 23:porttype = (telnet);break;case 25:porttype = (smtp);break;case 80:porttype = (http);break;case 110:porttype = (pop);break;case 139:porttype = (netbios);break;case 1433:porttype = (sql server);break;case 3389:porttype = (terminal se

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論