操作系統(tǒng)課程設(shè)計-基于TCP端口掃描程序_第1頁
操作系統(tǒng)課程設(shè)計-基于TCP端口掃描程序_第2頁
操作系統(tǒng)課程設(shè)計-基于TCP端口掃描程序_第3頁
操作系統(tǒng)課程設(shè)計-基于TCP端口掃描程序_第4頁
操作系統(tǒng)課程設(shè)計-基于TCP端口掃描程序_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PAGEPAGE12仲愷農(nóng)業(yè)工程學(xué)院課程設(shè)計報告課程名稱:操作系統(tǒng)題目:基于TCP端口掃描程序院系:班級:姓名:學(xué)號:指導(dǎo)老師:目錄1需求分析 11.1課題背景 11.2本課題研究意義 11.3安全掃描技術(shù)的產(chǎn)生及其發(fā)展趨勢 11.4安全掃描技術(shù)的分類 22端口掃描的相關(guān)知識 32.1網(wǎng)絡(luò)端口掃描原理 32.2端口 42.3相關(guān)協(xié)議 42.4掃描的定義 62.5多線程技術(shù) 62.6網(wǎng)絡(luò)套接字編程 73概要設(shè)計 83.1整體設(shè)計框架 83.2流程圖描述 94詳細(xì)設(shè)計 114.1開法環(huán)境 114.2界面設(shè)計 114.3主要類說明 124.4代碼描述 124.4.1基本信息檢測模塊 124.4.2參數(shù)設(shè)計模塊 124.4.3端口掃描模塊 154.4.4結(jié)果輸出模塊 165調(diào)試分析 185.1編譯及運行程序 185.2系統(tǒng)主界面 185.3子系統(tǒng)功能測試 186總結(jié) 21參考文獻(xiàn) 221需求分析1.1課題背景在21世紀(jì)的今天,計算機發(fā)展日新月異,伴隨著網(wǎng)絡(luò)技術(shù)的飛速更新,網(wǎng)絡(luò)規(guī)模迅速增長和計算機系統(tǒng)的日益復(fù)雜,導(dǎo)致新的系統(tǒng)漏洞層出不窮,一些別有用心的人或者木馬程序要想順利的滲透一臺聯(lián)網(wǎng)的計算機,無論使用何種技術(shù),首先必然要尋找計算機的漏洞來為自己的入侵打開大門。端口掃描器是一把雙刃劍,端口掃描器的產(chǎn)生可以使網(wǎng)絡(luò)中的計算機及時的發(fā)現(xiàn)主機的開放與未開放的端口狀態(tài)。計算機的端口掃描技術(shù)是一種基于主動防御型的策略的重要技術(shù)手段。本課題通過對計算機端口掃描器的研究來提高對網(wǎng)絡(luò)中計算機的安全的認(rèn)識。本端口掃描器采用Java語言和JavaSocket編程原理開發(fā),在Ubuntu操作系統(tǒng)下通過測試。掃描主機通過TCP/IP協(xié)議的三次握手與目標(biāo)主機的指定端口建立一次完整的連接,如果目標(biāo)主機的此端口在規(guī)定時間內(nèi)有回復(fù),則說明該端口是開放的。利用多線程技術(shù)實現(xiàn)了對一目標(biāo)IP進(jìn)行設(shè)定數(shù)目的端口掃描。這種掃描器可以在輸入IP的情況下,對指定的端口范圍進(jìn)行掃描。1.2本課題研究意義現(xiàn)代社會是信息化網(wǎng)絡(luò)化的社會,信息是社會發(fā)展的重要資源。信息安全的保障能力是一個國家的綜合國力經(jīng)濟競爭實力和生存能力的重要組成部分,是世界各國在奮力攀登的制高點。網(wǎng)絡(luò)安全是指網(wǎng)絡(luò)系統(tǒng)的硬件軟件及其系統(tǒng)中的數(shù)據(jù)受到保護(hù),不會因為偶然的或者惡意的原因而遭到破壞、更改、泄漏,系統(tǒng)連續(xù)可靠的正常的運行。網(wǎng)絡(luò)安全包括技術(shù)領(lǐng)域和非技術(shù)領(lǐng)域兩大部分:非技術(shù)領(lǐng)域包括一些制度政策管理安全意識是填權(quán)等方面的內(nèi)容;技術(shù)領(lǐng)域包括:隱患掃描、防火墻、入侵檢測、訪問控制、虛擬專用網(wǎng)、CA認(rèn)證、操作系統(tǒng)等方面的內(nèi)容。這些技術(shù)的目標(biāo)是保證信息的可控性、可用性、保密性、完整性和不可抵賴性。1.3安全掃描技術(shù)的產(chǎn)生及其發(fā)展趨勢隨著Internet的不斷發(fā)展,信息安全技術(shù)已經(jīng)成為促進(jìn)經(jīng)濟發(fā)展、社會進(jìn)步的巨大推動了。端口掃描技術(shù)是網(wǎng)絡(luò)安全掃描技術(shù)的一個重要的網(wǎng)絡(luò)安全技術(shù),與防火墻、入侵檢測系統(tǒng)相互配合,能夠有效地提高網(wǎng)絡(luò)安全性。安全掃描是安全技術(shù)領(lǐng)域中的重要的一類。通過掃描能自動檢測遠(yuǎn)程或者本地的主機系統(tǒng)的信息,包括主機的基本信息(如計算機名、域名、組名、操作系統(tǒng)類型號等)、服務(wù)信息、用戶信息以及漏洞信息,它的重要性在于能夠?qū)W(wǎng)絡(luò)進(jìn)行安全評估,及時發(fā)現(xiàn)安全隱患,防患于未然。任何技術(shù)的誕生都有深刻的思想基礎(chǔ),人們在對“安全”認(rèn)識逐步深化的過程中,不斷地提出新的安全理論并付諸實踐。在這個認(rèn)識的過程中有兩次重大的飛躍:第一次飛躍式早在二十世紀(jì)八十年代,人們認(rèn)為信息安全就是信息的保密性,相應(yīng)的采取保障措施就是利用加密機制和基于計算機規(guī)則的訪問控制。這個時期防火墻和入侵檢測系統(tǒng)(IDS)進(jìn)一步發(fā)展起來,并在保護(hù)內(nèi)部網(wǎng)絡(luò)中起到了積極作用。DanFame和WeitseVenema提出了劃時代的隱患掃描思想,既然黑客可以查找系統(tǒng)的漏洞,并且針對這些漏洞對系統(tǒng)進(jìn)行攻擊,那么隱患掃描程序就可以采取與黑客相同的方法找到系統(tǒng)漏洞,并且將他們加以修復(fù),起到主動防御的作用。第二次飛躍就是在被動防護(hù)的基礎(chǔ)上,提出了主動防御的思想。這就促進(jìn)了安全掃描的技術(shù)的誕生。安全掃描的主動防御思想滲透到了許多其他的安全領(lǐng)域。安全掃描軟件從最初的專門為UNIX系統(tǒng)編寫的一些只具有簡單的功能的小程序,發(fā)展到現(xiàn)在,已經(jīng)成為可以用在多個系統(tǒng)的具有復(fù)雜的功能的商業(yè)程序。今后的發(fā)展趨勢,我認(rèn)為有以下幾點:使用插件或者叫做功能模塊技術(shù)。每個插件都封裝一個或多個漏洞測試手段,主掃描程序通過代用插件的方法來執(zhí)行掃描。僅僅是添加新的插件就可以使軟件增加新功能,掃描更多漏洞。在插件編寫的規(guī)范公布的情況下,用戶或者第三方公司甚至可以編寫自己的插件來擴充軟件的功能。同時這種技術(shù)使軟件的升級維護(hù)都變得相對輕松,并且具有非常強的擴展性。由安全掃描程序到安全評估專家系統(tǒng)。最早的安全掃描程序只是簡單的把各個掃描測試項目執(zhí)行結(jié)果羅列出來,直接提供給測試者而不對信息進(jìn)行任何分析處理。而當(dāng)前較為成熟的掃描系統(tǒng)都能夠?qū)蝹€主機的掃描結(jié)果進(jìn)行整理,形成報表能夠并對具體漏洞提出一些解決方法,但對網(wǎng)絡(luò)的狀況缺乏一個整體的評估,對網(wǎng)絡(luò)安全沒有系統(tǒng)的解決方案。未來的安全掃描系統(tǒng),應(yīng)該不但能夠掃描安全漏洞,還能夠智能化的協(xié)助網(wǎng)絡(luò)信息管理人員評估本網(wǎng)絡(luò)的安全狀況,給出安全建議,成為安全評估專家的系統(tǒng)。1.4安全掃描技術(shù)的分類安全掃描技術(shù)工具是一把雙刃劍,既可以被網(wǎng)絡(luò)管理員利用就,又可以被黑客利用。端口掃描技術(shù)和漏洞檢測技術(shù)是就安全掃描技術(shù)中的關(guān)鍵技術(shù)。下面專門介紹本軟件的側(cè)重點端口掃描技術(shù)。端口掃描屬于安全探測技術(shù)范疇,對應(yīng)于網(wǎng)絡(luò)攻擊技術(shù)中的網(wǎng)絡(luò)信息收集技術(shù)。黑客能否進(jìn)入“房間”,關(guān)鍵在于他是否發(fā)現(xiàn)了打開了“門窗”。也就是說,關(guān)鍵是能否準(zhǔn)確的收集系統(tǒng)信息。黑客要做的就是構(gòu)造目標(biāo)網(wǎng)絡(luò)中的所有系統(tǒng)地圖,包括操作系統(tǒng)的類型,版本號以及可以在其上運行的服務(wù)等。黑客手工收集信息一般遵循以下步驟:(1)獲取主機名與IP地址:可以通過使用whois與nslookup等工具。(2)獲得操作系統(tǒng)類型信息:標(biāo)識的最快方法就是試圖telnet至該系統(tǒng),從標(biāo)識來判斷。(3)FTP信息:黑客將測試是否開放FTP服務(wù),匿名FTP是否可用,若可用,則試圖發(fā)掘更多的潛在問題。(4)TCP/UDP掃描:對于TCP,telnet可以用來試圖與某一特定端口連接,這也是手工掃描的基本方法。從返回的標(biāo)識可以得到更多的信息。從中再分析系統(tǒng)是否開放RPC服務(wù)、FINGER,RUSERS和RWHO等比較危險的服務(wù)。這樣,到這里為止,黑客完成了對遠(yuǎn)程系統(tǒng)信息的手工掃描。端口掃描軟件就是要盡可能的自動地模擬黑客的掃描手段。根據(jù)端口掃描的方法的不同,端口掃描技術(shù)分為五大類:全開掃描:通過完整的TCP連接探查端口。主要有TCPconnect,反向ident.半開掃描:通過不完整的TCP連接探查端口。主要有SYNflag,IPIDheader"dumbscan".隱蔽掃描(stealthscanning):利用FIN字段來探查端口。不包含標(biāo)準(zhǔn)三次握手的任一部分。主要有SMACKflag,ACKflags,NULLflags,ALLflags(XMAS).IP段掃描((sweepsscanning):同時對一個網(wǎng)段進(jìn)行掃描。主要有TCPecho,UDPecho,TCPSYN,ICMPecho.2端口掃描的相關(guān)知識2.1網(wǎng)絡(luò)端口掃描原理一個端口就是一個潛在的通信信道,也就是一個入侵通道。對目標(biāo)計算機進(jìn)行端口掃描,能得到許多有用的信息。進(jìn)行掃描的方法很多,可以使手工進(jìn)行掃描,也可以是端口掃描軟件進(jìn)行。在手工進(jìn)行掃描時,需要熟悉各種命令。命令執(zhí)行后的輸出進(jìn)行分析。用掃描軟件進(jìn)行掃描時,許多掃描軟件都有分析數(shù)據(jù)功能。通過端口掃描,可以得到許多有用的信息,從而發(fā)現(xiàn)系統(tǒng)的安全漏洞。掃描器是一種自動檢測遠(yuǎn)程或本地主機安全性軟弱點的程序,通過使用掃描器你可以留痕跡的發(fā)現(xiàn)遠(yuǎn)程服務(wù)器的各種TCP端口的分配及提供的服務(wù)和他們的軟件版本,這就能讓我們間接的或直觀的了解到遠(yuǎn)程主機所存在的安全問題。掃描器通過選用遠(yuǎn)程TCP/IP不同的端口的服務(wù),并記錄目標(biāo)給予的回答,通過這種方法,可以搜集到很多關(guān)于目標(biāo)主機的各種有用的信息(比如:是否能用匿名登陸、是否有可寫的FTP目錄、是否能用TELNET,HTTPD是用ROOT還是nobady在跑!)。掃描并不是一個直接的攻擊網(wǎng)絡(luò)漏洞的程序,它僅僅能幫助我們發(fā)現(xiàn)目標(biāo)機的某些內(nèi)在的弱點。一個好的掃描器能對它得到的數(shù)據(jù)進(jìn)行分析,幫助我們查找目標(biāo)主機的漏洞。但它不會提供進(jìn)入一個系統(tǒng)的詳細(xì)步驟。2.2端口協(xié)議端口是一種抽象,其行為類似于TCP/IP連接的邏輯端點。在TCP協(xié)議中,僅僅用連接雙方的IP地址來標(biāo)識一條連接顯然是不夠的。在多任務(wù)操作系統(tǒng)中,系統(tǒng)允許多個進(jìn)程同時使用TCP協(xié)議進(jìn)行通信,因此必須能夠區(qū)分這些不同的進(jìn)程所對應(yīng)的不同連接。端口可以區(qū)分這些不同的通信進(jìn)程。每個端口由一個正整數(shù)識別,稱為端口號。信息傳送中每個信息都載有一個用來接收目的端口號和回復(fù)應(yīng)該發(fā)往的源端口號?!肮_端口”是由InternetAssignedNumbersAuthority(IANA)分配的,并且只能被系統(tǒng)(或root)進(jìn)程或者被授予權(quán)利的用戶執(zhí)行的程序使用。根據(jù)提供服務(wù)類型的不同,端口分為兩種,一種是TCP端口,一種是UDP端口。計算機之間相互通信的時候,分為兩種方式:一種是發(fā)送信息以后,可以確認(rèn)信息是否到達(dá),也就是有應(yīng)答的方式,這種方式大多采用TCP協(xié)議;一種是發(fā)送以后不去確認(rèn)信息是否到達(dá),這種方式大多采用UDP協(xié)議。對應(yīng)這兩種協(xié)議的服務(wù)提供的端口,也就分為TCP端口和UDP端口。當(dāng)可能時,對應(yīng)的TCP和UDP服務(wù)被分配給相同的編號?!窆_端口:0--1023●注冊端口:1024--49151●動態(tài)或私有端口:49152—655352.3相關(guān)協(xié)議TCP/IP協(xié)議棧是網(wǎng)絡(luò)掃描技術(shù)的基礎(chǔ),最基本的掃描方式TCPConnect()就是利用了TCP協(xié)議;而當(dāng)前流行的端口掃描技術(shù)如SYN掃描(半打開掃描)、FIN掃描和NULL掃描等等,都是利用了TCP的三次握手來完成的。Ⅰ.TCP數(shù)據(jù)包結(jié)構(gòu)一個TCP數(shù)據(jù)包包括一個TCP頭,后面是選項和數(shù)據(jù)。它的格式如圖1。原端口目的端口發(fā)送序號確認(rèn)序號校驗和緊急數(shù)據(jù)指針頭長度保留UAPRSF窗口大小可選項及數(shù)據(jù)填充TCP數(shù)據(jù)圖1TCP報頭格式Ⅱ.TCP/IP遵循的原則1.當(dāng)一個SYN或者FIN數(shù)據(jù)包到達(dá)一個關(guān)閉的端口,TCP丟棄數(shù)據(jù)包,同時發(fā)送一個RST數(shù)據(jù)包。2.當(dāng)一個RST數(shù)據(jù)包到達(dá)一個監(jiān)聽端口,RST被丟棄。3.當(dāng)一個RST數(shù)據(jù)包到達(dá)一個關(guān)閉的端口,RST被丟棄。4.當(dāng)一個不包含ACK的數(shù)據(jù)包到達(dá)一個監(jiān)聽端口時,數(shù)據(jù)包被丟棄,同時發(fā)送一個RST數(shù)據(jù)包。5.當(dāng)一個SYN關(guān)閉的數(shù)據(jù)包到達(dá)一個監(jiān)聽端口時,數(shù)據(jù)包被丟棄。6.當(dāng)一個SYN數(shù)據(jù)包到達(dá)一個監(jiān)聽端口時,正常的三次握手繼續(xù),回答一個SYN|ACK數(shù)據(jù)包。7.當(dāng)一個FIN數(shù)據(jù)包到達(dá)一個監(jiān)聽端口時,數(shù)據(jù)包被丟棄?!癋IN行為”(關(guān)閉的端口返回RST,監(jiān)聽端口丟棄包),所有的URG、PSH和FIN,或者沒有任何標(biāo)記的TCP數(shù)據(jù)包都會引起“FIN行為”。Ⅲ.TCP三次握手過程主機B主機B主機AACK,SEQ=X+1,ACK=Y+1SYN,SEQ=XSYN,ACK,SEQ=Y,ACK=X+1連接請求確認(rèn)確認(rèn)圖2TCP連接建立過程2.4掃描的定義掃描程序(Scanner)是自動檢測遠(yuǎn)端主機或者本地主機安全脆弱性的程序。通過使用掃描程序一個用戶可以發(fā)現(xiàn)遠(yuǎn)程服務(wù)器的安全弱點。目前,絕大多數(shù)操作系統(tǒng)都支持TCP/IP協(xié)議簇,掃描程序查詢TCP/IP端口并記錄目標(biāo)機器的響應(yīng)。掃描程序通過確定下列項目收集目標(biāo)主機的有用信息:●當(dāng)前主機正在進(jìn)行什么服務(wù)?●哪些用戶擁有這些服務(wù)?●是否支持匿名登錄?●是否有某些網(wǎng)絡(luò)服務(wù)需要鑒別?2.5多線程技術(shù)每個正在系統(tǒng)上運行的程序都是一個進(jìn)程。每個進(jìn)程包含一到多個線程。進(jìn)程也可能是整個程序或者是部分程序的動態(tài)執(zhí)行。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨立執(zhí)行。也可以把它理解為代碼運行的上下文。所以線程基本上是輕量級的進(jìn)程,它負(fù)責(zé)在單個程序里執(zhí)行多任務(wù)。通常由操作系統(tǒng)負(fù)責(zé)多個線程的調(diào)度和執(zhí)行。(1)什么是多線程?多線程是為了使得多個線程并行的工作以完成多項任務(wù),以提高系統(tǒng)的效率。線程是在同一時間需要完成多項任務(wù)的時候被實現(xiàn)的。(2)使用線程的好處有以下幾點:●使用線程可以把占據(jù)長時間的程序中的任務(wù)放到后臺去處理●用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發(fā)某些事件的處理,可以彈出一個進(jìn)度條來顯示處理的進(jìn)度●程序的運行速度可能加快●在一些等待的任務(wù)實現(xiàn)上如用戶輸入、文件讀寫和網(wǎng)絡(luò)收發(fā)數(shù)據(jù)等,線程就比較有用了。在這種情況下我們可以釋放一些珍貴的資源如內(nèi)存占用等等。2.6網(wǎng)絡(luò)套接字編程(1)套接字基本概念套接字是應(yīng)用程序通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信應(yīng)用的基本操作單元。可以將套接字看作是不同主機間的進(jìn)程進(jìn)行雙向通信的端點:網(wǎng)絡(luò)中兩臺通信的主機各自在自己機器上建立通信的端點──套接字,然后使用套接字進(jìn)行數(shù)據(jù)通信。一個套接字是如下描述的一個結(jié)構(gòu):{協(xié)議,本地地址,本地端口,遠(yuǎn)程地址,遠(yuǎn)程端口}操作系統(tǒng)會為本地建立的套接字分配一個唯一的套接字標(biāo)識號,應(yīng)用程序按該標(biāo)識號來使用套接字進(jìn)行網(wǎng)絡(luò)通信。根據(jù)網(wǎng)絡(luò)通信的特征,套接字主要分為兩類:流套接字(SOCK_STREAM)和數(shù)據(jù)報套接字(SOCK_DGRAM)。流套接字是面向連接的,它提供雙向的、有序的、無差錯、無重復(fù)并且無記錄邊界的數(shù)據(jù)流服務(wù),適用于處理大量數(shù)據(jù),提供可靠的服務(wù)。數(shù)據(jù)報套接字是無連接的,它支持雙向的數(shù)據(jù)傳輸,具有開銷小、數(shù)據(jù)傳輸效率高的特點,但不保證數(shù)據(jù)傳輸?shù)目煽啃浴⒂行蛐院蜔o重復(fù)性,適合少量數(shù)據(jù)傳輸、以及時間敏感的音視頻多媒體數(shù)據(jù)傳輸。此外,還有一種較少使用的套接字叫原始套接字(SOCK_RAW),可以使用它對底層協(xié)議如IP或ICMP直接訪問,在通信與協(xié)議開發(fā)時有時會用到。(2)JavaSocket編程原理以J2SDK-1.3為例,Socket和ServerSocket類庫位于包中。ServerSocket用于服務(wù)器端,Socket是建立網(wǎng)絡(luò)連接時使用的。在連接成功時,應(yīng)用程序兩端都會產(chǎn)生一個Socket實例,操作這個實例,完成所需的會話。對于一個網(wǎng)絡(luò)連接來說,套接字是平等的,并沒有差別,不因為在服務(wù)器端或在客戶端而產(chǎn)生不同級別。不管是Socket還是ServerSocket它們的工作都是通過SocketImpl類及其子類完成的。重要的SocketAPI:.Socket繼承于java.lang.Object,有八個構(gòu)造器,其方法并不多,下面介紹使用最頻繁的三個方法,其它方法大家可以見JDK-1.3文檔。Accept方法用于產(chǎn)生"阻塞",直到接受到一個連接,并且返回一個客戶端的Socket對象實例。"阻塞"是一個術(shù)語,它使程序運行暫時"停留"在這個地方,直到一個會話產(chǎn)生,然后程序繼續(xù);通常"阻塞"是由循環(huán)產(chǎn)生的。.getInputStream方法獲得網(wǎng)絡(luò)連接輸入,同時返回一個InputStream對象實例。getOutputStream方法連接的另一端將得到輸入,同時返回一個OutputStream對象實例。注意:其中g(shù)etInputStream和getOutputStream方法均會產(chǎn)生一個IOException,它必須被捕獲,因為它們返回的流對象,通常都會被另一個流對象使用。3概要設(shè)計3.1整體設(shè)計框架經(jīng)過大量的分析與調(diào)研,進(jìn)而設(shè)計出由以下幾個模塊組成的簡單網(wǎng)絡(luò)掃描器。整個端口掃描器的核心部分是掃描模塊,它是由很多子模塊組成的,其結(jié)構(gòu)如下圖所示TCP端口掃描程序TCP端口掃描程序基本信息檢測模塊參數(shù)設(shè)計模塊端口掃描模塊匹配過濾模塊Ip地址是否存在?端口范圍?線程數(shù)?調(diào)用函數(shù)是否在參數(shù)范圍內(nèi)?結(jié)果輸出模塊圖3掃描模塊的結(jié)構(gòu)圖3.2流程圖描述YYNYN建立原始套接字輸入要檢測的ip地址輸入線程數(shù)讀取應(yīng)答信息連接hdr→flags=TH—SYN調(diào)用發(fā)送函數(shù)記錄結(jié)果端口列表是否完全匹配?應(yīng)答數(shù)據(jù)有效結(jié)束開始輸入端口范圍匹配過濾原則圖4程序流程圖4詳細(xì)設(shè)計4.1開法環(huán)境本掃描器在Ubuntu操作系統(tǒng)下,使用系統(tǒng)自帶的VI編輯器用Java語言編寫的,并且所有測試也在此環(huán)境下進(jìn)行。4.2界面設(shè)計AWT是Swing的基礎(chǔ)。AWT設(shè)計的初衷是支持開發(fā)小應(yīng)用程序的簡單用戶界面。但是AWT缺少剪貼板、打印支持、鍵盤導(dǎo)航等特性,而且原來的AWT甚至不包括彈出式菜單或滾動窗格等基本元素。Swing的產(chǎn)生主要原因就是AWT不能滿足圖形化用戶界面發(fā)展的需要。Swing組件幾乎都是輕量組件,與重量組件相比,沒有本地的對等組件,不像重量組件要在它們自己的本地不透明窗體中繪制,輕量組件在它們的重量組件的窗口中繪制。本次課程設(shè)計利用了AWT和swing結(jié)合起來做個簡單的界面設(shè)計,其導(dǎo)入語句為:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;具體函數(shù)說明為:JTextAreaResult():定義輸入?yún)^(qū)域的大?。籎TextFieldhostname():定義IP域名JTextFieldminPort():定義最小端口JTextFieldmaxPort():定義最大端口JTextFieldmaxThread():定義最大線程數(shù)JDialogDLGError():定義錯誤提示標(biāo)簽LabelDLGINFO():定義錯誤提示信息Labelstatus():定義狀態(tài)表示ButtonOK():定義確認(rèn)按鈕JButtonSubmit():定義確定按鈕JButtonCancel():定義退出按鈕4.3主要類說明classTCPThreadextendsThread:利用多線程的方法來實現(xiàn)TCP端口掃描,其中:利用調(diào)用run()方法進(jìn)行多線程的運行,逐次掃描得出對應(yīng)的TCP端口號。還應(yīng)用了網(wǎng)絡(luò)編程套接字進(jìn)行客服端和服務(wù)器端的模擬,用輸入輸出流進(jìn)行信息的交換。classCancleimplementsActionListener:事件監(jiān)聽器,相應(yīng)Cancle按鈕classSubmitimplementsActionListener:事件監(jiān)聽器,相應(yīng)Submit按鈕。主要利用java的異常處理機制進(jìn)行相應(yīng)信息的匹配classOKimplementsActionListener:事件監(jiān)聽器,相應(yīng)OK按鈕publicclassScan:主要進(jìn)行界面化設(shè)計,調(diào)用上面的事件相應(yīng)。4.4代碼描述4.4.1classTCPThreadextendsThread{ publicstaticInetAddresshostAddress; publicstaticintMIN_port; publicstaticintMAX_port; privateintthreadnum; publicTCPThread(Stringname,intthreadnum) { super(name); this.threadnum=threadnum; }4.4.classSubmitActionimplementsActionListener{ publicvoidactionPerformed(ActionEventa) { intminPort; intmaxPort; intmaxThread; try { minPort=Integer.parseInt(PortScanner.minPort.getText()); maxPort=Integer.parseInt(PortScanner.maxPort.getText()); maxThread=Integer.parseInt(PortScanner.maxThread.getText()); } catch(NumberFormatExceptione) { PortScanner.DLGINFO.setText("Portnumberandthenumberofthreadsmustbeaninteger!"); PortScanner.DLGError.setVisible(true); PortScanner.status.setText("ScanStatus:NotStarted"); return; } try { TCPThread.hostAddress=InetAddress.getByName(PortScanner.hostname.getText()); } catch(UnknownHostExceptione) { PortScanner.DLGINFO.setText("IncorrectIPaddressoraddressunreachable!"); PortScanner.DLGError.setVisible(true); PortScanner.status.setText("ScanStatus:NotStarted"); return; } if(minPort<0||minPort>65535||minPort>maxPort) { PortScanner.DLGINFO.setText("Portnumberis0-65535!"); PortScanner.DLGError.setVisible(true); return; } elseTCPThread.MIN_port=minPort; if(maxPort<0||maxPort>65535||maxPort<minPort) { PortScanner.DLGINFO.setText("Portnumberis0-65535!"); PortScanner.DLGError.setVisible(true); PortScanner.status.setText("ScanStatus:NotStarted"); return; } elseTCPThread.MAX_port=maxPort; if(maxThread<1||maxThread>500) { PortScanner.DLGINFO.setText("Integernumberofthreadsforthe1-500!"); PortScanner.DLGError.setVisible(true); PortScanner.status.setText("ScanStatus:NotStarted"); return; } PortScanner.Result.setText(""); PortScanner.Result.append("Scanning:"+PortScanner.hostname.getText()+"Threads:"+PortScanner.maxThread.getText()+"\n"); PortScanner.Result.append("OpenPorts:"); for(inti=0;i<maxThread;i++) { newTCPThread("T"+i,i).start(); } }}4.4.3publicvoidrun() { inti; SockettheTCPsocket; for(i=MIN_port+threadnum;i<MAX_port;i+=Integer.parseInt(PortScanner.maxThread.getText())) { PortScanner.status.setText("ScanStatus:Scanport"+i); try { theTCPsocket=newSocket(hostAddress,i); theTCPsocket.close(); PortScanner.Result.append(i+","); } catch(IOExceptione) {} } if(i==MAX_port) { PortScanner.Result.append("\n"+"Thescaniscomplete..."); PortScanner.status.setText("ScanningStatus:Completed!"); } }}4.4.4publicclassPortScanner{ publicstaticJFramemain=newJFrame("PortScanner"); publicstaticJTextAreaResult=newJTextArea("",4,43); publicstaticJScrollPanescroll=newJScrollPane(Result); publicstaticJTextFieldhostname=newJTextField("localhost",8); publicstaticJTextFieldminPort=newJTextField("0",4); publicstaticJTextFieldmaxPort=newJTextField("1000",4); publicstaticJTextFieldmaxThread=newJTextField("100",3); publicstaticJDialogDLGError=newJDialog(main,"Wrong!"); publicstaticLabelDLGINFO=newLabel(""); publicstaticLabelstatus=newLabel("ScanStatus:NotStarted"); publicstaticvoidmain(String[]args) { main.setSize(520,230); main.setLocation(300,300); main.setResizable(false); DLGError.setSize(350,100); DLGError.setLocation(400,400); JPanelmainPanel=newJPanel(); LabelH=newLabel("IPAddress:"); LabelP1=newLabel("Port LabelP2=newLabel("~"); LabelTNUM=newLabel("Threads:"); LabelRST=newLabel("ScanResults:"); Labelcon=newLabel(""); Result.setLineWrap(true); Result.setEditable(false); JButtonOK=newJButton("OK"); JButtonSubmit=newJButton("OK"); JButtonCancel=newJButton("Cancle"); ContainermPanel=main.getContentPane(); ContainerdPanel=DLGError.getContentPane(); mPanel.setLayout(newFlowLayout(FlowLayout.LEFT)); dPanel.setLayout(newFlowLayout(FlowLayout.CENTER)); scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); mPanel.add(H); mPanel.add(hostname); mPanel.add(P1); mPanel.add(minPort); mPanel.add(P2); mPanel.add(maxPort); mPanel.add(TNUM); mPanel.add(maxThread); mPanel.add(RST); mPanel.add(scroll); mPanel.add(con); mPanel.add(Submit); mPanel.add(Cancel); mPanel.add(status); dPanel.add(DLGINFO); dPanel.add(OK);main.setVisible(true);Submit.addActionListener(newSubmitAction());Cancel.addActionListener(newCancleAction());OK.addActionListener(newOKAction());}}5調(diào)試分析5.1編譯及運行程序圖5編譯及運行程序5.2系統(tǒng)主界面圖6主界面利用java的awt,swing做界面,界面相對比較簡單。主要顯示的信息包括:程序名字,IP地址,端口范圍,線程數(shù)等基本信息。輸入相關(guān)的信息,就可以進(jìn)

溫馨提示

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

評論

0/150

提交評論