版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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)建應用程序界面3 1 建
5、立主窗體,“ java 端口掃描器”圖 1-13 2 ip 地址的輸入部分圖 1-2.3 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.ev
6、ent.*;import javax.swing.*;/* 實現(xiàn)掃描的主體程序*/public class threadscanpublic static jframe main=new jframe(ja va 端口掃描器 );/顯示掃描結果public static jtextarea result=new jtextarea(,4,40);/滾動條面板public static jscroll paneresultpane = newjscrollpane(result,jscrollpane.vertical_scrollbar_as_needed, jscrollpane.horiz
7、ontal_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ù)量的輸入框pu
9、blic 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 jradiobutton ra
10、diohost = 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 jlabel(.)
11、;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 cancel =
12、 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 sta
13、tic 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.ad
14、d(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_ mask);.
15、/采用表格包型布局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(radiohost)
16、;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.gridwidth
17、 = 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.both;
18、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.center;
19、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.gridy =
20、 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 = gridbagco
21、nstraints.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 = gridbagconstra
22、ints.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.grid
23、x = 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;c.f
24、ill = 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.both
25、;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 dpa
26、nel = 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.actio
27、nlistener() 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);/點擊“保存”if(
28、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 implement
29、s 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 ipaddress
30、 = ;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(threadscan
31、.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.set
32、visible(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(n
33、umberformatexception 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 且小于等于 255 if(ipend25
35、5).threadscan.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(錯
36、誤的 ip 或地址不可達 !);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( 錯誤的域名或地址不可達! );threadsca
37、n.dlgerror.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ù)必須為
38、整數(shù) !);threadscan.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 且小于 65
39、535,最大端口應大于最小端口*/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.dlger
40、ror.setvisible(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();.多線程類文件:impo
41、rt .*;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 i
42、nt type;/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;/掃描的主機名稱或ipstring hostname = ;/端口的類別string porttype = 0;/* 構造函數(shù)*/public tcpt
43、hread(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();threadscan.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
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二手車銷售合同樣本二
- 重構版物業(yè)管理忠誠協(xié)議
- 中日技術合作協(xié)議合同
- 產(chǎn)品銷售與分銷合同協(xié)議
- 個人合伙經(jīng)營合同
- 個人與代理:人事代理合同一
- 個人與公司融資合同范本參考
- 個人抵押擔保借款合同全文
- 扶貧協(xié)議書范文
- 涉及孩子離婚完整協(xié)議
- 術后肺炎預防和控制專家共識解讀課件
- 中石化高級職稱英語考試
- 小學五年級英語閱讀理解(帶答案)
- 2024二十屆三中全會知識競賽題庫及答案
- 2-3-分子生物學與基因工程
- 2024年全國統(tǒng)一考試高考新課標Ⅱ卷語文+數(shù)學+英語試題(真題+答案)
- (正式版)YS∕T 5040-2024 有色金屬礦山工程項目可行性研究報告編制標準
- 2024年全國甲卷高考化學真題試題(原卷版+含解析)
- 焦煤集團5MW10MWh儲能技術方案
- JT-T-617.7-2018危險貨物道路運輸規(guī)則第7部分:運輸條件及作業(yè)要求
- 小學一年級拼音天天練
評論
0/150
提交評論