《安全掃描》課程設(shè)計(jì)報(bào)告_第1頁
《安全掃描》課程設(shè)計(jì)報(bào)告_第2頁
《安全掃描》課程設(shè)計(jì)報(bào)告_第3頁
《安全掃描》課程設(shè)計(jì)報(bào)告_第4頁
《安全掃描》課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、海南大學(xué)信息學(xué)院信息安全系專業(yè)課程安全掃描課程設(shè)計(jì)報(bào)告姓 名: 學(xué) 號(hào): 學(xué) 院: 信息科學(xué)技術(shù)學(xué)院 成 績: 任課教師: 顧 劍 二一三年十二月五日目 錄摘 要 -11.引言 -11.1開發(fā)背景 -11.2 設(shè)計(jì)題目及要求-12.程序的編譯與開發(fā) -22.1 開發(fā)目的 -22.2 開發(fā)環(huán)境及工具-22.3 開發(fā)過程-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)過程-105、個(gè)人感想與感悟 - 23附錄(程序代

2、碼部分)-23附錄一:(基于TCP通信的客戶端與服務(wù)器)-23附錄二:(基于UDP通信的客戶端與服務(wù)器)-29附錄三:(基于 TCP/UDP 的網(wǎng)絡(luò)安全掃描) -38摘 要計(jì)算機(jī)信息網(wǎng)絡(luò)的發(fā)展加速了信息化時(shí)代的進(jìn)程,但是隨著社會(huì)網(wǎng)絡(luò)化程度的增加,對計(jì)算機(jī)網(wǎng)絡(luò)的依賴也越來越大,網(wǎng)絡(luò)安全問題也日益明顯。端口掃描技術(shù)室發(fā)現(xià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)獲取的不為

3、“00-00-00-00-00-00”時(shí),則認(rèn)為當(dāng)前主機(jī)可達(dá),是活動(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 的不可靠傳輸,我們可以通過套接字編程給目標(biāo)主機(jī)發(fā)送消息,能夠得到返回消息,則認(rèn)為主機(jī)可到達(dá)(相應(yīng)掃描到端口)。根據(jù)以上方法,我們均能掃描到開放的端口,因此,我們同樣可以做到對自己電腦的自糾自查,對自己的主機(jī)實(shí)施相應(yīng)的網(wǎng)絡(luò)安全保護(hù)。關(guān)鍵字:TCP連接 套接字 TCP/UDP端口掃描.客戶端、服務(wù)器及網(wǎng)絡(luò)

4、安全掃描的實(shí)現(xiàn)1.引言1.1開發(fā)背景 端口掃描,顧名思義,就是對目標(biāo)主機(jī)的端口依次進(jìn)行連接,對于能進(jìn)行數(shù)據(jù)通信的,則認(rèn)為是”開”狀態(tài),否則認(rèn)為是”關(guān)”狀態(tài)。由于絕大部分公用服務(wù)于端口有對應(yīng)關(guān)系,因此通過端口的”開”與”關(guān)”狀態(tài),可以初步判斷對方是否提供相應(yīng)的服務(wù),為下一步的操作提供參考。 端口是一個(gè)傳輸層的概念,因此端口掃描也僅限于在傳輸層上進(jìn)行,傳輸層一般將協(xié)議分為TCP協(xié)議和UDP協(xié)議,所以端口掃描也根據(jù)掃描所采用的類型分為TCP端口掃描、UDP端口掃描兩大類。 端口掃描與其說是一種攻擊方法,不如說是一種檢測方法,因?yàn)橥ㄟ^端口掃描,即使是知道對方哪些端口是開的,也不意味著對方就一定提供了這

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

6、部端口號(hào),確定全部公開的服務(wù),甚少可以確定一種保密的服務(wù)。(3)、可以掃描顧劍老師上課的服務(wù)器94,檢查其安全情況。(4)、可以掃描 服務(wù)器,檢查其安全情況。(5)、同學(xué)之間可以互相掃描各自的服務(wù)器,檢查其服務(wù)情況。(6)、不可掃描其他境內(nèi)服務(wù)器。(7)、寫出完整的試驗(yàn)報(bào)告,并嘗試給出一些防范和修改建議。2.程序的編譯與開發(fā)2.1 開發(fā)目的1.了解和掌握TCP/IP協(xié)議的基本原理(TCP通信、UDP通信);2.了解網(wǎng)絡(luò)環(huán)境下的程序設(shè)計(jì)步驟和過程;3.掌握Winsock提供函數(shù)的功能和用法。2.2 開發(fā)環(huán)境及工具測試平臺(tái):Windows XP Professional使用軟

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

8、nsock套接字編程來實(shí)現(xiàn)。3.2相關(guān)理論3.2.1協(xié)議介紹(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ā)展起來的。 有時(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)奇怪,但沒有必要去爭論這個(gè)習(xí)慣。

9、例如,有時(shí)我們討論NFS是基于TCP/IP時(shí),盡管它根本沒用到TCP(只用到IP和另一種交互式協(xié)議UDP,而不是TCP)。 TCP/IP的標(biāo)準(zhǔn)在一系列稱為RFC的文檔中公布。文檔由技術(shù)專家、特別工作組、或RFC編輯修訂。公布一個(gè)文檔時(shí),該文檔被賦予一個(gè)RFC編號(hào),如RFC959(FTP的說明文檔)、RFC793(TCP的說明文檔)、RFC791(IP的說明文檔)等。最初的RFC一直保留而從來不會(huì)被更新,如果修改了該文檔,則該文檔又以一個(gè)新號(hào)碼公布。因此,重要的是要確認(rèn)你擁有了關(guān)于某個(gè)專題的最新RFC文檔。通常在RFC的開頭部分,有相關(guān)RFC的更新(update)、修改(errata)、作廢(o

10、bsolete)信息,提示讀者信息的時(shí)效性。詳情請閱讀網(wǎng)站RFC-editor1。(2)UCPUDP協(xié)議的全稱是用戶數(shù)據(jù)包協(xié)議,在網(wǎng)絡(luò)中它與TCP協(xié)議一樣用于處理數(shù)據(jù)包,是一種無連接的協(xié)議。在OSI模型中,在第四層傳輸層,處于IP協(xié)議的上一層。UDP有不提供數(shù)據(jù)包分組、組裝和不能對數(shù)據(jù)包進(jìn)行排序的缺點(diǎn),也就是說,當(dāng)報(bào)文發(fā)送之后,是無法得知其是否安全完整到達(dá)的。UDP用來支持那些需要在計(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é)議從問世至今已經(jīng)被使用了很多年,雖然其最初的光彩已經(jīng)被一些類似協(xié)議所掩蓋,但是即使是在今天UDP

11、仍然不失為一項(xiàng)非常實(shí)用和可行的網(wǎng)絡(luò)傳輸層協(xié)議。 與所熟知的TCP(傳輸控制協(xié)議)協(xié)議一樣,UDP協(xié)議直接位于IP(網(wǎng)際協(xié)議)協(xié)議的頂層。根據(jù)OSI(開放系統(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é)用來包含報(bào)頭信息,剩余字節(jié)則用來包含具體的傳輸數(shù)據(jù)。3.2.2 TCP實(shí)現(xiàn)流程:圖 3.2.1-1面向連接(TCP)的socket工作流程圖3.2.1-2 TCP正常連接過程圖3.2.1-3 TCP正常終止連接過程 圖 3.2.1-4 TCP 連接過程3.2.3 UDP

12、實(shí)現(xiàn)流程:圖 3.2.2-1 UDP工作過程圖 3.2.2-2 UDP掃描過程3.2.4 Windows Socket 套接字編程原理一、客戶機(jī)/服務(wù)器模式在TCP/IP網(wǎng)絡(luò)中兩個(gè)進(jìn)程間的相互作用的主機(jī)模式是客戶機(jī)/服務(wù)器模式(Client/Server model)。該模式的建立基于以下兩點(diǎn):1、非對等作用;2、通信完全是異步的。客戶機(jī)/服務(wù)器模式在操作過程中采取的是主動(dòng)請示方式:首先服務(wù)器方要先啟動(dòng),并根據(jù)請示提供相應(yīng)服務(wù):(過程如下)1、打開一個(gè)通信通道并告知本地主機(jī),它愿意在某一個(gè)公認(rèn)地址上接收客戶請求。2、等待客戶請求到達(dá)該端口。3、接收到重復(fù)服務(wù)請求,處理該請求并發(fā)送應(yīng)答信號(hào)。4、

13、返回第二步,等待另一客戶請求5、關(guān)閉服務(wù)器??蛻舴剑?、打開一個(gè)通信通道,并連接到服務(wù)器所在主機(jī)的特定端口。2、向服務(wù)器發(fā)送服務(wù)請求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請求3、請求結(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)行通信,該地

14、址結(jié)構(gòu)隨選擇的協(xié)議的不同而變化,因此一般情況下另一個(gè)與該地址結(jié)構(gòu)大小相同的sockaddr_in結(jié)構(gòu)更為常用,sockaddr_in結(jié)構(gòu)用來標(biāo)識(shí)TCP/IP協(xié)議下的地址。換句話說,這個(gè)結(jié)構(gòu)是通用socket地址結(jié)構(gòu),而下面的sockaddr_in是專門針對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為服

15、務(wù)端口,注意不要使用已固定的服務(wù)端口,如HTTP的端口80等。如果端口設(shè)置為0,則系統(tǒng)會(huì)自動(dòng)分配一個(gè)唯一端口。sin_addr為一個(gè)unsigned long的IP地址。sin_zero為填充字段,純粹用來保證結(jié)構(gòu)的大小。2套接字的使用步驟(1)、啟動(dòng)Winsock:對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為套接

16、字類型,前面已經(jīng)介紹了。、protocol為指定網(wǎng)絡(luò)協(xié)議,一般為IPPROTO_IP。(3)、套接字的綁定:將本地地址綁定到所創(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),在使用再強(qiáng)制轉(zhuǎn)換為sockaddr結(jié)構(gòu)。、namelen為地址結(jié)構(gòu)的長度。(4)、套接字的監(jiān)聽:(服務(wù)器端)int listen(SOCKET s, int backl

17、og )、s為一個(gè)已綁定但未聯(lián)接的套接字。、backlog為指定正在等待聯(lián)接的最大隊(duì)列長度,這個(gè)參數(shù)非常重要,因?yàn)榉?wù)器一般可以提供多個(gè)連接。(5)、套接字等待連接:(服務(wù)器端)SOCKET accept( SOCKET s, struct sockaddr FAR * addr, int FAR * addrlen )、s為處于監(jiān)聽模式的套接字。、sockaddr為接收成功后返回客戶端的網(wǎng)絡(luò)地址。、addrlen為網(wǎng)絡(luò)地址的長度。(6)、套接字的連接:將兩個(gè)套接字連結(jié)起來準(zhǔn)備通信。(客戶端)int connect(SOCKET s, const struct sockaddr FAR * n

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

19、 flags )、s為準(zhǔn)備接收數(shù)據(jù)的套接字。、buf為準(zhǔn)備接收數(shù)據(jù)的緩沖區(qū)。、len為準(zhǔn)備接收數(shù)據(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)閉的套接字 三、典型過程圖1. 面

20、向連接的套接字的系統(tǒng)調(diào)用時(shí)序圖圖 3.2.3-12.無連接協(xié)議的套接字調(diào)用時(shí)序圖圖 3.2.3-24、實(shí)驗(yàn)過程(1)、至少建立TCP/UDP兩臺(tái)服務(wù)器服務(wù)器端口和服務(wù)必須有公開和保密(后門)兩類。一、TCP服務(wù)器、公開服務(wù):在與客戶端進(jìn)行連接時(shí),能夠接收客戶端發(fā)送過來的消息。并返回相同的消息以響應(yīng)客戶端,同時(shí)日志文件將會(huì)記錄這一切:(如圖4-1所示)圖 4-1 公開服務(wù)接收信息、保密服務(wù):當(dāng)客戶端發(fā)送停機(jī)密碼時(shí),服務(wù)器會(huì)自動(dòng)關(guān)機(jī),不對任何客戶端提供服務(wù):(圖4-2、圖4-3)圖 4-2(收到停機(jī)密碼的服務(wù)器)圖 4-3(發(fā)送了停機(jī)密碼的客戶端)二、UCP服務(wù)器、公開服務(wù):能夠接收客戶端發(fā)送過來

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

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

23、創(chuàng)建一個(gè)線程掃描速度單線程快一倍,但線程并不是越多就越好,在這里我只創(chuàng)建了50個(gè)線程,掃描速度大約是原來單線程的50倍。其次,它所掃描的端口具有一定的隨機(jī)性,如果采用傳統(tǒng)的單線程模式順序掃描并且掃描的端口范圍大時(shí),不僅掃描時(shí)間長,而且是順序掃描,這樣做是不明智的!(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)。圖

24、 4-12掃描主機(jī)的登記端口號(hào)(102549151)圖 4-13 日志功能記錄綜上,服務(wù)器94提供了ftp服務(wù)和telnet服務(wù)。首先,telnet服務(wù)器容易遭受到拒絕服務(wù)攻擊,另外telnet服務(wù)的開放使得為不合法用戶開啟了遠(yuǎn)程登錄,并控制服務(wù)器,最后留下入侵后門。(4)、可以掃描 服務(wù)器,檢查其安全情況。第一步:登陸網(wǎng)站,查看網(wǎng)址是否有效。圖 4-14登陸網(wǎng)站,查看網(wǎng)址是否有效第二步:ping 域名以獲得IP地址。圖4-15 ping 域名以獲得IP地址第三步:掃描服務(wù)器的熟知端口(01024)圖 4-16掃描服務(wù)器的熟知端口(01024)給出一些防范和修改建議:li

25、nux的111端口可能存在安全隱患。建議關(guān)閉此端口。111端口是SUN公司的RPC(Remote Procedure Call,遠(yuǎn)程過程調(diào)用)服務(wù)所開放的端口,主要用于分布式系統(tǒng)中不同計(jì)算機(jī)的內(nèi)部進(jìn)程通信,RPC在多種網(wǎng)絡(luò)服務(wù)中都是很重要的組件。常見的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ù)器

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

27、描兩種模式。但最終只實(shí)現(xiàn)了兩個(gè)半:掃描程序?qū)崿F(xiàn)多線程隨機(jī)掃描、所有程序都必須有日志記錄、TCP掃描器設(shè)計(jì)為TCP connect 掃描。盡管沒有達(dá)到自己預(yù)定目標(biāo),但通過本次課程設(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

28、來實(shí)現(xiàn)的。WIN平臺(tái)中,需要特別的處理并用動(dòng)態(tài)庫socket動(dòng)態(tài)庫DLL來實(shí)現(xiàn)。因此,需要在socket程序之外特別處理。面向連接的TCP通信:1,發(fā)起連接的為客戶端Client ,接收連接的一方稱為服務(wù)器端 Server。2,雙方的通信一般分三步:建立連接、數(shù)據(jù)傳送、釋放連接。3,在傳送過程中數(shù)據(jù)按順序傳送,很像電路交換,因此又稱為“虛電路(VC,Virtual Circuit)服務(wù)”。4,這是一種使用者感覺可靠的服務(wù),但建立連接和釋放連接的開銷很大。面向非連接的UDP通信:1,互為客戶端和服務(wù)器端。任何一方都可隨時(shí)向?qū)Ψ桨l(fā)送或接收數(shù)據(jù)。2,這是一種使用者感覺不可靠的服務(wù),主要體現(xiàn):報(bào)文丟失

29、、重復(fù)或與發(fā)送順序不一致等現(xiàn)象。3,使用者一定要編寫高層協(xié)議來自行解決這些問題。4,缺點(diǎn):對使用者要求高,優(yōu)點(diǎn):靈活、方便、效率很高(特別是對通信網(wǎng)絡(luò),要求低,效率高)兩者比較:1,理論研究者為處理“不可靠”而做的選擇,面向連接:可靠性由低層服務(wù)(網(wǎng)絡(luò))負(fù)責(zé),面向非連接:可靠性由用戶負(fù)責(zé)。2,能否實(shí)際通信,取決于實(shí)際的底層服務(wù)(網(wǎng)絡(luò))。面向非連接的數(shù)據(jù)報(bào)達(dá)到不了對方,面向連接的通信一樣也不可能(這時(shí)基本是連接都建立不起來)。3,能否通信的“信息”:可靠性兩者報(bào)告的方式不同。面向非連接需要使用者自己“感覺”,面向連接底層服務(wù)告訴使用者。得到“信息”的時(shí)間兩者并不一定(取決于使用者 )。4,底層(

30、網(wǎng)絡(luò))為了保證“可靠”需要隨時(shí)進(jìn)行通信(包含互發(fā)和記錄信息),這樣,開銷十分龐大。特別是在使用長時(shí)間不進(jìn)行實(shí)際通信時(shí),更是極大的浪費(fèi)。理論上的結(jié)論:1,使用者水平高、聰明時(shí),使用面向非連接方式是明智的。2,為了效率,使用面向非連接方式是明智的。3,在可以容忍數(shù)據(jù)丟失的情況下,使用面向非連接方式是明智的。如ping。如視頻/語音傳送。4,如果非想隨時(shí)了解線路是否可用,使用面向連接方式是明智的。附錄(程序代碼部分):附錄一:(基于TCP通信的客戶端與服務(wù)器)1. wqm_TCP_S.C 代碼#include<Winsock2.h>#include<stdio.h>#incl

31、ude<time.h>#include <sys/timeb.h>#include <io.h>#define socklen_t int #pragma comment (lib, "Ws2_32.lib")#define MyLogName "Tcp_S.log"#pragma pack(1) /結(jié)構(gòu)在存儲(chǔ)時(shí)按字節(jié)對齊#define ECom -100 /* 系統(tǒng)錯(cuò)誤 */#define EPara1 -101 /* 第1個(gè)參數(shù)錯(cuò)誤 */#define EPara2 -102 /* 第2個(gè)參數(shù)錯(cuò)誤 */#defin

32、e EMyRet -103 /* 自行退出錯(cuò)誤 */#define MaxCliNo 5/* 打印系統(tǒng)錯(cuò)誤號(hào)和錯(cuò)誤信息后返回 */#define SysErr(S) perror(S);return(ECom);#define FFSTD fflush(stdout); /* 清除輸出緩沖器. */* 打印地址信息 */#define PrAdrr(Addr) printf("%sn",#Addr); printf("family:%u n",Addr.sin_family); printf("addr :%08x=%sn",Addr

33、.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地址縮寫 */#define MAXLEN 4096 /* 最大緩沖長度 */char ServerIP20=""FILE *fp;unsigned short SPort=SERV_PORT;u

34、nsigned short CPort;/*01*/int DoTCPServerDisp(void); /* 沒有記錄 的服務(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")=NULL)printf("不能打開文件!n");exit(

35、1);elseprintf("TCP服務(wù)器日志已打開!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)長度 */ int iSend; /* 發(fā)送信息長度 */ int iRecv; /* 接收信息長度 */ #define BufLen

36、 1024 char SBufBufLen; /* 發(fā)送緩沖區(qū) */ char RBufBufLen; /* 接收緩沖區(qū) */ int SendLen; /* 發(fā)送數(shù)據(jù)長度 */ 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!"); se

37、r.sin_family=AF_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(S

38、ockFd,MaxCliNo)<-1) SysErr("listen() Failed!"); SockLen=sizeof(cli);LoopAccept: /* 接受客戶端連接請求 */ 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)

39、, ntohs(ser.sin_port);fprintf(fp,"Accepted client IP:%s,prot:%dn", inet_ntoa(ser.sin_addr), ntohs(ser.sin_port);Loop: iRecv=recv(sAccept,RBuf,sizeof(RBuf),0); if(iRecv<0) SysErr("receive error from client!n"); else if(iRecv=0) printf(" 一個(gè)客戶端結(jié)束,現(xiàn)在開始為下一個(gè)客戶服務(wù)!n");/可以順序地

40、為多個(gè)用戶服務(wù),但前提是前一個(gè)用戶必須退出 goto LoopAccept; /* 服務(wù)處理 */ RBufiRecv=0; sprintf(SBuf,"%s(%d:%d)SerNo=%d R(%s:%d)", RBuf,strlen(RBuf),iRecv,+SerNo, 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),

41、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; fprintf(fp,"send %s(%d) OKn",SBuf,iSend); goto Loop; LEnd: closesocket(SockFd); WSACleanup(); return(0);/* e

42、nd 01 int DoTCPServer() */2. wqm_TCP_C.C 代碼#include<Winsock2.h>#include<stdio.h>#include<time.h>#include <sys/timeb.h>#include <io.h>#define socklen_t int /*Gujian's programs need the definition */#pragma comment (lib, "Ws2_32.lib")#pragma pack(1) /結(jié)構(gòu)在存儲(chǔ)時(shí)按

43、字節(jié)對齊#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); pr

44、intf("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地址縮寫 */#define MAXLEN 4096 /* 最大

45、緩沖長度 */char ServerIP20=""unsigned short SPort=SERV_PORT;unsigned short CPort;/*c01*/int DoTCPClient(void); /* 沒有記錄程序的客戶端程序*/*c02*/int DoTCPCliWri(void); /* 有記錄程序的客戶端程序*/*02*/int DoTCPServerWrite(void); /* 記錄接收發(fā)送數(shù)據(jù)的服務(wù)程序 */#define Demainint main(int argc,char *argv)int Ret=1; #ifdef

46、 Demainprintf("/* TCP客戶端 */n");printf(" Server IP=%s Port=%dn",ServerIP,SPort);#endif DoTCPClient(); /* 沒有記錄程序的客戶端程序*/ DoTCPCliWri(); /* 有記錄程序的客戶端程序*/#define EndStr "RUN" /* 服務(wù)器停機(jī)密碼*/#define DeDoTCPClient/*c01*/int DoTCPClient() /* 沒有記錄程序的客戶端程序*/ #ifdef _WIN32 WSADATA w

47、saData; #endif int SNo=0; int SockFd; /* socket 句柄 */ int iSend; /* 發(fā)送信息長度 */ int iRecv; /* 接收信息長度 */ #define BufLen 1024 char SBufBufLen; /* 發(fā)送緩沖區(qū) */ char RBufBufLen; /* 接收緩沖區(qū) */ int SendLen; /* 發(fā)送數(shù)據(jù)長度 */ struct sockaddr_in ser; char C='O' memset(RBuf,0,sizeof(RBuf); #ifdef _WIN32 if(WSASta

48、rtup(MAKEWORD(2,2),&wsaData)!=0) printf("Failed to load Winsock!n"); return -1; #endif ser.sin_family=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(So

49、ckFd,(struct sockaddr*)&ser,sizeof(ser)=INVALID_SOCKET) SysErr("connect() Failed");Loop: printf(" 請輸入你想說的話:"); scanf("%s",SBuf); SendLen=strlen(SBuf); sprintf(&SBufSendLen,"Client:%d",SNo+); #ifdef DeDoTCPClient printf("SBuf=%s:%d EndStr=%s:%dn", SBuf,SendLen,EndStr,strlen(EndStr); #endif if(memcmp(SBuf,EndStr,SendLen

溫馨提示

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

評論

0/150

提交評論