版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGEPAGE12仲愷農(nóng)業(yè)工程學(xué)院課程設(shè)計(jì)報(bào)告課程名稱:操作系統(tǒng)題目:基于TCP端口掃描程序院系:班級(jí):姓名:學(xué)號(hào):指導(dǎo)老師:目錄1需求分析 11.1課題背景 11.2本課題研究意義 11.3安全掃描技術(shù)的產(chǎn)生及其發(fā)展趨勢(shì) 11.4安全掃描技術(shù)的分類 22端口掃描的相關(guān)知識(shí) 32.1網(wǎng)絡(luò)端口掃描原理 32.2端口 42.3相關(guān)協(xié)議 42.4掃描的定義 62.5多線程技術(shù) 62.6網(wǎng)絡(luò)套接字編程 73概要設(shè)計(jì) 83.1整體設(shè)計(jì)框架 83.2流程圖描述 94詳細(xì)設(shè)計(jì) 114.1開(kāi)法環(huán)境 114.2界面設(shè)計(jì) 114.3主要類說(shuō)明 124.4代碼描述 124.4.1基本信息檢測(cè)模塊 124.4.2參數(shù)設(shè)計(jì)模塊 124.4.3端口掃描模塊 154.4.4結(jié)果輸出模塊 165調(diào)試分析 185.1編譯及運(yùn)行程序 185.2系統(tǒng)主界面 185.3子系統(tǒng)功能測(cè)試 186總結(jié) 21參考文獻(xiàn) 221需求分析1.1課題背景在21世紀(jì)的今天,計(jì)算機(jī)發(fā)展日新月異,伴隨著網(wǎng)絡(luò)技術(shù)的飛速更新,網(wǎng)絡(luò)規(guī)模迅速增長(zhǎng)和計(jì)算機(jī)系統(tǒng)的日益復(fù)雜,導(dǎo)致新的系統(tǒng)漏洞層出不窮,一些別有用心的人或者木馬程序要想順利的滲透一臺(tái)聯(lián)網(wǎng)的計(jì)算機(jī),無(wú)論使用何種技術(shù),首先必然要尋找計(jì)算機(jī)的漏洞來(lái)為自己的入侵打開(kāi)大門。端口掃描器是一把雙刃劍,端口掃描器的產(chǎn)生可以使網(wǎng)絡(luò)中的計(jì)算機(jī)及時(shí)的發(fā)現(xiàn)主機(jī)的開(kāi)放與未開(kāi)放的端口狀態(tài)。計(jì)算機(jī)的端口掃描技術(shù)是一種基于主動(dòng)防御型的策略的重要技術(shù)手段。本課題通過(guò)對(duì)計(jì)算機(jī)端口掃描器的研究來(lái)提高對(duì)網(wǎng)絡(luò)中計(jì)算機(jī)的安全的認(rèn)識(shí)。本端口掃描器采用Java語(yǔ)言和JavaSocket編程原理開(kāi)發(fā),在Ubuntu操作系統(tǒng)下通過(guò)測(cè)試。掃描主機(jī)通過(guò)TCP/IP協(xié)議的三次握手與目標(biāo)主機(jī)的指定端口建立一次完整的連接,如果目標(biāo)主機(jī)的此端口在規(guī)定時(shí)間內(nèi)有回復(fù),則說(shuō)明該端口是開(kāi)放的。利用多線程技術(shù)實(shí)現(xiàn)了對(duì)一目標(biāo)IP進(jìn)行設(shè)定數(shù)目的端口掃描。這種掃描器可以在輸入IP的情況下,對(duì)指定的端口范圍進(jìn)行掃描。1.2本課題研究意義現(xiàn)代社會(huì)是信息化網(wǎng)絡(luò)化的社會(huì),信息是社會(huì)發(fā)展的重要資源。信息安全的保障能力是一個(gè)國(guó)家的綜合國(guó)力經(jīng)濟(jì)競(jìng)爭(zhēng)實(shí)力和生存能力的重要組成部分,是世界各國(guó)在奮力攀登的制高點(diǎn)。網(wǎng)絡(luò)安全是指網(wǎng)絡(luò)系統(tǒng)的硬件軟件及其系統(tǒng)中的數(shù)據(jù)受到保護(hù),不會(huì)因?yàn)榕既坏幕蛘邜阂獾脑蚨獾狡茐?、更改、泄漏,系統(tǒng)連續(xù)可靠的正常的運(yùn)行。網(wǎng)絡(luò)安全包括技術(shù)領(lǐng)域和非技術(shù)領(lǐng)域兩大部分:非技術(shù)領(lǐng)域包括一些制度政策管理安全意識(shí)是填權(quán)等方面的內(nèi)容;技術(shù)領(lǐng)域包括:隱患掃描、防火墻、入侵檢測(cè)、訪問(wèn)控制、虛擬專用網(wǎng)、CA認(rèn)證、操作系統(tǒng)等方面的內(nèi)容。這些技術(shù)的目標(biāo)是保證信息的可控性、可用性、保密性、完整性和不可抵賴性。1.3安全掃描技術(shù)的產(chǎn)生及其發(fā)展趨勢(shì)隨著Internet的不斷發(fā)展,信息安全技術(shù)已經(jīng)成為促進(jìn)經(jīng)濟(jì)發(fā)展、社會(huì)進(jìn)步的巨大推動(dòng)了。端口掃描技術(shù)是網(wǎng)絡(luò)安全掃描技術(shù)的一個(gè)重要的網(wǎng)絡(luò)安全技術(shù),與防火墻、入侵檢測(cè)系統(tǒng)相互配合,能夠有效地提高網(wǎng)絡(luò)安全性。安全掃描是安全技術(shù)領(lǐng)域中的重要的一類。通過(guò)掃描能自動(dòng)檢測(cè)遠(yuǎn)程或者本地的主機(jī)系統(tǒng)的信息,包括主機(jī)的基本信息(如計(jì)算機(jī)名、域名、組名、操作系統(tǒng)類型號(hào)等)、服務(wù)信息、用戶信息以及漏洞信息,它的重要性在于能夠?qū)W(wǎng)絡(luò)進(jìn)行安全評(píng)估,及時(shí)發(fā)現(xiàn)安全隱患,防患于未然。任何技術(shù)的誕生都有深刻的思想基礎(chǔ),人們?cè)趯?duì)“安全”認(rèn)識(shí)逐步深化的過(guò)程中,不斷地提出新的安全理論并付諸實(shí)踐。在這個(gè)認(rèn)識(shí)的過(guò)程中有兩次重大的飛躍:第一次飛躍式早在二十世紀(jì)八十年代,人們認(rèn)為信息安全就是信息的保密性,相應(yīng)的采取保障措施就是利用加密機(jī)制和基于計(jì)算機(jī)規(guī)則的訪問(wèn)控制。這個(gè)時(shí)期防火墻和入侵檢測(cè)系統(tǒng)(IDS)進(jìn)一步發(fā)展起來(lái),并在保護(hù)內(nèi)部網(wǎng)絡(luò)中起到了積極作用。DanFame和WeitseVenema提出了劃時(shí)代的隱患掃描思想,既然黑客可以查找系統(tǒng)的漏洞,并且針對(duì)這些漏洞對(duì)系統(tǒng)進(jìn)行攻擊,那么隱患掃描程序就可以采取與黑客相同的方法找到系統(tǒng)漏洞,并且將他們加以修復(fù),起到主動(dòng)防御的作用。第二次飛躍就是在被動(dòng)防護(hù)的基礎(chǔ)上,提出了主動(dòng)防御的思想。這就促進(jìn)了安全掃描的技術(shù)的誕生。安全掃描的主動(dòng)防御思想滲透到了許多其他的安全領(lǐng)域。安全掃描軟件從最初的專門為UNIX系統(tǒng)編寫的一些只具有簡(jiǎn)單的功能的小程序,發(fā)展到現(xiàn)在,已經(jīng)成為可以用在多個(gè)系統(tǒng)的具有復(fù)雜的功能的商業(yè)程序。今后的發(fā)展趨勢(shì),我認(rèn)為有以下幾點(diǎn):使用插件或者叫做功能模塊技術(shù)。每個(gè)插件都封裝一個(gè)或多個(gè)漏洞測(cè)試手段,主掃描程序通過(guò)代用插件的方法來(lái)執(zhí)行掃描。僅僅是添加新的插件就可以使軟件增加新功能,掃描更多漏洞。在插件編寫的規(guī)范公布的情況下,用戶或者第三方公司甚至可以編寫自己的插件來(lái)擴(kuò)充軟件的功能。同時(shí)這種技術(shù)使軟件的升級(jí)維護(hù)都變得相對(duì)輕松,并且具有非常強(qiáng)的擴(kuò)展性。由安全掃描程序到安全評(píng)估專家系統(tǒng)。最早的安全掃描程序只是簡(jiǎn)單的把各個(gè)掃描測(cè)試項(xiàng)目執(zhí)行結(jié)果羅列出來(lái),直接提供給測(cè)試者而不對(duì)信息進(jìn)行任何分析處理。而當(dāng)前較為成熟的掃描系統(tǒng)都能夠?qū)蝹€(gè)主機(jī)的掃描結(jié)果進(jìn)行整理,形成報(bào)表能夠并對(duì)具體漏洞提出一些解決方法,但對(duì)網(wǎng)絡(luò)的狀況缺乏一個(gè)整體的評(píng)估,對(duì)網(wǎng)絡(luò)安全沒(méi)有系統(tǒng)的解決方案。未來(lái)的安全掃描系統(tǒng),應(yīng)該不但能夠掃描安全漏洞,還能夠智能化的協(xié)助網(wǎng)絡(luò)信息管理人員評(píng)估本網(wǎng)絡(luò)的安全狀況,給出安全建議,成為安全評(píng)估專家的系統(tǒng)。1.4安全掃描技術(shù)的分類安全掃描技術(shù)工具是一把雙刃劍,既可以被網(wǎng)絡(luò)管理員利用就,又可以被黑客利用。端口掃描技術(shù)和漏洞檢測(cè)技術(shù)是就安全掃描技術(shù)中的關(guān)鍵技術(shù)。下面專門介紹本軟件的側(cè)重點(diǎn)端口掃描技術(shù)。端口掃描屬于安全探測(cè)技術(shù)范疇,對(duì)應(yīng)于網(wǎng)絡(luò)攻擊技術(shù)中的網(wǎng)絡(luò)信息收集技術(shù)。黑客能否進(jìn)入“房間”,關(guān)鍵在于他是否發(fā)現(xiàn)了打開(kāi)了“門窗”。也就是說(shuō),關(guān)鍵是能否準(zhǔn)確的收集系統(tǒng)信息。黑客要做的就是構(gòu)造目標(biāo)網(wǎng)絡(luò)中的所有系統(tǒng)地圖,包括操作系統(tǒng)的類型,版本號(hào)以及可以在其上運(yùn)行的服務(wù)等。黑客手工收集信息一般遵循以下步驟:(1)獲取主機(jī)名與IP地址:可以通過(guò)使用whois與nslookup等工具。(2)獲得操作系統(tǒng)類型信息:標(biāo)識(shí)的最快方法就是試圖telnet至該系統(tǒng),從標(biāo)識(shí)來(lái)判斷。(3)FTP信息:黑客將測(cè)試是否開(kāi)放FTP服務(wù),匿名FTP是否可用,若可用,則試圖發(fā)掘更多的潛在問(wèn)題。(4)TCP/UDP掃描:對(duì)于TCP,telnet可以用來(lái)試圖與某一特定端口連接,這也是手工掃描的基本方法。從返回的標(biāo)識(shí)可以得到更多的信息。從中再分析系統(tǒng)是否開(kāi)放RPC服務(wù)、FINGER,RUSERS和RWHO等比較危險(xiǎn)的服務(wù)。這樣,到這里為止,黑客完成了對(duì)遠(yuǎn)程系統(tǒng)信息的手工掃描。端口掃描軟件就是要盡可能的自動(dòng)地模擬黑客的掃描手段。根據(jù)端口掃描的方法的不同,端口掃描技術(shù)分為五大類:全開(kāi)掃描:通過(guò)完整的TCP連接探查端口。主要有TCPconnect,反向ident.半開(kāi)掃描:通過(guò)不完整的TCP連接探查端口。主要有SYNflag,IPIDheader"dumbscan".隱蔽掃描(stealthscanning):利用FIN字段來(lái)探查端口。不包含標(biāo)準(zhǔn)三次握手的任一部分。主要有SMACKflag,ACKflags,NULLflags,ALLflags(XMAS).IP段掃描((sweepsscanning):同時(shí)對(duì)一個(gè)網(wǎng)段進(jìn)行掃描。主要有TCPecho,UDPecho,TCPSYN,ICMPecho.2端口掃描的相關(guān)知識(shí)2.1網(wǎng)絡(luò)端口掃描原理一個(gè)端口就是一個(gè)潛在的通信信道,也就是一個(gè)入侵通道。對(duì)目標(biāo)計(jì)算機(jī)進(jìn)行端口掃描,能得到許多有用的信息。進(jìn)行掃描的方法很多,可以使手工進(jìn)行掃描,也可以是端口掃描軟件進(jìn)行。在手工進(jìn)行掃描時(shí),需要熟悉各種命令。命令執(zhí)行后的輸出進(jìn)行分析。用掃描軟件進(jìn)行掃描時(shí),許多掃描軟件都有分析數(shù)據(jù)功能。通過(guò)端口掃描,可以得到許多有用的信息,從而發(fā)現(xiàn)系統(tǒng)的安全漏洞。掃描器是一種自動(dòng)檢測(cè)遠(yuǎn)程或本地主機(jī)安全性軟弱點(diǎn)的程序,通過(guò)使用掃描器你可以留痕跡的發(fā)現(xiàn)遠(yuǎn)程服務(wù)器的各種TCP端口的分配及提供的服務(wù)和他們的軟件版本,這就能讓我們間接的或直觀的了解到遠(yuǎn)程主機(jī)所存在的安全問(wèn)題。掃描器通過(guò)選用遠(yuǎn)程TCP/IP不同的端口的服務(wù),并記錄目標(biāo)給予的回答,通過(guò)這種方法,可以搜集到很多關(guān)于目標(biāo)主機(jī)的各種有用的信息(比如:是否能用匿名登陸、是否有可寫的FTP目錄、是否能用TELNET,HTTPD是用ROOT還是nobady在跑!)。掃描并不是一個(gè)直接的攻擊網(wǎng)絡(luò)漏洞的程序,它僅僅能幫助我們發(fā)現(xiàn)目標(biāo)機(jī)的某些內(nèi)在的弱點(diǎn)。一個(gè)好的掃描器能對(duì)它得到的數(shù)據(jù)進(jìn)行分析,幫助我們查找目標(biāo)主機(jī)的漏洞。但它不會(huì)提供進(jìn)入一個(gè)系統(tǒng)的詳細(xì)步驟。2.2端口協(xié)議端口是一種抽象,其行為類似于TCP/IP連接的邏輯端點(diǎn)。在TCP協(xié)議中,僅僅用連接雙方的IP地址來(lái)標(biāo)識(shí)一條連接顯然是不夠的。在多任務(wù)操作系統(tǒng)中,系統(tǒng)允許多個(gè)進(jìn)程同時(shí)使用TCP協(xié)議進(jìn)行通信,因此必須能夠區(qū)分這些不同的進(jìn)程所對(duì)應(yīng)的不同連接。端口可以區(qū)分這些不同的通信進(jìn)程。每個(gè)端口由一個(gè)正整數(shù)識(shí)別,稱為端口號(hào)。信息傳送中每個(gè)信息都載有一個(gè)用來(lái)接收目的端口號(hào)和回復(fù)應(yīng)該發(fā)往的源端口號(hào)?!肮_(kāi)端口”是由InternetAssignedNumbersAuthority(IANA)分配的,并且只能被系統(tǒng)(或root)進(jìn)程或者被授予權(quán)利的用戶執(zhí)行的程序使用。根據(jù)提供服務(wù)類型的不同,端口分為兩種,一種是TCP端口,一種是UDP端口。計(jì)算機(jī)之間相互通信的時(shí)候,分為兩種方式:一種是發(fā)送信息以后,可以確認(rèn)信息是否到達(dá),也就是有應(yīng)答的方式,這種方式大多采用TCP協(xié)議;一種是發(fā)送以后不去確認(rèn)信息是否到達(dá),這種方式大多采用UDP協(xié)議。對(duì)應(yīng)這兩種協(xié)議的服務(wù)提供的端口,也就分為TCP端口和UDP端口。當(dāng)可能時(shí),對(duì)應(yīng)的TCP和UDP服務(wù)被分配給相同的編號(hào)?!窆_(kāi)端口:0--1023●注冊(cè)端口:1024--49151●動(dòng)態(tài)或私有端口:49152—655352.3相關(guān)協(xié)議TCP/IP協(xié)議棧是網(wǎng)絡(luò)掃描技術(shù)的基礎(chǔ),最基本的掃描方式TCPConnect()就是利用了TCP協(xié)議;而當(dāng)前流行的端口掃描技術(shù)如SYN掃描(半打開(kāi)掃描)、FIN掃描和NULL掃描等等,都是利用了TCP的三次握手來(lái)完成的。Ⅰ.TCP數(shù)據(jù)包結(jié)構(gòu)一個(gè)TCP數(shù)據(jù)包包括一個(gè)TCP頭,后面是選項(xiàng)和數(shù)據(jù)。它的格式如圖1。原端口目的端口發(fā)送序號(hào)確認(rèn)序號(hào)校驗(yàn)和緊急數(shù)據(jù)指針頭長(zhǎng)度保留UAPRSF窗口大小可選項(xiàng)及數(shù)據(jù)填充TCP數(shù)據(jù)圖1TCP報(bào)頭格式Ⅱ.TCP/IP遵循的原則1.當(dāng)一個(gè)SYN或者FIN數(shù)據(jù)包到達(dá)一個(gè)關(guān)閉的端口,TCP丟棄數(shù)據(jù)包,同時(shí)發(fā)送一個(gè)RST數(shù)據(jù)包。2.當(dāng)一個(gè)RST數(shù)據(jù)包到達(dá)一個(gè)監(jiān)聽(tīng)端口,RST被丟棄。3.當(dāng)一個(gè)RST數(shù)據(jù)包到達(dá)一個(gè)關(guān)閉的端口,RST被丟棄。4.當(dāng)一個(gè)不包含ACK的數(shù)據(jù)包到達(dá)一個(gè)監(jiān)聽(tīng)端口時(shí),數(shù)據(jù)包被丟棄,同時(shí)發(fā)送一個(gè)RST數(shù)據(jù)包。5.當(dāng)一個(gè)SYN關(guān)閉的數(shù)據(jù)包到達(dá)一個(gè)監(jiān)聽(tīng)端口時(shí),數(shù)據(jù)包被丟棄。6.當(dāng)一個(gè)SYN數(shù)據(jù)包到達(dá)一個(gè)監(jiān)聽(tīng)端口時(shí),正常的三次握手繼續(xù),回答一個(gè)SYN|ACK數(shù)據(jù)包。7.當(dāng)一個(gè)FIN數(shù)據(jù)包到達(dá)一個(gè)監(jiān)聽(tīng)端口時(shí),數(shù)據(jù)包被丟棄?!癋IN行為”(關(guān)閉的端口返回RST,監(jiān)聽(tīng)端口丟棄包),所有的URG、PSH和FIN,或者沒(méi)有任何標(biāo)記的TCP數(shù)據(jù)包都會(huì)引起“FIN行為”。Ⅲ.TCP三次握手過(guò)程主機(jī)B主機(jī)B主機(jī)AACK,SEQ=X+1,ACK=Y+1SYN,SEQ=XSYN,ACK,SEQ=Y,ACK=X+1連接請(qǐng)求確認(rèn)確認(rèn)圖2TCP連接建立過(guò)程2.4掃描的定義掃描程序(Scanner)是自動(dòng)檢測(cè)遠(yuǎn)端主機(jī)或者本地主機(jī)安全脆弱性的程序。通過(guò)使用掃描程序一個(gè)用戶可以發(fā)現(xiàn)遠(yuǎn)程服務(wù)器的安全弱點(diǎn)。目前,絕大多數(shù)操作系統(tǒng)都支持TCP/IP協(xié)議簇,掃描程序查詢TCP/IP端口并記錄目標(biāo)機(jī)器的響應(yīng)。掃描程序通過(guò)確定下列項(xiàng)目收集目標(biāo)主機(jī)的有用信息:●當(dāng)前主機(jī)正在進(jìn)行什么服務(wù)?●哪些用戶擁有這些服務(wù)?●是否支持匿名登錄?●是否有某些網(wǎng)絡(luò)服務(wù)需要鑒別?2.5多線程技術(shù)每個(gè)正在系統(tǒng)上運(yùn)行的程序都是一個(gè)進(jìn)程。每個(gè)進(jìn)程包含一到多個(gè)線程。進(jìn)程也可能是整個(gè)程序或者是部分程序的動(dòng)態(tài)執(zhí)行。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨(dú)立執(zhí)行。也可以把它理解為代碼運(yùn)行的上下文。所以線程基本上是輕量級(jí)的進(jìn)程,它負(fù)責(zé)在單個(gè)程序里執(zhí)行多任務(wù)。通常由操作系統(tǒng)負(fù)責(zé)多個(gè)線程的調(diào)度和執(zhí)行。(1)什么是多線程?多線程是為了使得多個(gè)線程并行的工作以完成多項(xiàng)任務(wù),以提高系統(tǒng)的效率。線程是在同一時(shí)間需要完成多項(xiàng)任務(wù)的時(shí)候被實(shí)現(xiàn)的。(2)使用線程的好處有以下幾點(diǎn):●使用線程可以把占據(jù)長(zhǎng)時(shí)間的程序中的任務(wù)放到后臺(tái)去處理●用戶界面可以更加吸引人,這樣比如用戶點(diǎn)擊了一個(gè)按鈕去觸發(fā)某些事件的處理,可以彈出一個(gè)進(jìn)度條來(lái)顯示處理的進(jìn)度●程序的運(yùn)行速度可能加快●在一些等待的任務(wù)實(shí)現(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ī)間的進(jìn)程進(jìn)行雙向通信的端點(diǎn):網(wǎng)絡(luò)中兩臺(tái)通信的主機(jī)各自在自己機(jī)器上建立通信的端點(diǎn)──套接字,然后使用套接字進(jìn)行數(shù)據(jù)通信。一個(gè)套接字是如下描述的一個(gè)結(jié)構(gòu):{協(xié)議,本地地址,本地端口,遠(yuǎn)程地址,遠(yuǎn)程端口}操作系統(tǒng)會(huì)為本地建立的套接字分配一個(gè)唯一的套接字標(biāo)識(shí)號(hào),應(yīng)用程序按該標(biāo)識(shí)號(hào)來(lái)使用套接字進(jìn)行網(wǎng)絡(luò)通信。根據(jù)網(wǎng)絡(luò)通信的特征,套接字主要分為兩類:流套接字(SOCK_STREAM)和數(shù)據(jù)報(bào)套接字(SOCK_DGRAM)。流套接字是面向連接的,它提供雙向的、有序的、無(wú)差錯(cuò)、無(wú)重復(fù)并且無(wú)記錄邊界的數(shù)據(jù)流服務(wù),適用于處理大量數(shù)據(jù),提供可靠的服務(wù)。數(shù)據(jù)報(bào)套接字是無(wú)連接的,它支持雙向的數(shù)據(jù)傳輸,具有開(kāi)銷小、數(shù)據(jù)傳輸效率高的特點(diǎn),但不保證數(shù)據(jù)傳輸?shù)目煽啃?、有序性和無(wú)重復(fù)性,適合少量數(shù)據(jù)傳輸、以及時(shí)間敏感的音視頻多媒體數(shù)據(jù)傳輸。此外,還有一種較少使用的套接字叫原始套接字(SOCK_RAW),可以使用它對(duì)底層協(xié)議如IP或ICMP直接訪問(wèn),在通信與協(xié)議開(kāi)發(fā)時(shí)有時(shí)會(huì)用到。(2)JavaSocket編程原理以J2SDK-1.3為例,Socket和ServerSocket類庫(kù)位于包中。ServerSocket用于服務(wù)器端,Socket是建立網(wǎng)絡(luò)連接時(shí)使用的。在連接成功時(shí),應(yīng)用程序兩端都會(huì)產(chǎn)生一個(gè)Socket實(shí)例,操作這個(gè)實(shí)例,完成所需的會(huì)話。對(duì)于一個(gè)網(wǎng)絡(luò)連接來(lái)說(shuō),套接字是平等的,并沒(méi)有差別,不因?yàn)樵诜?wù)器端或在客戶端而產(chǎn)生不同級(jí)別。不管是Socket還是ServerSocket它們的工作都是通過(guò)SocketImpl類及其子類完成的。重要的SocketAPI:.Socket繼承于java.lang.Object,有八個(gè)構(gòu)造器,其方法并不多,下面介紹使用最頻繁的三個(gè)方法,其它方法大家可以見(jiàn)JDK-1.3文檔。Accept方法用于產(chǎn)生"阻塞",直到接受到一個(gè)連接,并且返回一個(gè)客戶端的Socket對(duì)象實(shí)例。"阻塞"是一個(gè)術(shù)語(yǔ),它使程序運(yùn)行暫時(shí)"停留"在這個(gè)地方,直到一個(gè)會(huì)話產(chǎn)生,然后程序繼續(xù);通常"阻塞"是由循環(huán)產(chǎn)生的。.getInputStream方法獲得網(wǎng)絡(luò)連接輸入,同時(shí)返回一個(gè)InputStream對(duì)象實(shí)例。getOutputStream方法連接的另一端將得到輸入,同時(shí)返回一個(gè)OutputStream對(duì)象實(shí)例。注意:其中g(shù)etInputStream和getOutputStream方法均會(huì)產(chǎn)生一個(gè)IOException,它必須被捕獲,因?yàn)樗鼈兎祷氐牧鲗?duì)象,通常都會(huì)被另一個(gè)流對(duì)象使用。3概要設(shè)計(jì)3.1整體設(shè)計(jì)框架經(jīng)過(guò)大量的分析與調(diào)研,進(jìn)而設(shè)計(jì)出由以下幾個(gè)模塊組成的簡(jiǎn)單網(wǎng)絡(luò)掃描器。整個(gè)端口掃描器的核心部分是掃描模塊,它是由很多子模塊組成的,其結(jié)構(gòu)如下圖所示TCP端口掃描程序TCP端口掃描程序基本信息檢測(cè)模塊參數(shù)設(shè)計(jì)模塊端口掃描模塊匹配過(guò)濾模塊Ip地址是否存在?端口范圍?線程數(shù)?調(diào)用函數(shù)是否在參數(shù)范圍內(nèi)?結(jié)果輸出模塊圖3掃描模塊的結(jié)構(gòu)圖3.2流程圖描述YYNYN建立原始套接字輸入要檢測(cè)的ip地址輸入線程數(shù)讀取應(yīng)答信息連接hdr→flags=TH—SYN調(diào)用發(fā)送函數(shù)記錄結(jié)果端口列表是否完全匹配?應(yīng)答數(shù)據(jù)有效結(jié)束開(kāi)始輸入端口范圍匹配過(guò)濾原則圖4程序流程圖4詳細(xì)設(shè)計(jì)4.1開(kāi)法環(huán)境本掃描器在Ubuntu操作系統(tǒng)下,使用系統(tǒng)自帶的VI編輯器用Java語(yǔ)言編寫的,并且所有測(cè)試也在此環(huán)境下進(jìn)行。4.2界面設(shè)計(jì)AWT是Swing的基礎(chǔ)。AWT設(shè)計(jì)的初衷是支持開(kāi)發(fā)小應(yīng)用程序的簡(jiǎn)單用戶界面。但是AWT缺少剪貼板、打印支持、鍵盤導(dǎo)航等特性,而且原來(lái)的AWT甚至不包括彈出式菜單或滾動(dòng)窗格等基本元素。Swing的產(chǎn)生主要原因就是AWT不能滿足圖形化用戶界面發(fā)展的需要。Swing組件幾乎都是輕量組件,與重量組件相比,沒(méi)有本地的對(duì)等組件,不像重量組件要在它們自己的本地不透明窗體中繪制,輕量組件在它們的重量組件的窗口中繪制。本次課程設(shè)計(jì)利用了AWT和swing結(jié)合起來(lái)做個(gè)簡(jiǎn)單的界面設(shè)計(jì),其導(dǎo)入語(yǔ)句為:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;具體函數(shù)說(shuō)明為:JTextAreaResult():定義輸入?yún)^(qū)域的大?。籎TextFieldhostname():定義IP域名JTextFieldminPort():定義最小端口JTextFieldmaxPort():定義最大端口JTextFieldmaxThread():定義最大線程數(shù)JDialogDLGError():定義錯(cuò)誤提示標(biāo)簽LabelDLGINFO():定義錯(cuò)誤提示信息Labelstatus():定義狀態(tài)表示ButtonOK():定義確認(rèn)按鈕JButtonSubmit():定義確定按鈕JButtonCancel():定義退出按鈕4.3主要類說(shuō)明classTCPThreadextendsThread:利用多線程的方法來(lái)實(shí)現(xiàn)TCP端口掃描,其中:利用調(diào)用run()方法進(jìn)行多線程的運(yùn)行,逐次掃描得出對(duì)應(yīng)的TCP端口號(hào)。還應(yīng)用了網(wǎng)絡(luò)編程套接字進(jìn)行客服端和服務(wù)器端的模擬,用輸入輸出流進(jìn)行信息的交換。classCancleimplementsActionListener:事件監(jiān)聽(tīng)器,相應(yīng)Cancle按鈕classSubmitimplementsActionListener:事件監(jiān)聽(tīng)器,相應(yīng)Submit按鈕。主要利用java的異常處理機(jī)制進(jìn)行相應(yīng)信息的匹配classOKimplementsActionListener:事件監(jiān)聽(tīng)器,相應(yīng)OK按鈕publicclassScan:主要進(jìn)行界面化設(shè)計(jì),調(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編譯及運(yùn)行程序圖5編譯及運(yùn)行程序5.2系統(tǒng)主界面圖6主界面利用java的awt,swing做界面,界面相對(duì)比較簡(jiǎn)單。主要顯示的信息包括:程序名字,IP地址,端口范圍,線程數(shù)等基本信息。輸入相關(guān)的信息,就可以進(jìn)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年公共設(shè)施窗簾清洗消毒服務(wù)合同范本3篇
- 2024版汽車檢測(cè)臺(tái)租賃合同
- 2024石材外墻干掛勞務(wù)服務(wù)合同標(biāo)準(zhǔn)版6篇
- 2025年度特色飲品店門面房租賃及新品研發(fā)合同3篇
- 2025年度圓形冷卻塔能源管理服務(wù)合同4篇
- 2024版基礎(chǔ)建設(shè)融資借款協(xié)議模板版
- 2025年度水電工程質(zhì)保期服務(wù)合同4篇
- 2025年度學(xué)校圖書(shū)館窗簾升級(jí)改造合同4篇
- 2025年度生態(tài)修復(fù)工程承包樹(shù)木合同協(xié)議書(shū)4篇
- 2024石材行業(yè)品牌推廣與營(yíng)銷合同3篇
- 領(lǐng)導(dǎo)溝通的藝術(shù)
- 發(fā)生用藥錯(cuò)誤應(yīng)急預(yù)案
- 南潯至臨安公路(南潯至練市段)公路工程環(huán)境影響報(bào)告
- 綠色貸款培訓(xùn)課件
- 大學(xué)生預(yù)征對(duì)象登記表(樣表)
- 主管部門審核意見(jiàn)三篇
- 初中數(shù)學(xué)校本教材(完整版)
- 父母教育方式對(duì)幼兒社會(huì)性發(fā)展影響的研究
- 新課標(biāo)人教版數(shù)學(xué)三年級(jí)上冊(cè)第八單元《分?jǐn)?shù)的初步認(rèn)識(shí)》教材解讀
- (人教版2019)數(shù)學(xué)必修第一冊(cè) 第三章 函數(shù)的概念與性質(zhì) 復(fù)習(xí)課件
- 重慶市銅梁區(qū)2024屆數(shù)學(xué)八上期末檢測(cè)試題含解析
評(píng)論
0/150
提交評(píng)論