《安全掃描》課程設(shè)計(jì)報(bào)告_第1頁(yè)
《安全掃描》課程設(shè)計(jì)報(bào)告_第2頁(yè)
《安全掃描》課程設(shè)計(jì)報(bào)告_第3頁(yè)
《安全掃描》課程設(shè)計(jì)報(bào)告_第4頁(yè)
《安全掃描》課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩43頁(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)介

1、安全掃描課程設(shè)計(jì)報(bào)告姓 名: 學(xué) 號(hào): 學(xué) 院: 信息科學(xué)技術(shù)學(xué)院 成 績(jī): 任課教師: 目 錄摘 要 -11.引言 -11.1開(kāi)發(fā)背景 -11.2 設(shè)計(jì)題目及要求-12.程序的編譯與開(kāi)發(fā) -22.1 開(kāi)發(fā)目的 -22.2 開(kāi)發(fā)環(huán)境及工具-22.3 開(kāi)發(fā)過(guò)程-23.基本思路及所涉及的相關(guān)理論 -23.1基本思路-23.2相關(guān)理論-2 3.2.1協(xié)議介紹 -2 3.2.2 tcp實(shí)現(xiàn)流程-33.2.3 udp實(shí)現(xiàn)流程-53.2.4 windows socket 套接字編程原理-64.實(shí)驗(yàn)過(guò)程-105、個(gè)人感想與感悟 - 23附錄(程序代碼部分)-23附錄一:(基于tcp通信的客戶端與服務(wù)器)-2

2、3附錄二:(基于udp通信的客戶端與服務(wù)器)-29附錄三:(基于 tcp/udp 的網(wǎng)絡(luò)安全掃描) -38摘 要計(jì)算機(jī)信息網(wǎng)絡(luò)的發(fā)展加速了信息化時(shí)代的進(jìn)程,但是隨著社會(huì)網(wǎng)絡(luò)化程度的增加,對(duì)計(jì)算機(jī)網(wǎng)絡(luò)的依賴也越來(lái)越大,網(wǎng)絡(luò)安全問(wèn)題也日益明顯。端口掃描技術(shù)室發(fā)現(xiàn)安全問(wèn)題的重要手段之一。當(dāng)前進(jìn)行網(wǎng)絡(luò)端口掃描的主要技術(shù)有:基于arp、icmp、tcp(包括tcp connect掃描、tcp syn掃描、tcp ack 掃描、tcp fin掃描等)、udp 網(wǎng)絡(luò)協(xié)議的網(wǎng)絡(luò)活動(dòng)端口掃描。(1)、利用arp協(xié)議獲取活動(dòng)主機(jī)的mac地址,當(dāng)獲取的不為“00-00-00-00-00-00”時(shí),則認(rèn)為當(dāng)前主機(jī)可達(dá)

3、,是活動(dòng)的主機(jī);(2)、利用icmp協(xié)議,使用系統(tǒng)自帶的ping程序,當(dāng)能ping 通目標(biāo)主機(jī)時(shí),認(rèn)為是活動(dòng)主機(jī)(能掃描到活動(dòng)的端口);(3)、基于tcp的鏈接狀態(tài)當(dāng)判斷鏈接成功認(rèn)為主機(jī)可到達(dá)(并能掃描到相應(yīng)的端口);(4)、基于udp 的不可靠傳輸,我們可以通過(guò)套接字編程給目標(biāo)主機(jī)發(fā)送消息,能夠得到返回消息,則認(rèn)為主機(jī)可到達(dá)(相應(yīng)掃描到端口)。根據(jù)以上方法,我們均能掃描到開(kāi)放的端口,因此,我們同樣可以做到對(duì)自己電腦的自糾自查,對(duì)自己的主機(jī)實(shí)施相應(yīng)的網(wǎng)絡(luò)安全保護(hù)。關(guān)鍵字:tcp連接 套接字 tcp/udp端口掃描.客戶端、服務(wù)器及網(wǎng)絡(luò)安全掃描的實(shí)現(xiàn)1.引言1.1開(kāi)發(fā)背景 端口掃描,顧名思義,就

4、是對(duì)目標(biāo)主機(jī)的端口依次進(jìn)行連接,對(duì)于能進(jìn)行數(shù)據(jù)通信的,則認(rèn)為是”開(kāi)”狀態(tài),否則認(rèn)為是”關(guān)”狀態(tài)。由于絕大部分公用服務(wù)于端口有對(duì)應(yīng)關(guān)系,因此通過(guò)端口的”開(kāi)”與”關(guān)”狀態(tài),可以初步判斷對(duì)方是否提供相應(yīng)的服務(wù),為下一步的操作提供參考。 端口是一個(gè)傳輸層的概念,因此端口掃描也僅限于在傳輸層上進(jìn)行,傳輸層一般將協(xié)議分為tcp協(xié)議和udp協(xié)議,所以端口掃描也根據(jù)掃描所采用的類型分為tcp端口掃描、udp端口掃描兩大類。 端口掃描與其說(shuō)是一種攻擊方法,不如說(shuō)是一種檢測(cè)方法,因?yàn)橥ㄟ^(guò)端口掃描,即使是知道對(duì)方哪些端口是開(kāi)的,也不意味著對(duì)方就一定提供了這些端口對(duì)應(yīng)的服務(wù),更談不上能查出什么漏洞。但黑客正是用端口掃

5、描預(yù)測(cè)一臺(tái)主機(jī)上都提供了哪些服務(wù),如果所提供的這些服務(wù)存在漏洞,黑客就會(huì)利用這些漏洞對(duì)系統(tǒng)進(jìn)行攻擊。而事實(shí)上即使沒(méi)有什么漏洞可找,僅就掃描所得的信息,就已經(jīng)給黑客提供大量的重要信息,因此端口掃描往往作為黑客攻擊的第一步。所以,對(duì)于任何一個(gè)擁有電腦的用戶完全有必要對(duì)端口進(jìn)行詳細(xì)地了解,對(duì)于沒(méi)有實(shí)質(zhì)性作用的端口要關(guān)閉,對(duì)于必須開(kāi)放的端口則盡可能地安裝其漏洞補(bǔ)丁程序。1.2 設(shè)計(jì)題目及要求(1)、至少建立tcp/udp兩臺(tái)服務(wù)器服務(wù)器端口和服務(wù)必須有公開(kāi)和保密(后門(mén))兩類。(2)、完成tcp/udp協(xié)議客戶端掃描程序可以掃描出公開(kāi)和保密的全部端口號(hào),確定全部公開(kāi)的服務(wù),甚少可以確定一種保密的服務(wù)。(

6、3)、可以掃描顧劍老師上課的服務(wù)器94,檢查其安全情況。(4)、可以掃描 服務(wù)器,檢查其安全情況。(5)、同學(xué)之間可以互相掃描各自的服務(wù)器,檢查其服務(wù)情況。(6)、不可掃描其他境內(nèi)服務(wù)器。(7)、寫(xiě)出完整的試驗(yàn)報(bào)告,并嘗試給出一些防范和修改建議。2.程序的編譯與開(kāi)發(fā)2.1 開(kāi)發(fā)目的1.了解和掌握tcp/ip協(xié)議的基本原理(tcp通信、udp通信);2.了解網(wǎng)絡(luò)環(huán)境下的程序設(shè)計(jì)步驟和過(guò)程;3.掌握winsock提供函數(shù)的功能和用法。2.2 開(kāi)發(fā)環(huán)境及工具測(cè)試平臺(tái):windows xp professional使用軟件:microsoft visual c+ 6.0開(kāi)發(fā)語(yǔ)言:

7、c語(yǔ)言2.3 開(kāi)發(fā)過(guò)程根據(jù)題目的要求,結(jié)合相應(yīng)的算法理論及相關(guān)的基礎(chǔ)知識(shí),在microsoft visual c+ 6.0的平臺(tái)下進(jìn)行開(kāi)發(fā)。具體過(guò)程參見(jiàn)下述的算法理論部分和程序流程步驟的分析。3.基本思路及所涉及的相關(guān)理論3.1基本思路 根據(jù)題目要求,逐步解析題目含義。實(shí)際上,該題目包含三個(gè)主要程序:基于tcp客戶端和服務(wù)器間的通信;基于udp客戶端與服務(wù)器的通信;基于tcp和udp的網(wǎng)絡(luò)活動(dòng)端口掃描。由所學(xué)知識(shí)可知:tcp屬于面向連接型協(xié)議(可靠傳輸,通過(guò)三次握手連接完成),udp屬于不可靠傳輸。在windows平臺(tái)上,需要通過(guò)winsock套接字編程來(lái)實(shí)現(xiàn)。3.2相關(guān)理論3.2.1協(xié)議介紹

8、(1)tcp tcp/ip(transmission control protocol/internet protocol) 即傳輸控制協(xié)議/網(wǎng)間協(xié)議,是一個(gè)工業(yè)標(biāo)準(zhǔn)的協(xié)議集,它是為廣域網(wǎng)(wan)設(shè)計(jì)的。它是由arpanet網(wǎng)的研究機(jī)構(gòu)發(fā)展起來(lái)的。 有時(shí)我們將tcp/ip描述為互聯(lián)網(wǎng)協(xié)議集internetprotocolsuite,tcp和ip是其中的兩個(gè)協(xié)議(后面將會(huì)介紹)。由于tcp和ip是大家熟悉的協(xié)議,以至于用tcp/ip或ip/tcp這個(gè)詞代替了整個(gè)協(xié)議集。這盡管有點(diǎn)奇怪,但沒(méi)有必要去爭(zhēng)論這個(gè)習(xí)慣。例如,有時(shí)我們討論nfs是基于tcp/ip時(shí),盡管它根本沒(méi)用到tcp(只用到ip和另

9、一種交互式協(xié)議udp,而不是tcp)。 tcp/ip的標(biāo)準(zhǔn)在一系列稱為rfc的文檔中公布。文檔由技術(shù)專家、特別工作組、或rfc編輯修訂。公布一個(gè)文檔時(shí),該文檔被賦予一個(gè)rfc編號(hào),如rfc959(ftp的說(shuō)明文檔)、rfc793(tcp的說(shuō)明文檔)、rfc791(ip的說(shuō)明文檔)等。最初的rfc一直保留而從來(lái)不會(huì)被更新,如果修改了該文檔,則該文檔又以一個(gè)新號(hào)碼公布。因此,重要的是要確認(rèn)你擁有了關(guān)于某個(gè)專題的最新rfc文檔。通常在rfc的開(kāi)頭部分,有相關(guān)rfc的更新(update)、修改(errata)、作廢(obsolete)信息,提示讀者信息的時(shí)效性。詳情請(qǐng)閱讀網(wǎng)站rfc-editor1。(

10、2)ucpudp協(xié)議的全稱是用戶數(shù)據(jù)包協(xié)議,在網(wǎng)絡(luò)中它與tcp協(xié)議一樣用于處理數(shù)據(jù)包,是一種無(wú)連接的協(xié)議。在osi模型中,在第四層傳輸層,處于ip協(xié)議的上一層。udp有不提供數(shù)據(jù)包分組、組裝和不能對(duì)數(shù)據(jù)包進(jìn)行排序的缺點(diǎn),也就是說(shuō),當(dāng)報(bào)文發(fā)送之后,是無(wú)法得知其是否安全完整到達(dá)的。udp用來(lái)支持那些需要在計(jì)算機(jī)之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用。包括網(wǎng)絡(luò)視頻會(huì)議系統(tǒng)在內(nèi)的眾多的客戶/服務(wù)器模式的網(wǎng)絡(luò)應(yīng)用都需要使用udp協(xié)議。udp協(xié)議從問(wèn)世至今已經(jīng)被使用了很多年,雖然其最初的光彩已經(jīng)被一些類似協(xié)議所掩蓋,但是即使是在今天udp仍然不失為一項(xiàng)非常實(shí)用和可行的網(wǎng)絡(luò)傳輸層協(xié)議。 與所熟知的tcp(傳輸控制協(xié)議)協(xié)議

11、一樣,udp協(xié)議直接位于ip(網(wǎng)際協(xié)議)協(xié)議的頂層。根據(jù)osi(開(kāi)放系統(tǒng)互連)參考模型,udp和tcp都屬于傳輸層協(xié)議。udp協(xié)議的主要作用是將網(wǎng)絡(luò)數(shù)據(jù)流量壓縮成數(shù)據(jù)包的形式。一個(gè)典型的數(shù)據(jù)包就是一個(gè)二進(jìn)制數(shù)據(jù)的傳輸單位。每一個(gè)數(shù)據(jù)包的前8個(gè)字節(jié)用來(lái)包含報(bào)頭信息,剩余字節(jié)則用來(lái)包含具體的傳輸數(shù)據(jù)。3.2.2 tcp實(shí)現(xiàn)流程:圖 3.2.1-1面向連接(tcp)的socket工作流程圖3.2.1-2 tcp正常連接過(guò)程圖3.2.1-3 tcp正常終止連接過(guò)程 圖 3.2.1-4 tcp 連接過(guò)程3.2.3 udp實(shí)現(xiàn)流程:圖 3.2.2-1 udp工作過(guò)程圖 3.2.2-2 udp掃描過(guò)程3.2

12、.4 windows socket 套接字編程原理一、客戶機(jī)/服務(wù)器模式在tcp/ip網(wǎng)絡(luò)中兩個(gè)進(jìn)程間的相互作用的主機(jī)模式是客戶機(jī)/服務(wù)器模式(client/server model)。該模式的建立基于以下兩點(diǎn):1、非對(duì)等作用;2、通信完全是異步的??蛻魴C(jī)/服務(wù)器模式在操作過(guò)程中采取的是主動(dòng)請(qǐng)示方式:首先服務(wù)器方要先啟動(dòng),并根據(jù)請(qǐng)示提供相應(yīng)服務(wù):(過(guò)程如下)1、打開(kāi)一個(gè)通信通道并告知本地主機(jī),它愿意在某一個(gè)公認(rèn)地址上接收客戶請(qǐng)求。2、等待客戶請(qǐng)求到達(dá)該端口。3、接收到重復(fù)服務(wù)請(qǐng)求,處理該請(qǐng)求并發(fā)送應(yīng)答信號(hào)。4、返回第二步,等待另一客戶請(qǐng)求5、關(guān)閉服務(wù)器??蛻舴剑?、打開(kāi)一個(gè)通信通道,并連接到服

13、務(wù)器所在主機(jī)的特定端口。2、向服務(wù)器發(fā)送服務(wù)請(qǐng)求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請(qǐng)求3、請(qǐng)求結(jié)束后關(guān)閉通信通道并終止二、套接字1. 套接字地址結(jié)構(gòu)(1)、sockaddr結(jié)構(gòu):struct sockaddru_short sa_family; /* address family */char sa_data14; /* up to 14 bytes of direct address */; sa_family為網(wǎng)絡(luò)地址類型,一般為af_inet,表示該socket在internet域中進(jìn)行通信,該地址結(jié)構(gòu)隨選擇的協(xié)議的不同而變化,因此一般情況下另一個(gè)與該地址結(jié)構(gòu)大小相同的sockaddr_in

14、結(jié)構(gòu)更為常用,sockaddr_in結(jié)構(gòu)用來(lái)標(biāo)識(shí)tcp/ip協(xié)議下的地址。換句話說(shuō),這個(gè)結(jié)構(gòu)是通用socket地址結(jié)構(gòu),而下面的sockaddr_in是專門(mén)針對(duì)internet域的socket地址結(jié)構(gòu)。(2)、sockaddr_in結(jié)構(gòu)struct sockaddr_in short sin_family;u_short sin_port;struct in_addr sin_addr;char sin_zero8;sin _family為網(wǎng)絡(luò)地址類型,必須設(shè)定為af_inet。sin_port為服務(wù)端口,注意不要使用已固定的服務(wù)端口,如http的端口80等。如果端口設(shè)置為0,則系統(tǒng)會(huì)自動(dòng)分配

15、一個(gè)唯一端口。sin_addr為一個(gè)unsigned long的ip地址。sin_zero為填充字段,純粹用來(lái)保證結(jié)構(gòu)的大小。2套接字的使用步驟(1)、啟動(dòng)winsock:對(duì)winsock dll進(jìn)行初始化,協(xié)商winsock的版本支持并分配必要的資源。(服務(wù)器端和客戶端)。(2)、創(chuàng)建套接字:(服務(wù)器端和客戶端)socket socket( int af, int type, int protocol );、af為網(wǎng)絡(luò)地址類型,一般為af_inet,表示在internet域中使用。、type為套接字類型,前面已經(jīng)介紹了。、protocol為指定網(wǎng)絡(luò)協(xié)議,一般為ipproto_ip。(3)、套

16、接字的綁定:將本地地址綁定到所創(chuàng)建的套接字上。(服務(wù)器端和客戶端)int bind( socket s, const struct sockaddr far * name, int namelen )、s為已經(jīng)創(chuàng)建的套接字。、name為socket地址結(jié)構(gòu),為sockaddr結(jié)構(gòu),如前面討論的,我們一般使用sockaddr_in結(jié)構(gòu),在使用再?gòu)?qiáng)制轉(zhuǎn)換為sockaddr結(jié)構(gòu)。、namelen為地址結(jié)構(gòu)的長(zhǎng)度。(4)、套接字的監(jiān)聽(tīng):(服務(wù)器端)int listen(socket s, int backlog )、s為一個(gè)已綁定但未聯(lián)接的套接字。、backlog為指定正在等待聯(lián)接的最大隊(duì)列長(zhǎng)度,這個(gè)

17、參數(shù)非常重要,因?yàn)榉?wù)器一般可以提供多個(gè)連接。(5)、套接字等待連接:(服務(wù)器端)socket accept( socket s, struct sockaddr far * addr, int far * addrlen )、s為處于監(jiān)聽(tīng)模式的套接字。、sockaddr為接收成功后返回客戶端的網(wǎng)絡(luò)地址。、addrlen為網(wǎng)絡(luò)地址的長(zhǎng)度。(6)、套接字的連接:將兩個(gè)套接字連結(jié)起來(lái)準(zhǔn)備通信。(客戶端)int connect(socket s, const struct sockaddr far * name, int namelen )、s為欲連結(jié)的已創(chuàng)建的套接字。、name為欲連結(jié)的socke

18、t地址。、namelen為socket地址的結(jié)構(gòu)的長(zhǎng)度。(7)、套接字發(fā)送數(shù)據(jù):(服務(wù)器端和客戶端)int send(socket s, const char far * buf, int len, int flags )、s為服務(wù)器端監(jiān)聽(tīng)的套接字。、buf為欲發(fā)送數(shù)據(jù)緩沖區(qū)的指針。、len為發(fā)送數(shù)據(jù)緩沖區(qū)的長(zhǎng)度。、flags為數(shù)據(jù)發(fā)送標(biāo)記。、返回值為發(fā)送數(shù)據(jù)的字符數(shù)。(8)、套接字的數(shù)據(jù)接收:(客戶端)int recv( socket s, char far * buf, int len, int flags )、s為準(zhǔn)備接收數(shù)據(jù)的套接字。、buf為準(zhǔn)備接收數(shù)據(jù)的緩沖區(qū)。、len為準(zhǔn)備接收數(shù)

19、據(jù)緩沖區(qū)的大小。、flags為數(shù)據(jù)接收標(biāo)記。、返回值為接收的數(shù)據(jù)的字符數(shù)。(9)、中斷套接字連接:通知服務(wù)器端或客戶端停止接收和發(fā)送數(shù)據(jù)。(服務(wù)器端和客戶端)int shutdown(socket s, int how)、s為欲中斷連接的套接字。、how為描述禁止哪些操作,取值為:sd_receive、sd_send、sd_both。(10)、關(guān)閉套接字:釋放所占有的資源。(服務(wù)器端和客戶端)int closesocket( socket s )、s為欲關(guān)閉的套接字三、典型過(guò)程圖1. 面向連接的套接字的系統(tǒng)調(diào)用時(shí)序圖圖 3.2.3-12.無(wú)連接協(xié)議的套接字調(diào)用時(shí)序圖圖 3.2.3-24、實(shí)驗(yàn)過(guò)

20、程(1)、至少建立tcp/udp兩臺(tái)服務(wù)器服務(wù)器端口和服務(wù)必須有公開(kāi)和保密(后門(mén))兩類。一、tcp服務(wù)器、公開(kāi)服務(wù):在與客戶端進(jìn)行連接時(shí),能夠接收客戶端發(fā)送過(guò)來(lái)的消息。并返回相同的消息以響應(yīng)客戶端,同時(shí)日志文件將會(huì)記錄這一切:(如圖4-1所示)圖 4-1 公開(kāi)服務(wù)接收信息、保密服務(wù):當(dāng)客戶端發(fā)送停機(jī)密碼時(shí),服務(wù)器會(huì)自動(dòng)關(guān)機(jī),不對(duì)任何客戶端提供服務(wù):(圖4-2、圖4-3)圖 4-2(收到停機(jī)密碼的服務(wù)器)圖 4-3(發(fā)送了停機(jī)密碼的客戶端)二、ucp服務(wù)器、公開(kāi)服務(wù):能夠接收客戶端發(fā)送過(guò)來(lái)的消息,并響應(yīng)客戶端,同時(shí)日志文件將會(huì)記錄這一切:(如圖4-4所示)圖4-4公開(kāi)服務(wù)接收信息圖 4-5 ud

21、p客戶端界面4-6 發(fā)送了消息的udp客戶端界面圖 4-7 服務(wù)器開(kāi)啟了日志功能、保密服務(wù):在客戶端發(fā)送了停機(jī)密碼后,可以控制服務(wù)器關(guān)機(jī),但同時(shí)也會(huì)被服務(wù)器記錄在案。以便今后管理員對(duì)攻擊事件的追蹤。圖 4-8 服務(wù)器開(kāi)啟日志功能(2)、完成tcp/udp協(xié)議客戶端掃描程序可以掃描出公開(kāi)和保密的全部端口號(hào),確定全部公開(kāi)的服務(wù),甚少可以確定一種保密的服務(wù)。、掃描本機(jī) 1:查看哪些端口是開(kāi)放的。圖 4-9查看本機(jī)端口的開(kāi)放情況2:采用傳統(tǒng)單線程掃描熟知端口。圖 4-10 傳統(tǒng)順序掃描的結(jié)果截圖3:日志功能圖 4-11 日志記錄5:采用多線程掃描熟知端口圖 4-12 多線程掃描的結(jié)果截圖6:日志功能圖

22、 4-13 日志功能由以上截圖對(duì)比可知,單線程掃描的速度慢,而多線程掃描則實(shí)現(xiàn)了高并發(fā),掃描速度得到了大幅度的提升。但多線程掃描的難題是如何實(shí)現(xiàn)高并發(fā)卻不會(huì)出現(xiàn)錯(cuò)誤。因此,本人在掃描器中設(shè)定了兩種模式,當(dāng)掃描的端口范圍較小時(shí),建議使用單線程模式,這樣可以避免多線程掃描端口范圍較小時(shí)產(chǎn)生的錯(cuò)誤,雖然單線程是順序掃描而且一般服務(wù)器都有日志功能,但是掃描的范圍較小時(shí),比掃描端口范圍大的更不容易被服務(wù)器察覺(jué)。當(dāng)掃描端口范圍較大時(shí),建議采用多線程模式,首先是因?yàn)樗膾呙杷俣缺葐尉€程模式快得多,每多創(chuàng)建一個(gè)線程掃描速度單線程快一倍,但線程并不是越多就越好,在這里我只創(chuàng)建了50個(gè)線程,掃描速度大約是原來(lái)單線

23、程的50倍。其次,它所掃描的端口具有一定的隨機(jī)性,如果采用傳統(tǒng)的單線程模式順序掃描并且掃描的端口范圍大時(shí),不僅掃描時(shí)間長(zhǎng),而且是順序掃描,這樣做是不明智的!(3)、可以掃描顧劍老師上課的服務(wù)器94,檢查其安全情況。第一步:查看主機(jī)是否存活。ping 94圖 4-9 查看主機(jī)是否存活第二步:掃描主機(jī)的熟知端口號(hào)(01024)。圖 4-10掃描主機(jī)的熟知端口號(hào)(01024)圖 4-11 日志功能第三步:掃描主機(jī)的登記端口號(hào)(102549151)。圖 4-12掃描主機(jī)的登記端口號(hào)(102549151)圖 4-13 日志功能記錄綜上,服務(wù)器210.37.47

24、.194提供了ftp服務(wù)和telnet服務(wù)。首先,telnet服務(wù)器容易遭受到拒絕服務(wù)攻擊,另外telnet服務(wù)的開(kāi)放使得為不合法用戶開(kāi)啟了遠(yuǎn)程登錄,并控制服務(wù)器,最后留下入侵后門(mén)。(4)、可以掃描 服務(wù)器,檢查其安全情況。第一步:登陸網(wǎng)站,查看網(wǎng)址是否有效。圖 4-14登陸網(wǎng)站,查看網(wǎng)址是否有效第二步:ping 域名以獲得ip地址。圖4-15 ping 域名以獲得ip地址第三步:掃描服務(wù)器的熟知端口(01024)圖 4-16掃描服務(wù)器的熟知端口(01024)給出一些防范和修改建議:linux的111端口可能存在安全隱患。建議關(guān)閉此端口。111端口是sun公司的rpc(remote proce

25、dure call,遠(yuǎn)程過(guò)程調(diào)用)服務(wù)所開(kāi)放的端口,主要用于分布式系統(tǒng)中不同計(jì)算機(jī)的內(nèi)部進(jìn)程通信,rpc在多種網(wǎng)絡(luò)服務(wù)中都是很重要的組件。常見(jiàn)的rpc服務(wù)有rpcmountd、nfs、rpcstatd、rpccsmd、rpcttybd、amd等等。在microsoft的windows中,同樣也有rpc服務(wù)。如果可以不使用rpc服務(wù)的話,建議關(guān)閉此端口。第四步:查看該掃描記錄是否已存于日志文件中圖 4-17 日志功能第五步:掃描服務(wù)器的登記端口號(hào)(102549151)圖 4-18掃描服務(wù)器的登記端口號(hào)(102549151)第六步:查看日志圖 4-19 查看日志分析:45457端口開(kāi)放,可能是某黑

26、客留下的一個(gè)后門(mén),建議系統(tǒng)管理員盡快關(guān)閉此端口。否則將會(huì)被某些黑客利用。5、個(gè)人感想與感悟通過(guò)本次課程設(shè)計(jì)使我更為深刻地認(rèn)識(shí)到了編程的重要性,雖然老師讓我們寫(xiě)的代碼很多,但其實(shí)許多程序都是在老師的程序基礎(chǔ)上修改的,所以我們真正寫(xiě)的代碼其實(shí)只有掃描器的部分。但盡管如此,仍是把我更難住了,本來(lái)希望的設(shè)計(jì)目標(biāo)是、所有程序都跨平臺(tái)。、所有服務(wù)器都可以為多個(gè)客戶端進(jìn)行服務(wù)。、掃描程序?qū)崿F(xiàn)多線程隨機(jī)掃描。、所有程序都必須有日志記錄。、將tcp掃描器設(shè)計(jì)為tcp connect 掃描和tcp syn掃描兩種模式。但最終只實(shí)現(xiàn)了兩個(gè)半:掃描程序?qū)崿F(xiàn)多線程隨機(jī)掃描、所有程序都必須有日志記錄、tcp掃描器設(shè)計(jì)為t

27、cp connect 掃描。盡管沒(méi)有達(dá)到自己預(yù)定目標(biāo),但通過(guò)本次課程設(shè)計(jì)仍是讓我收獲很大,并且更加深刻地認(rèn)識(shí)到了自己的不足。今后,本人一定要在編程方面加強(qiáng)。否則,真的就是心有余而力不足啊。實(shí)驗(yàn)收獲:tcp/ip協(xié)議是網(wǎng)絡(luò)中使用最廣泛的協(xié)議。socket 套接口,最早出現(xiàn)在berkeley unix中,最初只支持tcpip協(xié)議族和unix協(xié)議,現(xiàn)在它已支持很多協(xié)議,是最重要的網(wǎng)絡(luò)編程接口,特別是在unix中,其核心直接支持socket 編程,幾乎所有的網(wǎng)絡(luò)應(yīng)用程序都是用socket api來(lái)實(shí)現(xiàn)的。win平臺(tái)中,需要特別的處理并用動(dòng)態(tài)庫(kù)socket動(dòng)態(tài)庫(kù)dll來(lái)實(shí)現(xiàn)。因此,需要在socket程序

28、之外特別處理。面向連接的tcp通信:1,發(fā)起連接的為客戶端client ,接收連接的一方稱為服務(wù)器端 server。2,雙方的通信一般分三步:建立連接、數(shù)據(jù)傳送、釋放連接。3,在傳送過(guò)程中數(shù)據(jù)按順序傳送,很像電路交換,因此又稱為“虛電路(vc,virtual circuit)服務(wù)”。4,這是一種使用者感覺(jué)可靠的服務(wù),但建立連接和釋放連接的開(kāi)銷很大。面向非連接的udp通信:1,互為客戶端和服務(wù)器端。任何一方都可隨時(shí)向?qū)Ψ桨l(fā)送或接收數(shù)據(jù)。2,這是一種使用者感覺(jué)不可靠的服務(wù),主要體現(xiàn):報(bào)文丟失、重復(fù)或與發(fā)送順序不一致等現(xiàn)象。3,使用者一定要編寫(xiě)高層協(xié)議來(lái)自行解決這些問(wèn)題。4,缺點(diǎn):對(duì)使用者要求高,優(yōu)

29、點(diǎn):靈活、方便、效率很高(特別是對(duì)通信網(wǎng)絡(luò),要求低,效率高)兩者比較:1,理論研究者為處理“不可靠”而做的選擇,面向連接:可靠性由低層服務(wù)(網(wǎng)絡(luò))負(fù)責(zé),面向非連接:可靠性由用戶負(fù)責(zé)。2,能否實(shí)際通信,取決于實(shí)際的底層服務(wù)(網(wǎng)絡(luò))。面向非連接的數(shù)據(jù)報(bào)達(dá)到不了對(duì)方,面向連接的通信一樣也不可能(這時(shí)基本是連接都建立不起來(lái))。3,能否通信的“信息”:可靠性兩者報(bào)告的方式不同。面向非連接需要使用者自己“感覺(jué)”,面向連接底層服務(wù)告訴使用者。得到“信息”的時(shí)間兩者并不一定(取決于使用者 )。4,底層(網(wǎng)絡(luò))為了保證“可靠”需要隨時(shí)進(jìn)行通信(包含互發(fā)和記錄信息),這樣,開(kāi)銷十分龐大。特別是在使用長(zhǎng)時(shí)間不進(jìn)行實(shí)

30、際通信時(shí),更是極大的浪費(fèi)。理論上的結(jié)論:1,使用者水平高、聰明時(shí),使用面向非連接方式是明智的。2,為了效率,使用面向非連接方式是明智的。3,在可以容忍數(shù)據(jù)丟失的情況下,使用面向非連接方式是明智的。如ping。如視頻/語(yǔ)音傳送。4,如果非想隨時(shí)了解線路是否可用,使用面向連接方式是明智的。附錄(程序代碼部分):附錄一:(基于tcp通信的客戶端與服務(wù)器)1. wqm_tcp_s.c 代碼#include#include#include#include #include #define socklen_t int #pragma comment (lib, ws2_32.lib)#define myl

31、ogname tcp_s.log#pragma pack(1) /結(jié)構(gòu)在存儲(chǔ)時(shí)按字節(jié)對(duì)齊#define ecom -100 /* 系統(tǒng)錯(cuò)誤 */#define epara1 -101 /* 第1個(gè)參數(shù)錯(cuò)誤 */#define epara2 -102 /* 第2個(gè)參數(shù)錯(cuò)誤 */#define emyret -103 /* 自行退出錯(cuò)誤 */#define maxclino 5/* 打印系統(tǒng)錯(cuò)誤號(hào)和錯(cuò)誤信息后返回 */#define syserr(s) perror(s);return(ecom);#define ffstd fflush(stdout); /* 清除輸出緩沖器. */* 打印地址

32、信息 */#define pradrr(addr) printf(%sn,#addr); printf(family:%u n,addr.sin_family); printf(addr :%08x=%sn,addr.sin_addr.s_addr, inet_ntoa(addr.sin_addr); printf(port :%u,%u n,addr.sin_port, htons(addr.sin_port);#define serv_port 26 /* 服務(wù)器服務(wù)端口 */#define sa struct sockaddr /* socket地址縮寫(xiě) */#define maxlen

33、 4096 /* 最大緩沖長(zhǎng)度 */char serverip20=;file *fp;unsigned short sport=serv_port;unsigned short cport;/*01*/int dotcpserverdisp(void); /* 沒(méi)有記錄 的服務(wù)程序 */#define demainint main(int argc,char *argv)int ret=1;printf(/*tcp服務(wù)器*/n);printf( server ip=%s port=%dn,serverip,sport);if(fp=fopen(tcp_s.log,a)=nu

34、ll)printf(不能打開(kāi)文件!n);exit(1);elseprintf(tcp服務(wù)器日志已打開(kāi)!n); dotcpserverdisp(); /* 記錄接收發(fā)送數(shù)據(jù)的服務(wù)程序 */*01*/int dotcpserverdisp() #ifdef _win32 wsadata wsadata; #endif static serno=0; /*服務(wù)次數(shù) */ int sockfd,saccept; /* socket 句柄 */ int socklen; /* socket 結(jié)構(gòu)長(zhǎng)度 */ int isend; /* 發(fā)送信息長(zhǎng)度 */ int irecv; /* 接收信息長(zhǎng)度 */ #

35、define buflen 1024 char sbufbuflen; /* 發(fā)送緩沖區(qū) */ char rbufbuflen; /* 接收緩沖區(qū) */ int sendlen; /* 發(fā)送數(shù)據(jù)長(zhǎng)度 */ struct sockaddr_in ser,cli;if(wsastartup(makeword(2,2),&wsadata)!=0) syserr(wsastartup() failed!); if(sockfd=socket(af_inet,sock_stream,0)=invalid_socket)syserr(socket() failed!); ser.sin_family=af

36、_inet; ser.sin_port=htons(sport); ser.sin_addr.s_addr=inet_addr(serverip); printf(tcp server running at(ip=%s port=%d)n,serverip,sport); if(bind(sockfd,(struct sockaddr*)&ser,sizeof(ser)=socket_error) syserr(bind() failed!); socklen=sizeof(ser); if(listen(sockfd,maxclino)-1) syserr(listen() failed!)

37、; socklen=sizeof(cli);loopaccept: /* 接受客戶端連接請(qǐng)求 */ saccept=accept(sockfd,(struct sockaddr*)&cli,&socklen); if(saccept=(-1)syserr(accept() failed!); printf(accepted client ip:%s,prot:%dn, inet_ntoa(ser.sin_addr), ntohs(ser.sin_port);fprintf(fp,accepted client ip:%s,prot:%dn, inet_ntoa(ser.sin_addr), n

38、tohs(ser.sin_port);loop: irecv=recv(saccept,rbuf,sizeof(rbuf),0); if(irecv0) syserr(receive error from client!n); else if(irecv=0) printf( 一個(gè)客戶端結(jié)束,現(xiàn)在開(kāi)始為下一個(gè)客戶服務(wù)!n);/可以順序地為多個(gè)用戶服務(wù),但前提是前一個(gè)用戶必須退出 goto loopaccept; /* 服務(wù)處理 */ rbufirecv=0; sprintf(sbuf,%s(%d:%d)serno=%d r(%s:%d), rbuf,strlen(rbuf),irecv,+se

39、rno, inet_ntoa(cli.sin_addr),ntohs(cli.sin_port); fprintf(fp,%s(%d:%d)serno=%d r(%s:%d), rbuf,strlen(rbuf),irecv,+serno, inet_ntoa(cli.sin_addr),ntohs(cli.sin_port); isend=send(saccept,sbuf,strlen(sbuf),0); if(isend-1)syserr(send() failed:%dn); else if(isend=0) printf(isend=0 errorr? n);goto loop; f

40、printf(fp,send %s(%d) okn,sbuf,isend); goto loop; lend: closesocket(sockfd); wsacleanup(); return(0);/* end 01 int dotcpserver() */2. wqm_tcp_c.c 代碼#include#include#include#include #include #define socklen_t int /*gujians programs need the definition */#pragma comment (lib, ws2_32.lib)#pragma pack(1

41、) /結(jié)構(gòu)在存儲(chǔ)時(shí)按字節(jié)對(duì)齊#define ecom -100 /* 系統(tǒng)錯(cuò)誤 */#define epara1 -101 /* 第1個(gè)參數(shù)錯(cuò)誤 */#define epara2 -102 /* 第2個(gè)參數(shù)錯(cuò)誤 */#define emyret -103 /* 自行退出錯(cuò)誤 */* 打印系統(tǒng)錯(cuò)誤號(hào)和錯(cuò)誤信息后返回 */#define syserr(s) perror(s);return(ecom);#define ffstd fflush(stdout); /* 清除輸出緩沖器. */* 打印地址信息 */#define pradrr(addr) printf(%sn,#addr); prin

42、tf(family:%u n,addr.sin_family); printf(addr :%08x=%sn,addr.sin_addr.s_addr, inet_ntoa(addr.sin_addr); printf(port :%u,%u n,addr.sin_port, htons(addr.sin_port);#define serv_port 26 /* 服務(wù)器服務(wù)端口 */#define sa struct sockaddr /* socket地址縮寫(xiě) */#define maxlen 4096 /* 最大緩沖長(zhǎng)度 */char serverip20=;unsig

43、ned short sport=serv_port;unsigned short cport;/*c01*/int dotcpclient(void); /* 沒(méi)有記錄程序的客戶端程序*/*c02*/int dotcpcliwri(void); /* 有記錄程序的客戶端程序*/*02*/int dotcpserverwrite(void); /* 記錄接收發(fā)送數(shù)據(jù)的服務(wù)程序 */#define demainint main(int argc,char *argv)int ret=1; #ifdef demainprintf(/* tcp客戶端 */n);printf( server ip=%s

44、 port=%dn,serverip,sport);#endif dotcpclient(); /* 沒(méi)有記錄程序的客戶端程序*/ dotcpcliwri(); /* 有記錄程序的客戶端程序*/#define endstr run /* 服務(wù)器停機(jī)密碼*/#define dedotcpclient/*c01*/int dotcpclient() /* 沒(méi)有記錄程序的客戶端程序*/ #ifdef _win32 wsadata wsadata; #endif int sno=0; int sockfd; /* socket 句柄 */ int isend; /* 發(fā)送信息長(zhǎng)度 */ int ire

45、cv; /* 接收信息長(zhǎng)度 */ #define buflen 1024 char sbufbuflen; /* 發(fā)送緩沖區(qū) */ char rbufbuflen; /* 接收緩沖區(qū) */ int sendlen; /* 發(fā)送數(shù)據(jù)長(zhǎng)度 */ struct sockaddr_in ser; char c=o; memset(rbuf,0,sizeof(rbuf); #ifdef _win32 if(wsastartup(makeword(2,2),&wsadata)!=0) printf(failed to load winsock!n); return -1; #endif ser.sin_f

46、amily=af_inet; ser.sin_port=htons(sport); ser.sin_addr.s_addr=inet_addr(serverip); if(sockfd=socket(af_inet,sock_stream,0)=invalid_socket) syserr(socket() failed!); if(connect(sockfd,(struct sockaddr*)&ser,sizeof(ser)=invalid_socket) syserr(connect() failed);loop: printf( 請(qǐng)輸入你想說(shuō)的話:); scanf(%s,sbuf); sendlen=

溫馨提示

  • 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)論