2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩47頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  《安全掃描》課程設(shè)計(jì)報(bào)告</p><p>  姓 名: </p><p>  學(xué) 號(hào): </p><p>  學(xué) 院: 信息科學(xué)技術(shù)學(xué)院 </p><p>  成 績:

2、 </p><p>  任課教師: </p><p>  二〇一三年十二月五日</p><p><b>  目 錄</b></p><p>  摘 要 -------------------------------------------------------------

3、---1</p><p>  1.引言 -----------------------------------------------------------------1</p><p>  1.1開發(fā)背景 -------------------------------------------------------1</p><p>  1.2 設(shè)計(jì)題目及要求-

4、----------------------------------------------1</p><p>  2.程序的編譯與開發(fā) -----------------------------------------------2</p><p>  2.1 開發(fā)目的 -------------------------------------------------------2<

5、;/p><p>  2.2 開發(fā)環(huán)境及工具------------------------------------------------2</p><p>  2.3 開發(fā)過程---------------------------------------------------------2</p><p>  3.基本思路及所涉及的相關(guān)理論 ------------

6、---------------------2</p><p>  3.1基本思路----------------------------------------------------------2</p><p>  3.2相關(guān)理論----------------------------------------------------------2</p><p>

7、;  3.2.1協(xié)議介紹 -----------------------------------------------------2</p><p>  3.2.2 TCP實(shí)現(xiàn)流程------------------------------------------------3</p><p>  3.2.3 UDP實(shí)現(xiàn)流程--------------------------------

8、----------------5</p><p>  3.2.4 Windows Socket 套接字編程原理------------------------------6</p><p>  4.實(shí)驗(yàn)過程--------------------------------------------------------------10</p><p>  5、個(gè)人感

9、想與感悟 -------------------------------------------------- 23</p><p>  附錄(程序代碼部分)------------------------------------------------23</p><p>  附錄一:(基于TCP通信的客戶端與服務(wù)器)----------------------23</p>

10、<p>  附錄二:(基于UDP通信的客戶端與服務(wù)器)----------------------29</p><p>  附錄三:(基于 TCP/UDP 的網(wǎng)絡(luò)安全掃描) ----------------------38</p><p><b>  摘 要</b></p><p>  計(jì)算機(jī)信息網(wǎng)絡(luò)的發(fā)展加速了信息化時(shí)代的進(jìn)程,

11、但是隨著社會(huì)網(wǎng)絡(luò)化程度的增加,對(duì)計(jì)算機(jī)網(wǎng)絡(luò)的依賴也越來越大,網(wǎng)絡(luò)安全問題也日益明顯。端口掃描技術(shù)室發(fā)現(xiàn)安全問題的重要手段之一。</p><p>  當(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)端口掃描。</p><p>  (1)、利用ARP協(xié)議獲

12、取活動(dòng)主機(jī)的MAC地址,當(dāng)獲取的不為“00-00-00-00-00-00”時(shí),則認(rèn)為當(dāng)前主機(jī)可達(dá),是活動(dòng)的主機(jī);</p><p>  (2)、利用ICMP協(xié)議,使用系統(tǒng)自帶的PING程序,當(dāng)能PING 通目標(biāo)主機(jī)時(shí),認(rèn)為是活動(dòng)主機(jī)(能掃描到活動(dòng)的端口);</p><p>  (3)、基于TCP的鏈接狀態(tài)當(dāng)判斷鏈接成功認(rèn)為主機(jī)可到達(dá)(并能掃描到相應(yīng)的端口);</p><p

13、>  (4)、基于UDP 的不可靠傳輸,我們可以通過套接字編程給目標(biāo)主機(jī)發(fā)送消息,能夠得到返回消息,則認(rèn)為主機(jī)可到達(dá)(相應(yīng)掃描到端口)。</p><p>  根據(jù)以上方法,我們均能掃描到開放的端口,因此,我們同樣可以做到對(duì)自己電腦的自糾自查,對(duì)自己的主機(jī)實(shí)施相應(yīng)的網(wǎng)絡(luò)安全保護(hù)。</p><p>  關(guān)鍵字:TCP連接 套接字 TCP/UDP端口掃描.</p><p

14、>  客戶端、服務(wù)器及網(wǎng)絡(luò)安全掃描的實(shí)現(xiàn)</p><p><b>  1.引言</b></p><p><b>  1.1開發(fā)背景</b></p><p>  端口掃描,顧名思義,就是對(duì)目標(biāo)主機(jī)的端口依次進(jìn)行連接,對(duì)于能進(jìn)行數(shù)據(jù)通信的,則認(rèn)為是”開”狀態(tài),否則認(rèn)為是”關(guān)”狀態(tài)。由于絕大部分公用服務(wù)于端口有對(duì)應(yīng)關(guān)系,因

15、此通過端口的”開”與”關(guān)”狀態(tài),可以初步判斷對(duì)方是否提供相應(yīng)的服務(wù),為下一步的操作提供參考。</p><p>  端口是一個(gè)傳輸層的概念,因此端口掃描也僅限于在傳輸層上進(jìn)行,傳輸層一般將協(xié)議分為TCP協(xié)議和UDP協(xié)議,所以端口掃描也根據(jù)掃描所采用的類型分為TCP端口掃描、UDP端口掃描兩大類。</p><p>  端口掃描與其說是一種攻擊方法,不如說是一種檢測(cè)方法,因?yàn)橥ㄟ^端口掃描,即使是

16、知道對(duì)方哪些端口是開的,也不意味著對(duì)方就一定提供了這些端口對(duì)應(yīng)的服務(wù),更談不上能查出什么漏洞。但黑客正是用端口掃描預(yù)測(cè)一臺(tái)主機(jī)上都提供了哪些服務(wù),如果所提供的這些服務(wù)存在漏洞,黑客就會(huì)利用這些漏洞對(duì)系統(tǒng)進(jìn)行攻擊。而事實(shí)上即使沒有什么漏洞可找,僅就掃描所得的信息,就已經(jīng)給黑客提供大量的重要信息,因此端口掃描往往作為黑客攻擊的第一步。所以,對(duì)于任何一個(gè)擁有電腦的用戶完全有必要對(duì)端口進(jìn)行詳細(xì)地了解,對(duì)于沒有實(shí)質(zhì)性作用的端口要關(guān)閉,對(duì)于必須開放

17、的端口則盡可能地安裝其漏洞補(bǔ)丁程序。</p><p>  1.2 設(shè)計(jì)題目及要求</p><p>  (1)、至少建立TCP/UDP兩臺(tái)服務(wù)器</p><p>  服務(wù)器端口和服務(wù)必須有公開和保密(后門)兩類。</p><p>  (2)、完成TCP/UDP協(xié)議客戶端掃描程序</p><p>  可以掃描出公開和保密

18、的全部端口號(hào),確定全部公開的服務(wù),甚少可以確定一種保密的服務(wù)。</p><p>  (3)、可以掃描顧劍老師上課的服務(wù)器210.37.47.194,檢查其安全情況。</p><p>  (4)、可以掃描www.xdaqjs.com 服務(wù)器,檢查其安全情況。</p><p>  (5)、同學(xué)之間可以互相掃描各自的服務(wù)器,檢查其服務(wù)情況。</p><

19、p>  (6)、不可掃描其他境內(nèi)服務(wù)器。</p><p>  (7)、寫出完整的試驗(yàn)報(bào)告,并嘗試給出一些防范和修改建議。</p><p>  2.程序的編譯與開發(fā)</p><p><b>  2.1 開發(fā)目的</b></p><p>  1.了解和掌握TCP/IP協(xié)議的基本原理(TCP通信、UDP通信);</

20、p><p>  2.了解網(wǎng)絡(luò)環(huán)境下的程序設(shè)計(jì)步驟和過程;</p><p>  3.掌握Winsock提供函數(shù)的功能和用法。</p><p>  2.2 開發(fā)環(huán)境及工具</p><p>  測(cè)試平臺(tái):Windows XP Professional</p><p>  使用軟件:Microsoft Visual C++ 6.0

21、</p><p><b>  開發(fā)語言:C語言</b></p><p><b>  2.3 開發(fā)過程</b></p><p>  根據(jù)題目的要求,結(jié)合相應(yīng)的算法理論及相關(guān)的基礎(chǔ)知識(shí),在Microsoft Visual C++ 6.0的平臺(tái)下進(jìn)行開發(fā)。具體過程參見下述的算法理論部分和程序流程步驟的分析。</p>

22、<p>  3.基本思路及所涉及的相關(guān)理論</p><p><b>  3.1基本思路</b></p><p>  根據(jù)題目要求,逐步解析題目含義。實(shí)際上,該題目包含三個(gè)主要程序:①基于TCP客戶端和服務(wù)器間的通信;②基于UDP客戶端與服務(wù)器的通信;③基于TCP和UDP的網(wǎng)絡(luò)活動(dòng)端口掃描。由所學(xué)知識(shí)可知:TCP屬于面向連接型協(xié)議(可靠傳輸,通過三次握手連接

23、完成),UDP屬于不可靠傳輸。在Windows平臺(tái)上,需要通過Winsock套接字編程來實(shí)現(xiàn)。</p><p><b>  3.2相關(guān)理論</b></p><p><b>  3.2.1協(xié)議介紹</b></p><p><b> ?。?)TCP</b></p><p>  TC

24、P/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ā)展起來的。</p><p>  有時(shí)我們將TCP/IP描述為互聯(lián)網(wǎng)協(xié)議集"InternetProtocolSuite",TCP和IP是其中的兩個(gè)協(xié)議(后面將會(huì)介紹)。由于TC

25、P和IP是大家熟悉的協(xié)議,以至于用TCP/IP或IP/TCP這個(gè)詞代替了整個(gè)協(xié)議集。這盡管有點(diǎn)奇怪,但沒有必要去爭論這個(gè)習(xí)慣。例如,有時(shí)我們討論NFS是基于TCP/IP時(shí),盡管它根本沒用到TCP(只用到IP和另一種交互式協(xié)議UDP,而不是TCP)。</p><p>  TCP/IP的標(biāo)準(zhǔn)在一系列稱為RFC的文檔中公布。文檔由技術(shù)專家、特別工作組、或RFC編輯修訂。公布一個(gè)文檔時(shí),該文檔被賦予一個(gè)RFC編號(hào),如RF

26、C959(FTP的說明文檔)、RFC793(TCP的說明文檔)、RFC791(IP的說明文檔)等。最初的RFC一直保留而從來不會(huì)被更新,如果修改了該文檔,則該文檔又以一個(gè)新號(hào)碼公布。因此,重要的是要確認(rèn)你擁有了關(guān)于某個(gè)專題的最新RFC文檔。通常在RFC的開頭部分,有相關(guān)RFC的更新(update)、修改(errata)、作廢(obsolete)信息,提示讀者信息的時(shí)效性。詳情請(qǐng)閱讀網(wǎng)站RFC-editor[1]。</p>

27、<p><b>  (2)UCP</b></p><p>  UDP協(xié)議的全稱是用戶數(shù)據(jù)包協(xié)議,在網(wǎng)絡(luò)中它與TCP協(xié)議一樣用于處理數(shù)據(jù)包,是一種無連接的協(xié)議。在OSI模型中,在第四層——傳輸層,處于IP協(xié)議的上一層。UDP有不提供數(shù)據(jù)包分組、組裝和不能對(duì)數(shù)據(jù)包進(jìn)行排序的缺點(diǎn),也就是說,當(dāng)報(bào)文發(fā)送之后,是無法得知其是否安全完整到達(dá)的。UDP用來支持那些需要在計(jì)算機(jī)之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)

28、用。包括網(wǎng)絡(luò)視頻會(huì)議系統(tǒng)在內(nèi)的眾多的客戶/服務(wù)器模式的網(wǎng)絡(luò)應(yīng)用都需要使用UDP協(xié)議。UDP協(xié)議從問世至今已經(jīng)被使用了很多年,雖然其最初的光彩已經(jīng)被一些類似協(xié)議所掩蓋,但是即使是在今天UDP仍然不失為一項(xiàng)非常實(shí)用和可行的網(wǎng)絡(luò)傳輸層協(xié)議。</p><p>  與所熟知的TCP(傳輸控制協(xié)議)協(xié)議一樣,UDP協(xié)議直接位于IP(網(wǎng)際協(xié)議)協(xié)議的頂層。根據(jù)OSI(開放系統(tǒng)互連)參考模型,UDP和TCP都屬于傳輸層協(xié)議。&l

29、t;/p><p>  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ù)。</p><p>  3.2.2 TCP實(shí)現(xiàn)流程:</p><p>  圖 3.2.1-1面向連接(TCP)的socket工作流程</p><p>

30、  圖3.2.1-2 TCP正常連接過程圖3.2.1-3 TCP正常終止連接過程</p><p>  圖 3.2.1-4 TCP 連接過程</p><p><b>  UDP實(shí)現(xiàn)流程:</b></p><p>  圖 3.2.2-1 UDP工作過程</p><p>  圖 3.2.2-2 UDP掃描過程<

31、/p><p>  3.2.4 Windows Socket 套接字編程原理</p><p>  一、客戶機(jī)/服務(wù)器模式</p><p>  在TCP/IP網(wǎng)絡(luò)中兩個(gè)進(jìn)程間的相互作用的主機(jī)模式是客戶機(jī)/服務(wù)器模式(Client/Server model)。該模式的建立基于以下兩點(diǎn):1、非對(duì)等作用;2、通信完全是異步的??蛻魴C(jī)/服務(wù)器模式在操作過程中采取的是主動(dòng)請(qǐng)示方式:&

32、lt;/p><p>  首先服務(wù)器方要先啟動(dòng),并根據(jù)請(qǐng)示提供相應(yīng)服務(wù):(過程如下)1、打開一個(gè)通信通道并告知本地主機(jī),它愿意在某一個(gè)公認(rèn)地址上接收客戶請(qǐng)求。</p><p>  2、等待客戶請(qǐng)求到達(dá)該端口。</p><p>  3、接收到重復(fù)服務(wù)請(qǐng)求,處理該請(qǐng)求并發(fā)送應(yīng)答信號(hào)。</p><p>  4、返回第二步,等待另一客戶請(qǐng)求</p&

33、gt;<p><b>  5、關(guān)閉服務(wù)器。</b></p><p><b>  客戶方:</b></p><p>  1、打開一個(gè)通信通道,并連接到服務(wù)器所在主機(jī)的特定端口。</p><p>  2、向服務(wù)器發(fā)送服務(wù)請(qǐng)求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請(qǐng)求……</p><p>  3、請(qǐng)

34、求結(jié)束后關(guān)閉通信通道并終止</p><p><b>  二、套接字</b></p><p><b>  套接字地址結(jié)構(gòu)</b></p><p>  (1)、sockaddr結(jié)構(gòu):</p><p>  struct sockaddr</p><p><b>  {&l

35、t;/b></p><p>  u_short sa_family; /* address family */</p><p>  char sa_data[14]; /* up to 14 bytes of direct address */</p><p><b>  };</b></p><p>  sa_f

36、amily為網(wǎng)絡(luò)地址類型,一般為AF_INET,表示該socket在Internet域中進(jìn)行通信,該地址結(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是專門針對(duì)Internet域的socket地址結(jié)構(gòu)。</p><p>

37、;  (2)、sockaddr_in結(jié)構(gòu)</p><p>  struct sockaddr_in </p><p><b>  {</b></p><p>  short sin_family;</p><p>  u_short sin_port;</p><p>  struct in_ad

38、dr sin_addr;</p><p>  char sin_zero[8];</p><p><b>  };</b></p><p>  sin _family為網(wǎng)絡(luò)地址類型,必須設(shè)定為AF_INET。sin_port為服務(wù)端口,注意不要使用已固定的服務(wù)端口,如HTTP的端口80等。如果端口設(shè)置為0,則系統(tǒng)會(huì)自動(dòng)分配一個(gè)唯一端口。sin_

39、addr為一個(gè)unsigned long的IP地址。sin_zero為填充字段,純粹用來保證結(jié)構(gòu)的大小。</p><p>  2.套接字的使用步驟</p><p> ?。?)、啟動(dòng)Winsock:對(duì)Winsock DLL進(jìn)行初始化,協(xié)商Winsock的版本支持并分配必要的資源。(服務(wù)器端和客戶端)。</p><p>  (2)、創(chuàng)建套接字:(服務(wù)器端和客戶端)<

40、;/p><p>  SOCKET socket( int af, int type, int protocol );</p><p> ?、?、af為網(wǎng)絡(luò)地址類型,一般為AF_INET,表示在Internet域中使用。</p><p>  ②、type為套接字類型,前面已經(jīng)介紹了。</p><p>  ③、protocol為指定網(wǎng)絡(luò)協(xié)議,一般為IP

41、PROTO_IP。</p><p>  (3)、套接字的綁定:將本地地址綁定到所創(chuàng)建的套接字上。(服務(wù)器端和客戶端)</p><p>  int bind( SOCKET s, const struct sockaddr FAR * name, int namelen )</p><p> ?、佟為已經(jīng)創(chuàng)建的套接字。</p><p> ?、?/p>

42、、name為socket地址結(jié)構(gòu),為sockaddr結(jié)構(gòu),如前面討論的,我們一般使用sockaddr_in結(jié)構(gòu),在使用再強(qiáng)制轉(zhuǎn)換為sockaddr結(jié)構(gòu)。</p><p> ?、?、namelen為地址結(jié)構(gòu)的長度。</p><p> ?。?)、套接字的監(jiān)聽:(服務(wù)器端)</p><p>  int listen(SOCKET s, int backlog )</p

43、><p> ?、?、s為一個(gè)已綁定但未聯(lián)接的套接字。</p><p> ?、凇acklog為指定正在等待聯(lián)接的最大隊(duì)列長度,這個(gè)參數(shù)非常重要,因?yàn)榉?wù)器一般可以提供多個(gè)連接。</p><p>  (5)、套接字等待連接:(服務(wù)器端)</p><p>  SOCKET accept( SOCKET s, struct sockaddr FAR *

44、addr, int FAR * addrlen )</p><p> ?、?、s為處于監(jiān)聽模式的套接字。</p><p>  ②、sockaddr為接收成功后返回客戶端的網(wǎng)絡(luò)地址。</p><p> ?、邸ddrlen為網(wǎng)絡(luò)地址的長度。</p><p> ?。?)、套接字的連接:將兩個(gè)套接字連結(jié)起來準(zhǔn)備通信。(客戶端)</p>

45、<p>  int connect(SOCKET s, const struct sockaddr FAR * name, int namelen )</p><p> ?、佟為欲連結(jié)的已創(chuàng)建的套接字。</p><p>  ②、name為欲連結(jié)的socket地址。</p><p> ?、?、namelen為socket地址的結(jié)構(gòu)的長度。</p>

46、<p> ?。?)、套接字發(fā)送數(shù)據(jù):(服務(wù)器端和客戶端)</p><p>  int send(SOCKET s, const char FAR * buf, int len, int flags )</p><p> ?、?、s為服務(wù)器端監(jiān)聽的套接字。</p><p>  ②、buf為欲發(fā)送數(shù)據(jù)緩沖區(qū)的指針。</p><p> 

47、?、?、len為發(fā)送數(shù)據(jù)緩沖區(qū)的長度。</p><p> ?、堋lags為數(shù)據(jù)發(fā)送標(biāo)記。</p><p> ?、荨⒎祷刂禐榘l(fā)送數(shù)據(jù)的字符數(shù)。</p><p> ?。?)、套接字的數(shù)據(jù)接收:(客戶端)</p><p>  int recv( SOCKET s, char FAR * buf, int len, int flags )</p

48、><p> ?、佟為準(zhǔn)備接收數(shù)據(jù)的套接字。</p><p> ?、凇uf為準(zhǔn)備接收數(shù)據(jù)的緩沖區(qū)。</p><p>  ③、len為準(zhǔn)備接收數(shù)據(jù)緩沖區(qū)的大小。</p><p>  ④、flags為數(shù)據(jù)接收標(biāo)記。</p><p> ?、荨⒎祷刂禐榻邮盏臄?shù)據(jù)的字符數(shù)。</p><p>  (9)、中斷

49、套接字連接:通知服務(wù)器端或客戶端停止接收和發(fā)送數(shù)據(jù)。(服務(wù)器端和客戶端)</p><p>  int shutdown(SOCKET s, int how)</p><p>  ①、s為欲中斷連接的套接字。②、How為描述禁止哪些操作,取值為:SD_RECEIVE、SD_SEND、SD_BOTH。</p><p> ?。?0)、關(guān)閉套接字:釋放所占有的資源。(服務(wù)

50、器端和客戶端)</p><p>  int closesocket( SOCKET s )</p><p> ?、佟為欲關(guān)閉的套接字</p><p><b>  三、典型過程圖</b></p><p>  1. 面向連接的套接字的系統(tǒng)調(diào)用時(shí)序圖</p><p><b>  圖 3.2.

51、3-1</b></p><p>  2.無連接協(xié)議的套接字調(diào)用時(shí)序圖</p><p><b>  圖 3.2.3-2</b></p><p><b>  4、實(shí)驗(yàn)過程</b></p><p>  (1)、至少建立TCP/UDP兩臺(tái)服務(wù)器</p><p>  服務(wù)器

52、端口和服務(wù)必須有公開和保密(后門)兩類。</p><p><b>  一、TCP服務(wù)器</b></p><p> ?、佟⒐_服務(wù):在與客戶端進(jìn)行連接時(shí),能夠接收客戶端發(fā)送過來的消息。并返回相同的消息以響應(yīng)客戶端,同時(shí)日志文件將會(huì)記錄這一切:(如圖4-1所示)</p><p>  圖 4-1 公開服務(wù)接收信息</p><p&g

53、t; ?、?、保密服務(wù):當(dāng)客戶端發(fā)送停機(jī)密碼時(shí),服務(wù)器會(huì)自動(dòng)關(guān)機(jī),不對(duì)任何客戶端提供服務(wù):(圖4-2、圖4-3)</p><p>  圖 4-2(收到停機(jī)密碼的服務(wù)器)</p><p>  圖 4-3(發(fā)送了停機(jī)密碼的客戶端)</p><p><b>  二、UCP服務(wù)器</b></p><p> ?、佟⒐_服務(wù):能夠接收

54、客戶端發(fā)送過來的消息,并響應(yīng)客戶端,同時(shí)日志文件將會(huì)記錄這一切:(如圖4-4所示)</p><p>  圖4-4公開服務(wù)接收信息</p><p>  圖 4-5 UDP客戶端界面</p><p>  4-6 發(fā)送了消息的UDP客戶端界面</p><p>  圖 4-7 服務(wù)器開啟了日志功能</p><p> ?、?、保密

55、服務(wù):在客戶端發(fā)送了停機(jī)密碼后,可以控制服務(wù)器關(guān)機(jī),但同時(shí)也會(huì)被服務(wù)器記錄在案。以便今后管理員對(duì)攻擊事件的追蹤。</p><p>  圖 4-8 服務(wù)器開啟日志功能</p><p>  (2)、完成TCP/UDP協(xié)議客戶端掃描程序</p><p>  可以掃描出公開和保密的全部端口號(hào),確定全部公開的服務(wù),甚少可以確定一種保密的服務(wù)。</p><p

56、><b> ?、?、掃描本機(jī)</b></p><p>  1:查看哪些端口是開放的。</p><p>  圖 4-9查看本機(jī)端口的開放情況</p><p>  2:采用傳統(tǒng)單線程掃描熟知端口。</p><p>  圖 4-10 傳統(tǒng)順序掃描的結(jié)果截圖</p><p><b>  3:

57、日志功能</b></p><p>  圖 4-11 日志記錄</p><p>  5:采用多線程掃描熟知端口</p><p>  圖 4-12 多線程掃描的結(jié)果截圖</p><p><b>  6:日志功能</b></p><p>  圖 4-13 日志功能</p>&l

58、t;p>  由以上截圖對(duì)比可知,單線程掃描的速度慢,而多線程掃描則實(shí)現(xiàn)了高并發(fā),掃描速度得到了大幅度的提升。但多線程掃描的難題是如何實(shí)現(xiàn)高并發(fā)卻不會(huì)出現(xiàn)錯(cuò)誤。</p><p>  因此,本人在掃描器中設(shè)定了兩種模式,當(dāng)掃描的端口范圍較小時(shí),建議使用單線程模式,這樣可以避免多線程掃描端口范圍較小時(shí)產(chǎn)生的錯(cuò)誤,雖然單線程是順序掃描而且一般服務(wù)器都有日志功能,但是掃描的范圍較小時(shí),比掃描端口范圍大的更不容易被服務(wù)

59、器察覺。當(dāng)掃描端口范圍較大時(shí),建議采用多線程模式,首先是因?yàn)樗膾呙杷俣缺葐尉€程模式快得多,每多創(chuàng)建一個(gè)線程掃描速度單線程快一倍,但線程并不是越多就越好,在這里我只創(chuàng)建了50個(gè)線程,掃描速度大約是原來單線程的50倍。其次,它所掃描的端口具有一定的隨機(jī)性,如果采用傳統(tǒng)的單線程模式順序掃描并且掃描的端口范圍大時(shí),不僅掃描時(shí)間長,而且是順序掃描,這樣做是不明智的!</p><p>  (3)、可以掃描顧劍老師上課的服務(wù)

60、器210.37.47.194,檢查其安全情況。</p><p>  第一步:查看主機(jī)是否存活。Ping 210.37.47.194</p><p>  圖 4-9 查看主機(jī)是否存活</p><p>  第二步:掃描主機(jī)的熟知端口號(hào)(0~1024)。</p><p>  圖 4-10掃描主機(jī)的熟知端口號(hào)(0~1024)</p>&

61、lt;p>  圖 4-11 日志功能</p><p>  第三步:掃描主機(jī)的登記端口號(hào)(1025~49151)。</p><p>  圖 4-12掃描主機(jī)的登記端口號(hào)(1025~49151)</p><p>  圖 4-13 日志功能記錄</p><p>  綜上,服務(wù)器210.37.47.194提供了ftp服務(wù)和telnet服務(wù)。首先

62、,telnet服務(wù)器容易遭受到拒絕服務(wù)攻擊,另外telnet服務(wù)的開放使得為不合法用戶開啟了遠(yuǎn)程登錄,并控制服務(wù)器,最后留下入侵后門。</p><p>  (4)、可以掃描www.xdaqjs.com 服務(wù)器,檢查其安全情況。</p><p>  第一步:登陸網(wǎng)站,查看網(wǎng)址是否有效。</p><p>  圖 4-14登陸網(wǎng)站,查看網(wǎng)址是否有效</p>

63、<p>  第二步:ping 域名以獲得IP地址。</p><p>  圖4-15 ping 域名以獲得IP地址</p><p>  第三步:掃描服務(wù)器的熟知端口(0~1024)</p><p>  圖 4-16掃描服務(wù)器的熟知端口(0~1024)</p><p>  給出一些防范和修改建議:linux的111端口可能存在安全隱患。

64、建議關(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ù)有rpc.mountd、NFS、rpc.statd、rpc.csmd、rpc.ttybd、amd等等。在Microsoft的Windows中,同樣也有RPC服務(wù)。如果可以不使用RPC服務(wù)的話,建議關(guān)閉此端口。<

65、;/p><p>  第四步:查看該掃描記錄是否已存于日志文件中</p><p>  圖 4-17 日志功能</p><p>  第五步:掃描服務(wù)器的登記端口號(hào)(1025~49151)</p><p>  圖 4-18掃描服務(wù)器的登記端口號(hào)(1025~49151)</p><p><b>  第六步:查看日志<

66、;/b></p><p>  圖 4-19 查看日志</p><p>  分析:45457端口開放,可能是某黑客留下的一個(gè)后門,建議系統(tǒng)管理員盡快關(guān)閉此端口。否則將會(huì)被某些黑客利用。</p><p><b>  5、個(gè)人感想與感悟</b></p><p>  通過本次課程設(shè)計(jì)使我更為深刻地認(rèn)識(shí)到了編程的重要性,雖然

67、老師讓我們寫的代碼很多,但其實(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掃描兩種模式。但最終只實(shí)現(xiàn)了兩個(gè)半:掃描程序?qū)崿F(xiàn)多線程隨機(jī)掃描、所有程序都必須有日志記

68、錄、TCP掃描器設(shè)計(jì)為TCP connect 掃描。盡管沒有達(dá)到自己預(yù)定目標(biāo),但通過本次課程設(shè)計(jì)仍是讓我收獲很大,并且更加深刻地認(rèn)識(shí)到了自己的不足。今后,本人一定要在編程方面加強(qiáng)。否則,真的就是心有余而力不足啊。</p><p><b>  實(shí)驗(yàn)收獲:</b></p><p>  TCP/IP協(xié)議是網(wǎng)絡(luò)中使用最廣泛的協(xié)議。</p><p>  

69、Socket 套接口,最早出現(xiàn)在Berkeley Unix中,最初只支持TCP/IP協(xié)議族和Unix協(xié)議,現(xiàn)在它已支持很多協(xié)議,是最重要的網(wǎng)絡(luò)編程接口,特別是在Unix中,其核心直接支持socket 編程,幾乎所有的網(wǎng)絡(luò)應(yīng)用程序都是用Socket API來實(shí)現(xiàn)的。</p><p>  WIN平臺(tái)中,需要特別的處理并用動(dòng)態(tài)庫socket動(dòng)態(tài)庫DLL來實(shí)現(xiàn)。因此,需要在socket程序之外特別處理。</p>

70、;<p>  面向連接的TCP通信:</p><p>  1,發(fā)起連接的為客戶端Client ,接收連接的一方稱為服務(wù)器端 Server。</p><p>  2,雙方的通信一般分三步:建立連接、數(shù)據(jù)傳送、釋放連接。</p><p>  3,在傳送過程中數(shù)據(jù)按順序傳送,很像電路交換,因此又稱為“虛電路(VC,Virtual Circuit)服務(wù)”。&l

71、t;/p><p>  4,這是一種使用者感覺可靠的服務(wù),但建立連接和釋放連接的開銷很大。</p><p>  面向非連接的UDP通信:</p><p>  1,互為客戶端和服務(wù)器端。任何一方都可隨時(shí)向?qū)Ψ桨l(fā)送或接收數(shù)據(jù)。</p><p>  2,這是一種使用者感覺不可靠的服務(wù),主要體現(xiàn):報(bào)文丟失、重復(fù)或與發(fā)送順序不一致等現(xiàn)象。</p>

72、<p>  3,使用者一定要編寫高層協(xié)議來自行解決這些問題。</p><p>  4,缺點(diǎn):對(duì)使用者要求高,優(yōu)點(diǎn):靈活、方便、效率很高(特別是對(duì)通信網(wǎng)絡(luò),要求低,效率高)</p><p><b>  兩者比較:</b></p><p>  1,理論研究者為處理“不可靠”而做的選擇,</p><p>  面向

73、連接:可靠性由低層服務(wù)(網(wǎng)絡(luò))負(fù)責(zé),面向非連接:可靠性由用戶負(fù)責(zé)。</p><p>  2,能否實(shí)際通信,取決于實(shí)際的底層服務(wù)(網(wǎng)絡(luò))。</p><p>  面向非連接的數(shù)據(jù)報(bào)達(dá)到不了對(duì)方,面向連接的通信一樣也不可能(這時(shí)基本是連接都建立不起來)。</p><p>  3,能否通信的“信息”:可靠性兩者報(bào)告的方式不同。</p><p>  面

74、向非連接需要使用者自己“感覺”,面向連接底層服務(wù)告訴使用者。</p><p>  得到“信息”的時(shí)間兩者并不一定(取決于使用者 )。</p><p>  4,底層(網(wǎng)絡(luò))為了保證“可靠”需要隨時(shí)進(jìn)行通信(包含互發(fā)和記錄信息),這樣,開銷十分龐大。</p><p>  特別是在使用長時(shí)間不進(jìn)行實(shí)際通信時(shí),更是極大的浪費(fèi)。</p><p><

75、;b>  理論上的結(jié)論:</b></p><p>  1,使用者水平高、聰明時(shí),使用面向非連接方式是明智的。</p><p>  2,為了效率,使用面向非連接方式是明智的。</p><p>  3,在可以容忍數(shù)據(jù)丟失的情況下,使用面向非連接方式是明智的。</p><p>  如ping。如視頻/語音傳送。</p>

76、<p>  4,如果非想隨時(shí)了解線路是否可用,使用面向連接方式是明智的。</p><p>  附錄(程序代碼部分):</p><p>  附錄一:(基于TCP通信的客戶端與服務(wù)器)</p><p>  wqm_TCP_S.C 代碼</p><p>  #include<Winsock2.h></p>&

77、lt;p>  #include<stdio.h></p><p>  #include<time.h></p><p>  #include <sys/timeb.h></p><p>  #include <io.h></p><p>  #define socklen_t int

78、 </p><p>  #pragma comment (lib, "Ws2_32.lib")</p><p>  #define MyLogName "Tcp_S.log"</p><p>  #pragma pack(1) //結(jié)構(gòu)在存儲(chǔ)時(shí)按字節(jié)對(duì)齊</p><p>  #def

79、ine ECom -100 /** 系統(tǒng)錯(cuò)誤 **/</p><p>  #define EPara1 -101 /** 第1個(gè)參數(shù)錯(cuò)誤 **/</p><p>  #define EPara2 -102 /** 第2個(gè)參數(shù)錯(cuò)誤 **/</p><p>  #define EMyRet -103 /**

80、自行退出錯(cuò)誤 **/</p><p>  #define MaxCliNo 5</p><p>  /** 打印系統(tǒng)錯(cuò)誤號(hào)和錯(cuò)誤信息后返回 **/</p><p>  #define SysErr(S) {perror(S);return(ECom);}</p><p>  #define FFSTD fflush(stdout

81、); /* 清除輸出緩沖器. */</p><p>  /** 打印地址信息 **/</p><p>  #define PrAdrr(Addr) printf("%s\n",#Addr);\</p><p>  printf("family:%u \n",Addr.sin_family);

82、 \</p><p>  printf("addr :%08x=%s\n",Addr.sin_addr.s_addr,\</p><p>  inet_ntoa(Addr.sin_addr));\</p><p>  printf("port :%u,%u \n",Addr.sin_port, \</p>

83、<p>  htons(Addr.sin_port));</p><p>  #define SERV_PORT 26 /** 服務(wù)器服務(wù)端口 **/</p><p>  #define SA struct sockaddr /** socket地址縮寫 **/</p><p>  #define MAXLE

84、N 4096 /** 最大緩沖長度 **/</p><p>  char ServerIP[20]="127.0.0.1";</p><p>  FILE *fp;</p><p>  unsigned short SPort=SERV_PORT;</p><p>  unsigned

85、short CPort;</p><p>  /*01*/int DoTCPServerDisp(void); /** 沒有記錄 的服務(wù)程序 **/</p><p>  #define Demain</p><p>  int main(int argc,char *argv[])</p><p><b>  

86、{</b></p><p>  int Ret=1;</p><p>  printf("/***************************TCP服務(wù)器*************************/\n");</p><p>  printf(" Server IP=%s Port=%d\n",Serv

87、erIP,SPort);</p><p>  if((fp=fopen("Tcp_S.log","a"))==NULL)</p><p><b>  {</b></p><p>  printf("不能打開文件!\n");</p><p><b>  

88、exit(1);</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  printf("TCP服務(wù)器日志已打開!\n");</p>

89、<p><b>  }</b></p><p>  DoTCPServerDisp(); /** 記錄接收發(fā)送數(shù)據(jù)的服務(wù)程序 **/</p><p><b>  }</b></p><p>  /*01*/int DoTCPServerDisp() </p><p><b&g

90、t;  {</b></p><p>  #ifdef _WIN32</p><p>  WSADATA wsaData;</p><p><b>  #endif</b></p><p>  static SerNo=0; /**服務(wù)次數(shù) **/</p><p&g

91、t;  int SockFd,sAccept; /** socket 句柄 **/</p><p>  int SockLen; /** socket 結(jié)構(gòu)長度 **/</p><p>  int iSend; /** 發(fā)送信息長度 **/</p><p>  int iRecv; /**

92、 接收信息長度 **/</p><p>  #define BufLen 1024</p><p>  char SBuf[BufLen]; /** 發(fā)送緩沖區(qū) **/</p><p>  char RBuf[BufLen]; /** 接收緩沖區(qū) **/</p><p>  int SendLen;

93、 /** 發(fā)送數(shù)據(jù)長度 **/</p><p>  struct sockaddr_in ser,cli;</p><p>  if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) SysErr("WSAStartup() Failed!");</p><p>  if((SockFd=socke

94、t(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET)</p><p>  SysErr("socket() Failed!");</p><p>  ser.sin_family=AF_INET;</p><p>  ser.sin_port=htons(SPort);</p><p>  

95、ser.sin_addr.s_addr=inet_addr(ServerIP);</p><p>  printf("TCP Server Running at(Ip=%s Port=%d)\n",ServerIP,SPort);</p><p>  if(bind(SockFd,(struct sockaddr*)&ser,sizeof(ser))==SOCK

96、ET_ERROR)</p><p>  SysErr("bind() Failed!");</p><p>  SockLen=sizeof(ser);</p><p>  if(listen(SockFd,MaxCliNo)<-1) SysErr("listen() Failed!");</p><

97、p>  SockLen=sizeof(cli);</p><p>  LoopAccept: /** 接受客戶端連接請(qǐng)求 **/</p><p>  sAccept=accept(SockFd,(struct sockaddr*)&cli,&SockLen);</p><p>  if(sAccept==(-1)){SysErr("

98、;accept() Failed!");}</p><p>  printf("Accepted client IP:[%s],prot:[%d]\n",</p><p>  inet_ntoa(ser.sin_addr),</p><p>  ntohs(ser.sin_port));</p><p>  fp

99、rintf(fp,"Accepted client IP:[%s],prot:[%d]\n",</p><p>  inet_ntoa(ser.sin_addr),</p><p>  ntohs(ser.sin_port));</p><p><b>  Loop:</b></p><p>  iR

100、ecv=recv(sAccept,RBuf,sizeof(RBuf),0);</p><p>  if(iRecv<0) {SysErr("receive error from client!\n");}</p><p>  else if(iRecv==0)</p><p><b>  {</b></p&

101、gt;<p>  printf(" 一個(gè)客戶端結(jié)束,現(xiàn)在開始為下一個(gè)客戶服務(wù)!\n");//可以順序地為多個(gè)用戶服務(wù),但前提是前一個(gè)用戶必須退出</p><p>  goto LoopAccept;</p><p><b>  }</b></p><p>  /****** 服務(wù)處理 ********/

102、</p><p>  RBuf[iRecv]=0;</p><p>  sprintf(SBuf,"%s(%d:%d)SerNo=%d R(%s:%d)",</p><p>  RBuf,strlen(RBuf),iRecv,++SerNo,</p><p>  inet_ntoa(cli.sin_addr),ntohs(

103、cli.sin_port));</p><p>  fprintf(fp,"%s(%d:%d)SerNo=%d R(%s:%d)",</p><p>  RBuf,strlen(RBuf),iRecv,++SerNo,</p><p>  inet_ntoa(cli.sin_addr),ntohs(cli.sin_port));</p>

104、;<p>  iSend=send(sAccept,SBuf,strlen(SBuf),0);</p><p>  if(iSend<-1){SysErr("send() Failed:%d\n");}</p><p>  else if(iSend==0) { printf("iSend=0 Errorr?? \n");goto

105、 Loop;}</p><p>  fprintf(fp,"send %s(%d) OK\n",SBuf,iSend);</p><p>  goto Loop;</p><p><b>  LEnd:</b></p><p>  closesocket(SockFd);</p><

106、;p>  WSACleanup();</p><p>  return(0);</p><p>  }/**** end 01 int DoTCPServer() ****/</p><p>  wqm_TCP_C.C 代碼</p><p>  #include<Winsock2.h></p><p&g

107、t;  #include<stdio.h></p><p>  #include<time.h></p><p>  #include <sys/timeb.h></p><p>  #include <io.h></p><p>  #define socklen_t int /**Gu

108、jian's programs need the definition **/</p><p>  #pragma comment (lib, "Ws2_32.lib")</p><p>  #pragma pack(1) //結(jié)構(gòu)在存儲(chǔ)時(shí)按字節(jié)對(duì)齊</p><p>  #define ECom -100

109、 /** 系統(tǒng)錯(cuò)誤 **/</p><p>  #define EPara1 -101 /** 第1個(gè)參數(shù)錯(cuò)誤 **/</p><p>  #define EPara2 -102 /** 第2個(gè)參數(shù)錯(cuò)誤 **/</p><p>  #define EMyRet -103 /** 自行退出錯(cuò)誤 **/</p>

110、<p>  /** 打印系統(tǒng)錯(cuò)誤號(hào)和錯(cuò)誤信息后返回 **/</p><p>  #define SysErr(S) {perror(S);return(ECom);}</p><p>  #define FFSTD fflush(stdout); /* 清除輸出緩沖器. */</p><p>  /** 打印地址信息 *

111、*/</p><p>  #define PrAdrr(Addr) printf("%s\n",#Addr);\</p><p>  printf("family:%u \n",Addr.sin_family); \</p><p>  printf("addr :%08x=%s\n",Ad

112、dr.sin_addr.s_addr,\</p><p>  inet_ntoa(Addr.sin_addr));\</p><p>  printf("port :%u,%u \n",Addr.sin_port, \</p><p>  htons(Addr.sin_port));</p><p>  #defin

113、e SERV_PORT 26 /** 服務(wù)器服務(wù)端口 **/</p><p>  #define SA struct sockaddr /** socket地址縮寫 **/</p><p>  #define MAXLEN 4096 /** 最大緩沖長度 **/</p><p>  char

114、ServerIP[20]="127.0.0.1";</p><p>  unsigned short SPort=SERV_PORT;</p><p>  unsigned short CPort;</p><p>  /**c01**/int DoTCPClient(void); /** 沒有記錄程序的客戶端程序**/</p>

115、<p>  /**c02**/int DoTCPCliWri(void); /** 有記錄程序的客戶端程序**/</p><p>  /*02*/int DoTCPServerWrite(void); /** 記錄接收發(fā)送數(shù)據(jù)的服務(wù)程序 **/</p><p>  #define Demain</p><p>  int main(in

116、t argc,char *argv[])</p><p><b>  {</b></p><p>  int Ret=1;</p><p>  #ifdef Demain</p><p>  printf("/*********************** TCP客戶端 ********************

117、*********/\n");</p><p>  printf(" Server IP=%s Port=%d\n",ServerIP,SPort);</p><p><b>  #endif</b></p><p>  DoTCPClient(); /** 沒有記錄程序的客戶端程序**/</p>

118、<p>  // DoTCPCliWri(); /** 有記錄程序的客戶端程序**/</p><p><b>  }</b></p><p>  #define EndStr "RUN" /** 服務(wù)器停機(jī)密碼**/</p><p>  #define DeDoTCPClien

119、t</p><p>  /**c01**/int DoTCPClient() /** 沒有記錄程序的客戶端程序**/</p><p><b>  {</b></p><p>  #ifdef _WIN32</p><p>  WSADATA wsaData;</p><p><b>

120、;  #endif</b></p><p>  int SNo=0;</p><p>  int SockFd; /** socket 句柄 **/</p><p>  int iSend; /** 發(fā)送信息長度 **/</p><p>  int iRecv;

121、 /** 接收信息長度 **/</p><p>  #define BufLen 1024</p><p>  char SBuf[BufLen]; /** 發(fā)送緩沖區(qū) **/</p><p>  char RBuf[BufLen]; /** 接收緩沖區(qū) **/</p><p>  int SendLen;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論