潘 爽,蘇亞維
(中國(guó)電子科技集團(tuán)公司第十五研究所,北京 100083)
隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡(luò)規(guī)模迅速擴(kuò)大,網(wǎng)絡(luò)結(jié)構(gòu)愈加復(fù)雜,準(zhǔn)確完整的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)發(fā)現(xiàn)方法有助于網(wǎng)絡(luò)的高效管理,對(duì)優(yōu)化網(wǎng)絡(luò)配置、定位網(wǎng)絡(luò)故障、發(fā)現(xiàn)網(wǎng)絡(luò)漏洞、探測(cè)網(wǎng)絡(luò)交流等具有重要意義。網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)是一種發(fā)現(xiàn)網(wǎng)絡(luò)實(shí)體(例如路由器、交換機(jī)、網(wǎng)橋等)并展示實(shí)體間關(guān)系的技術(shù),一般來說,根據(jù)網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)設(shè)備的不同,通常分為邏輯拓?fù)浒l(fā)現(xiàn)和物理拓?fù)浒l(fā)現(xiàn),分別對(duì)應(yīng)于OSI參考模型中的網(wǎng)絡(luò)層和鏈路層。其中,邏輯拓?fù)浒l(fā)現(xiàn)主要根據(jù)網(wǎng)絡(luò)層IP地址來發(fā)現(xiàn)路由器與路由器之間的連接,路由器與子網(wǎng)之間的連接,使用IP地址建立網(wǎng)絡(luò)實(shí)體的連接。物理拓?fù)浒l(fā)現(xiàn)主要根據(jù)鏈路層的信息發(fā)現(xiàn)物理網(wǎng)絡(luò)實(shí)體(例如交換機(jī)和終端)之間的連接,使用Mac地址建立網(wǎng)絡(luò)實(shí)體的連接。關(guān)于網(wǎng)絡(luò)層有許多拓?fù)浒l(fā)現(xiàn)算法,這些算法通?;赟NMP、ICMP、RIP、OSPF和ARP路由表[1-3]。
本文融合多協(xié)議對(duì)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行分層構(gòu)建,并對(duì)各層進(jìn)行關(guān)聯(lián)。首先對(duì)現(xiàn)有邏輯拓?fù)浒l(fā)現(xiàn)算法和物理拓?fù)浒l(fā)現(xiàn)算法進(jìn)行完善,提出應(yīng)用拓?fù)鋵拥母拍罴皹?gòu)建方法,并進(jìn)一步對(duì)物理拓?fù)?、邏輯拓?fù)洹?yīng)用拓?fù)淙龑油負(fù)溥M(jìn)行關(guān)聯(lián)分析[4-5]。
邏輯拓?fù)渲貥?gòu)的目的是發(fā)現(xiàn)網(wǎng)絡(luò)中的路由器和子網(wǎng),并顯示路由器與路由器之間、路由器與子網(wǎng)之間的關(guān)系以及子網(wǎng)內(nèi)的網(wǎng)絡(luò)設(shè)備。RIP(路由信息協(xié)議)是一種用于建立設(shè)備路由信息的協(xié)議,該協(xié)議主要基于距離矢量算法(Distance Vector Algorithms)完成,核心思想是通過“跳數(shù)”(metric)統(tǒng)計(jì)到達(dá)目的地址的路由距離,計(jì)算路由器間的連接情況。但該算法存在一定的局限性,一方面,要求網(wǎng)絡(luò)中的路由器使用RIP協(xié)議作為路由信息交換協(xié)議,另一方面,路由距離限制在15跳之內(nèi),不適用于大型網(wǎng)絡(luò)。而大多數(shù)網(wǎng)絡(luò)均使用了SNMP協(xié)議,因此使用基于SNMP協(xié)議的發(fā)現(xiàn)方法構(gòu)建網(wǎng)絡(luò)拓?fù)鋾r(shí)不受此限制。
本文使用基于SNMP協(xié)議的發(fā)現(xiàn)方法構(gòu)建拓?fù)?,該方法的主要思想是利用SNMP協(xié)議從路由器數(shù)據(jù)庫(kù)中獲取路由信息,然后分析這些信息,獲取網(wǎng)絡(luò)中路由器和子網(wǎng)之間的連接,進(jìn)而發(fā)現(xiàn)網(wǎng)絡(luò)。算法流程如下:
(1)根據(jù)SNMP協(xié)議在網(wǎng)絡(luò)中進(jìn)行掃描,添加路由器到路由器的等待隊(duì)列中。
(2)從隊(duì)列中選擇一個(gè)路由器作為開始路由器,通過其MIB獲得路由信息表。
(3)將路由信息表中最大的IP地址作為當(dāng)前路由器的ID,將此路由器添加到已建立的隊(duì)列中,然后刪除與等待隊(duì)列中當(dāng)前路由器具有相同IP地址的路由器。遍歷當(dāng)前路由器MIB中的ipAddrTable記錄。
(4)如果記錄的ipRouteType為3,則表示當(dāng)前路由器與子網(wǎng)直接連接,根據(jù)ipRouteDest和ipRouteMask獲取直接連接的子網(wǎng)信息,以及路由器和子網(wǎng)的連接情況。
(5)如果記錄的ipRouteType為4,則表示當(dāng)前路由器與子網(wǎng)間接連接,可以查找與當(dāng)前路由器直接連接的下一個(gè)路由器,然后將其添加到等待隊(duì)列。
(6)從等待隊(duì)列中執(zhí)行下一個(gè)路由器,并重復(fù)步驟(2)~步驟(6),直到等待隊(duì)列為空。
拓?fù)鋮f(xié)議或路由協(xié)議的主要功能是實(shí)現(xiàn)設(shè)備的物理連接,并非識(shí)別設(shè)備版本號(hào)和型號(hào)。識(shí)別設(shè)備/軟件類型型號(hào)主要依賴于設(shè)備指紋分析,本文選擇協(xié)議CDP、HTTP、S7、Modbus、Smb、SNMP、MySQL等識(shí)別大部分設(shè)備,對(duì)其他設(shè)備結(jié)合SNMP中MIB信息接口組中的sysServices、IP組的ipforword和Bridge-MIB函數(shù)確定設(shè)備類型。
如圖1所示,CDP協(xié)議識(shí)別思科設(shè)備型號(hào)和軟件版本;HTTP協(xié)議識(shí)別TP-LINK型號(hào);S7協(xié)議識(shí)別西門子設(shè)備型號(hào);HTTP協(xié)議識(shí)別火絨殺毒軟件版本號(hào)信息。
圖1 設(shè)備識(shí)別流程
以CDP協(xié)議為例,CDP是一個(gè)二層的網(wǎng)絡(luò)協(xié)議,默認(rèn)每60 s向01-00-0C-CC-CC-CC組播地址發(fā)送一次通告,CDP協(xié)議中包含設(shè)備類型信息,字段為Capabilities,其中Switch標(biāo)識(shí)的是交換機(jī),Route為路由器。CDP數(shù)據(jù)包還包括設(shè)備連接的物理接口信息。通過CDP數(shù)據(jù)包中的Software Version字段獲取軟件版本、設(shè)備平臺(tái)等信息。基于網(wǎng)絡(luò)通信指紋比對(duì)識(shí)別設(shè)備信息,如設(shè)備廠商、型號(hào)和版本等。
通過融合多協(xié)議,實(shí)現(xiàn)可支持的部分設(shè)備見表1所列。
表1 支持設(shè)備列表
結(jié)合SNMP中MIB信息接口組中的sysServices值可初步判斷其他設(shè)備的類型。可根據(jù)式(1)計(jì)算Li,若值為3,則其屬于第3層網(wǎng)絡(luò)設(shè)備,具有數(shù)據(jù)轉(zhuǎn)發(fā)能力,根據(jù)表2可知,該設(shè)備可以判斷為路由器。
表2 網(wǎng)絡(luò)設(shè)備
將IP組的ipforword數(shù)據(jù)作為輔助值進(jìn)行驗(yàn)證和進(jìn)一步判斷。若ipforword值為1,則表示設(shè)備具有數(shù)據(jù)轉(zhuǎn)發(fā)功能;若ipforword值為0,則表示設(shè)備不具有數(shù)據(jù)轉(zhuǎn)發(fā)功能??紤]到很多3層網(wǎng)絡(luò)交換機(jī)也具有數(shù)據(jù)轉(zhuǎn)發(fā)功能,與路由器ipforword值相同,且均屬于網(wǎng)絡(luò)層,因此進(jìn)一步通過檢查設(shè)備能否實(shí)現(xiàn)Bridge-MIB功能對(duì)兩者進(jìn)行區(qū)分(路由器無此功能,但交換機(jī)具有此功能)。不同設(shè)備對(duì)應(yīng)各值的情況見表3所列。
表3 網(wǎng)絡(luò)設(shè)備對(duì)應(yīng)值
物理層拓?fù)浒l(fā)現(xiàn)要在網(wǎng)絡(luò)層拓?fù)浒l(fā)現(xiàn)任務(wù)之后進(jìn)行,用于進(jìn)一步確定子網(wǎng)的拓?fù)浣Y(jié)構(gòu),發(fā)現(xiàn)交換機(jī)與路由器,交換機(jī)與主機(jī)之間的物理連接關(guān)系。目前,物理層拓?fù)浒l(fā)現(xiàn)主要有兩類算法,一種基于生成樹協(xié)議(如基于STP協(xié)議、CDP協(xié)議的方法);另一種基于地址轉(zhuǎn)換表(如基于AFT協(xié)議、SNMP協(xié)議的方法)。其中,基于AFT協(xié)議的方法對(duì)地址轉(zhuǎn)發(fā)表要求高,表必須完好無損;用SNMP協(xié)議讀取設(shè)備的MIB信息會(huì)有一定的延遲,并與網(wǎng)絡(luò)規(guī)模成正相關(guān)趨勢(shì);CDP協(xié)議只能在Cisco設(shè)備上使用??紤]到目前大多數(shù)鏈路層設(shè)備都支持生成樹協(xié)議(STP),因此本文選擇基于STP協(xié)議的方法。
通過STP生成樹協(xié)議可以發(fā)現(xiàn)網(wǎng)絡(luò)中的所有鏈路,并避免冗余鏈路形成環(huán)路,用來發(fā)現(xiàn)交換機(jī)之間的連接關(guān)系[6-10]。
子網(wǎng)物理拓?fù)浒l(fā)現(xiàn)流程如圖2所示。
圖2 子網(wǎng)物理拓?fù)浒l(fā)現(xiàn)流程
(1)獲取子網(wǎng)中所有交換機(jī)的總隊(duì)列。如果交換機(jī)支持生成樹協(xié)議,則根交換機(jī)由生成樹協(xié)議選擇,否則,選擇核心交換機(jī)或網(wǎng)關(guān)交換機(jī)作為根交換機(jī)。
(2)選擇交換機(jī)列表中的上行鏈路端口作為當(dāng)前根交換機(jī)。
(3)從列表中選擇一個(gè)交換機(jī),然后根據(jù)直接連接規(guī)則判斷所選交換機(jī)與當(dāng)前根交換機(jī)之間的連接。
(4)遍歷所選交換機(jī)的葉端口,在葉端口表中顯示路由設(shè)備和IP地址的主機(jī),然后將它們連接到所選交換機(jī)。重復(fù)步驟(3),直到交換機(jī)是列表中的最后一個(gè)。
(5)從步驟(2)中建立的交換機(jī)列表中選擇一個(gè)交換機(jī),將其作為虛擬根交換機(jī),然后算法將從步驟(2)開始重復(fù),直到交換機(jī)總隊(duì)列為空。
目前的研究中,缺乏對(duì)應(yīng)用拓?fù)涞陌l(fā)現(xiàn),但實(shí)際應(yīng)用中,發(fā)現(xiàn)設(shè)備之間的通信情況具有重要的意義,因此,本文提出應(yīng)用拓?fù)渲貥?gòu)的概念,并以郵件為例進(jìn)行分析。
應(yīng)用拓?fù)浒l(fā)現(xiàn)主要是基于設(shè)備(IP地址)之間的網(wǎng)絡(luò)通信分析,在設(shè)備(IP地址)的連接關(guān)系上,進(jìn)一步基于協(xié)議識(shí)別與解析,如識(shí)別設(shè)備提供的服務(wù)與連接協(xié)議,以及服務(wù)的詳細(xì)情況等[11-15]。
將 HTTP、HTTPS、SNMP、FTP、SFTP、Telnet、SSH、NTP、SMTP、POP3、IMAP、SMB等協(xié)議通信報(bào)文內(nèi)容與指紋庫(kù)軟件指紋進(jìn)行比對(duì),可以識(shí)別操作系統(tǒng)、安防、應(yīng)用軟件的數(shù)據(jù)信息。支持識(shí)別的應(yīng)用軟件見表4所列。
表4 應(yīng)用軟件
在識(shí)別應(yīng)用服務(wù)的基礎(chǔ)上,對(duì)通信報(bào)文進(jìn)行深度解析,提取業(yè)務(wù)應(yīng)用通信行為和關(guān)鍵字段信息,構(gòu)建詳細(xì)的應(yīng)用拓?fù)潢P(guān)系??蓪?shí)現(xiàn)對(duì)郵件、語(yǔ)音、傳真、文件傳輸、遠(yuǎn)程控制、數(shù)據(jù)庫(kù)訪問和數(shù)字證書認(rèn)證等業(yè)務(wù)的信息識(shí)別與構(gòu)建。以郵件為例,根據(jù)SMTP協(xié)議字段response字段值可判斷是否包含郵件服務(wù),并通過SMTP、POP3、IMAP協(xié)議中的from、to、subject字段獲取發(fā)送者、接收者、主題等信息。
物理拓?fù)?、邏輯拓?fù)?、?yīng)用拓?fù)浼认嗷オ?dú)立(各表述不同網(wǎng)絡(luò)層關(guān)注的設(shè)備及結(jié)構(gòu))又相互關(guān)聯(lián)(共同構(gòu)成完整的網(wǎng)絡(luò)結(jié)構(gòu))。研究拓?fù)溟g的聯(lián)系,有利于清晰了解網(wǎng)絡(luò)結(jié)構(gòu),掌握設(shè)備在不同層間的關(guān)系。因此,本文對(duì)物理拓?fù)洹⑦壿嬐負(fù)浜蛻?yīng)用拓?fù)涞年P(guān)聯(lián)方式進(jìn)行研究,提出了一種符合實(shí)際應(yīng)用場(chǎng)景的關(guān)聯(lián)方式。該關(guān)聯(lián)方式的核心為IP,通過IP對(duì)三層網(wǎng)絡(luò)拓?fù)溥M(jìn)行關(guān)聯(lián),并獲取物理拓?fù)湫畔ⅰ⑦壿媽有畔⒑蛻?yīng)用層信息。本文發(fā)現(xiàn),可以通過ARP協(xié)議關(guān)聯(lián)物理拓?fù)鋵雍瓦壿嬐負(fù)鋵?,通過路由器IP間的服務(wù)和服務(wù)信息關(guān)聯(lián)邏輯拓?fù)鋵雍蛻?yīng)用拓?fù)鋵?。其中,ARP(地址解析協(xié)議)是一種計(jì)算機(jī)聯(lián)網(wǎng)協(xié)議。用于已知IP地址或網(wǎng)絡(luò)層地址時(shí)可以確定網(wǎng)絡(luò)主機(jī)的鏈路層或硬件地址,維護(hù)的ARP表中每條記錄都是一個(gè)IP地址和一個(gè)物理地址的綁定,因此可以使用路由設(shè)備或交換設(shè)備的ARP表來關(guān)聯(lián)物理層和邏輯層信息,可通過IP查看IP關(guān)聯(lián)的設(shè)備和設(shè)備之間的應(yīng)用服務(wù)情況[16-19]。
目前的網(wǎng)絡(luò)拓?fù)浞治鲋饕前l(fā)現(xiàn)網(wǎng)絡(luò)層的拓?fù)浣Y(jié)構(gòu),對(duì)子網(wǎng)內(nèi)部的結(jié)構(gòu)關(guān)注較少,這顯然不能適應(yīng)規(guī)模日益擴(kuò)大的網(wǎng)絡(luò)結(jié)構(gòu),因此本文分層論述了網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)方法,一是通過改進(jìn)的邏輯拓?fù)渲貥?gòu)算法發(fā)現(xiàn)路由器、子網(wǎng)及其連接關(guān)系;二是通過改進(jìn)的物理拓?fù)渲貥?gòu)算法發(fā)現(xiàn)網(wǎng)絡(luò)中交換機(jī)與交換機(jī)、交換機(jī)與路由器之間的關(guān)系;另外,本文引入的應(yīng)用拓?fù)湔故玖嗽O(shè)備間的應(yīng)用服務(wù),使得網(wǎng)絡(luò)更加完整。
綜上所述,論文中提出的融合多協(xié)議的網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)技術(shù)在發(fā)現(xiàn)完整網(wǎng)絡(luò)結(jié)構(gòu)中具有較大優(yōu)勢(shì),但仍存在一些問題,如部分不支持SNMP協(xié)議的設(shè)備難以被發(fā)現(xiàn),算法未考慮IPv6網(wǎng)絡(luò)環(huán)境,一定程度上依賴設(shè)備指紋庫(kù)等。通過對(duì)網(wǎng)絡(luò)拓?fù)錁?gòu)建的研究,本文認(rèn)為適配IPv6環(huán)境 、完善設(shè)備指紋庫(kù)等是未來技術(shù)的改進(jìn)方向[20-22]。