版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 端口掃描器的設(shè)計(jì)與實(shí)現(xiàn)-網(wǎng)絡(luò)與信息安全課程設(shè)計(jì)報(bào)告
- 安全監(jiān)測(cè)監(jiān)控課程設(shè)計(jì)報(bào)告
- 安全人機(jī)課程設(shè)計(jì)報(bào)告
- 《電氣安全工程》課程設(shè)計(jì)報(bào)告
- 《信息安全》課程設(shè)計(jì)報(bào)告--ca系統(tǒng)
- des課程設(shè)計(jì)報(bào)告--網(wǎng)絡(luò)安全
- java課程設(shè)計(jì)----課程設(shè)計(jì)報(bào)告
- fpga課程設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)安全課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)報(bào)告
- 礦山安全課程設(shè)計(jì)
- 安全評(píng)價(jià)課程設(shè)計(jì)
- 安全評(píng)價(jià)課程設(shè)計(jì)
- eda優(yōu)質(zhì)課程設(shè)計(jì)鍵盤掃描電路設(shè)計(jì)
- 課程設(shè)計(jì)報(bào)告--安全生產(chǎn)監(jiān)督管理系統(tǒng)
- web編程課程設(shè)計(jì)報(bào)告--留言簿課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論