實(shí)驗(yàn)五 端口掃描器實(shí)驗(yàn)報(bào)告(付代碼)_第1頁(yè)
實(shí)驗(yàn)五 端口掃描器實(shí)驗(yàn)報(bào)告(付代碼)_第2頁(yè)
實(shí)驗(yàn)五 端口掃描器實(shí)驗(yàn)報(bào)告(付代碼)_第3頁(yè)
實(shí)驗(yàn)五 端口掃描器實(shí)驗(yàn)報(bào)告(付代碼)_第4頁(yè)
實(shí)驗(yàn)五 端口掃描器實(shí)驗(yàn)報(bào)告(付代碼)_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)驗(yàn)5:端口掃描器的設(shè)計(jì)與實(shí)現(xiàn)姓名:學(xué)號(hào):專(zhuān)業(yè)年級(jí):(一)實(shí)驗(yàn)?zāi)康暮蛢?nèi)容:目的:加深對(duì)TCP的理解,學(xué)習(xí)端口掃描技術(shù)和原理,熟悉socket編程。內(nèi)容:實(shí)現(xiàn)一個(gè)掃描器,使用TCPconnect進(jìn)行端口掃描,并對(duì)掃描結(jié)果進(jìn)行記錄。(二)課程設(shè)計(jì)要求:Windows或Linux環(huán)境下,程序在單機(jī)上運(yùn)行;使用端口掃描器對(duì)一臺(tái)主機(jī)進(jìn)行掃描,并顯示出結(jié)果;編程語(yǔ)言不限;提供友好的用戶界面。(三)端口掃描技術(shù):“端口”是專(zhuān)門(mén)為計(jì)算機(jī)通信而設(shè)計(jì)的,它不是硬件,不同于計(jì)算機(jī)中的“插槽”,可以說(shuō)是個(gè)“軟插槽”?!岸丝凇笔怯捎?jì)算機(jī)的通信協(xié)議TCP/IP協(xié)議定義的。其中規(guī)定,用IP地址和端口作為套接字,它代表TCP連接的一個(gè)連接端,一般稱(chēng)為Socket。具體來(lái)說(shuō),就是用[IP:端口]來(lái)定位一臺(tái)主機(jī)中的進(jìn)程。計(jì)算機(jī)就像一座大樓,這個(gè)大樓有好多入口(端口),進(jìn)到不同的入口中就可以找到不同的公司(進(jìn)程)。端口與進(jìn)程是一一對(duì)應(yīng)的,入侵者通過(guò)掃描端口,便可以判斷出目標(biāo)計(jì)算機(jī)有哪些通信進(jìn)程正在等待連接。(四)掃描端口的目的:端口掃描是入侵者搜集信息的幾種常用手法之一,也正是這一過(guò)程最容易使入侵者暴露自己的身份和意圖。 ?判斷目標(biāo)主機(jī)上開(kāi)放了哪些服務(wù); ?判斷目標(biāo)主機(jī)的操作系統(tǒng)。如果入侵者掌握了目標(biāo)主機(jī)開(kāi)放了哪些服務(wù),運(yùn)行何種操作系統(tǒng),他們就能夠使用相應(yīng)的手段實(shí)現(xiàn)入侵。(五)端口的分類(lèi):端口是一個(gè)16bit的地址,用端口號(hào)進(jìn)行標(biāo)識(shí)不同的作用。端口一般分為兩類(lèi)。 ?熟知端口號(hào)(公認(rèn)端口號(hào)):由因特網(wǎng)指派名字和號(hào)碼公司ICANN負(fù)責(zé)分配給一些常用的應(yīng)用層程序固定使用的熟知端口,其數(shù)值一般為0~1023。 ?一般端口號(hào):用來(lái)隨時(shí)分配給請(qǐng)求通信的客戶進(jìn)程。(六)掃描原理的基礎(chǔ)知識(shí):TCP/IP模型四層結(jié)構(gòu)TCP與UDP協(xié)議TCP報(bào)文結(jié)構(gòu)TCP連接和釋放過(guò)程TCP/IP模型四層結(jié)構(gòu):TCP與UDP協(xié)議:Internet的網(wǎng)絡(luò)通信大多是建立在這兩個(gè)協(xié)議之上的,各個(gè)主機(jī)遵循著TCP/IP協(xié)議封裝數(shù)據(jù)包進(jìn)行通信。傳輸控制協(xié)議TCP(TransmissionControlProtocol):TCP提供可靠的、面向連接的運(yùn)輸服務(wù),用于高可靠性數(shù)據(jù)的傳輸。TCP具有完善的錯(cuò)誤檢測(cè)與恢復(fù)、順序控制和流量控制等功能。注重可靠性的場(chǎng)合一般使用TCP協(xié)議,例如FTP、Telnet。用戶數(shù)據(jù)報(bào)協(xié)議UDP(UserDatagramProtocol):UDP在傳送數(shù)據(jù)之前不需要先建立連接。遠(yuǎn)地主機(jī)的運(yùn)輸層在收到UDP數(shù)據(jù)報(bào)后,不需要給出任何確認(rèn)。廣泛應(yīng)用于只需一次的C/S模式的請(qǐng)求-應(yīng)答查詢(xún),或者要求提供高效率數(shù)據(jù)傳輸?shù)膱?chǎng)合。注重實(shí)時(shí)性、傳輸率、吞吐量的場(chǎng)合一般使用UDP,如QQ。(九)TCPconnect掃描:實(shí)現(xiàn)原理:通過(guò)調(diào)用socket函數(shù)connect()連接到目標(biāo)計(jì)算機(jī)上,完成一次完整的三次握手過(guò)程。如果端口處于偵聽(tīng)狀態(tài),那么connect()就能成功返回。否則,這個(gè)端口不可用,即沒(méi)有提供服務(wù)。優(yōu)點(diǎn):穩(wěn)定可靠,不需要特殊的權(quán)限。缺點(diǎn):掃描方式不隱蔽,服務(wù)器日志會(huì)記錄下大量密集的連接和錯(cuò)誤記錄,并容易被防火墻發(fā)現(xiàn)和屏蔽。實(shí)驗(yàn)設(shè)計(jì)流程:原理概述通過(guò)調(diào)用socket函數(shù)connect()連接到目標(biāo)計(jì)算機(jī)上,完成一次完整的三次握手過(guò)程。如果端口處于偵聽(tīng)狀態(tài),那么connect()就能成功返回。否則,這個(gè)端口不可用,即沒(méi)有提供服務(wù)。運(yùn)行環(huán)境本掃描軟件用java語(yǔ)言開(kāi)發(fā),可穩(wěn)定的運(yùn)行在linux和windows環(huán)境下?;驹O(shè)計(jì)思路用戶界面:使用java里面的swing包來(lái)開(kāi)發(fā)用戶界面;端口掃描:使用socket函數(shù)connect()連接目標(biāo)計(jì)算機(jī)來(lái)判定是否目標(biāo)計(jì)算機(jī)開(kāi)放了要測(cè)試的端口;.功能模塊設(shè)計(jì)本軟件只有一個(gè)功能模塊,就是是指定主機(jī)的端口掃描。5.程序流程及主要算法核心算法是TCP的連接函數(shù) Socketsocket=newSocket(host,port); //建立套接字if(socket.isConnected()) //判斷端口號(hào)是否開(kāi)放 { jta.append("port:"+port+"isopen!\n"); list.add(String.valueOf(port));.............程序使用說(shuō)明(1)運(yùn)行程序輸入IP地址、開(kāi)始端口號(hào)、技術(shù)端口號(hào),點(diǎn)擊“開(kāi)始掃描”可以看到開(kāi)放端口號(hào)與未開(kāi)放端口號(hào),得到如下結(jié)果:7.程序分析與總結(jié)本程序使用java語(yǔ)言開(kāi)發(fā),可以穩(wěn)定的運(yùn)行在windows和linux系統(tǒng)下,不過(guò)程序是單線程的掃描起來(lái)比較慢。附錄-源程序代碼文件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;//構(gòu)建窗口 privateJTextFieldjtf,jtf2,jtf3;//3個(gè)文本 privateJLabel[]label=newJLabel[6];//6個(gè)標(biāo)簽 privateintstartPort,endPort;//端口 privateInetAddresshost;//取得本機(jī)IP privateJButtonbtn,stop;//點(diǎn)擊事件 privateJTextAreajta,jta2;//2個(gè)顯示純文本的多行區(qū)域 privateJScrollPanejspane,jspane2;//滾動(dòng)條 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);//兩個(gè)豎直滾動(dòng)條 list=newArrayList<String>(); jtf=newJTextField(20); jtf2=newJTextField(20); jtf3=newJTextField(20);//20個(gè)字符 label[0]=newJLabel("端口掃描程序"); label[1]=newJLabel("主機(jī)地址:"); label[2]=newJLabel("開(kāi)始端口號(hào):"); label[3]=newJLabel("結(jié)束端口號(hào):"); label[4]=newJLabel("開(kāi)放端口:"); label[5]=newJLabel("未開(kāi)放端口:"); btn=newJButton("開(kāi)始掃描"); 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);//主機(jī)地址: jtf.setBounds(150,100,200,30); label[1].setForeground(Color.BLUE);//藍(lán)色 label[2].setBounds(30,150,300,30);//開(kāi)始端口號(hào): jtf2.setBounds(150,150,200,30); label[2].setForeground(Color.BLUE); label[3].setBounds(30,200,300,30);//結(jié)束端口號(hào): jtf3.setBounds(150,200,200,30); label[3].setForeground(Color.BLUE); label[4].setBounds(30,280,200,30);//開(kāi)放端口: label[5].setBounds(220,280,200,30);//未開(kāi)放端口: label[4].setForeground(Color.BLUE); label[5].setForeground(Color.BLUE); btn.setBounds(90,250,100,30);//開(kāi)始掃描 btn.addActionListener(this); stop.setBounds(220,250,100,30);//停止掃描 stop.addActionListener(this); stop.setEnabled(false); jspane.setBounds(30,310,150,230);//結(jié)果顯示 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); //獲取用戶輸入的地址和端口號(hào) Stringip=jtf.getText(); Stringsport=jtf2.getText(); Stringeport=jtf3.getText(); //對(duì)用戶的輸入進(jìn)行驗(yàn)證 if(ip.equals("")||ip==null) { JOptionPane.showMessageDialog(wind,"請(qǐng)輸入主機(jī)地址!"); return; }else { try{ host=InetAddress.getByName(ip); }catch(UnknownHostExceptione1){ JOptionPane.showMessageDialog(wind,"請(qǐng)輸入有效的主機(jī)地址!"); System.out.println("host初始化失敗"); return; //e1.printStackTrace(); } } if(sport.equals("")||sport==null) { JOptionPane.showMessageDialog(wind,"請(qǐng)輸入開(kāi)始掃描的端口號(hào)!"); return; }else { startPort=Integer.parseInt(sport); } if(eport.equals("")||eport==null) { JOptionPane.showMessageDialog(wind,"請(qǐng)輸入結(jié)束掃描的端口號(hào)!"); return; }else { endPort=Integer.parseInt(eport); if(endPort<startPort) { JOptionPane.showMessageDialog(wind,"您輸入的結(jié)束端口號(hào)太小,請(qǐng)重新輸入!"); return; } } //jta.append("開(kāi)始掃描端口了。。。。。。。。。。。\n"); JOptionPane.showMessageDialog(wind,"開(kāi)始掃描!"); 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);//清空保存的端口數(shù)據(jù) } } @Override publicvoidrun(){ intport=startPort;//正在掃描的端口號(hào) while(port<=endPort){ //循環(huán)掃描指定范圍的端口 try{ Socketsocket=newSocket(host,port); //建立套接字 if(socket.isConnected()) //判斷端口號(hào)是否開(kāi)放 { jta.append("port:"+port+"isopen!\n"); list.add(String.valueOf(port)); intheight=8; Pointp=newPoint(); p.setLocation(0,this.jta.getLineCount()*height)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論