◆陶德志 王 佳
(1.第七一五研究所 浙江 310023;2.杭州譜聲電子有限公司 浙江 311121)
以太網(wǎng)數(shù)據(jù)測試監(jiān)控方法設(shè)計與實現(xiàn)
◆陶德志 王 佳
(1.第七一五研究所 浙江 310023;2.杭州譜聲電子有限公司 浙江 311121)
本文所述的以太網(wǎng)數(shù)據(jù)監(jiān)控方法無需購置價格昂貴的網(wǎng)絡(luò)數(shù)據(jù)分析儀,采用VC軟件編程實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)包的截獲和分析,具有編程靈活方便、功能全面、性能穩(wěn)定的特點。本文介紹的方法有兩個關(guān)鍵點,一是配置交換機端口鏡像即通過配置交換機將被監(jiān)控的網(wǎng)絡(luò)數(shù)據(jù)通過交換機的某一指定端口拷貝發(fā)送給監(jiān)控設(shè)備;二是將接收監(jiān)控數(shù)據(jù)的計算機網(wǎng)卡設(shè)置為混雜模式以使網(wǎng)卡接收所有發(fā)送來的網(wǎng)絡(luò)數(shù)據(jù)包。
以太網(wǎng);TCP/IP協(xié)議;原始套接字;交換機鏡像;網(wǎng)絡(luò)數(shù)據(jù)監(jiān)控
現(xiàn)代工業(yè)已步入物聯(lián)網(wǎng)時代,設(shè)備間的實時通訊和互聯(lián)互通極大的提高了工業(yè)領(lǐng)域的自動化和信息化程度,物聯(lián)網(wǎng)已經(jīng)滲透到現(xiàn)代工業(yè)從生產(chǎn)、裝配、調(diào)試、運輸、倉儲、監(jiān)控、管理直到銷售的各個環(huán)節(jié)??梢哉f基于以太網(wǎng)技術(shù)的物聯(lián)網(wǎng)等信息化技術(shù)是現(xiàn)代工業(yè)的鮮明標簽,對生產(chǎn)率的提高不亞于前幾次工業(yè)技術(shù)革命。設(shè)備的互聯(lián)互通和信息化一方面提高了效率另一方面也對設(shè)備間的以太網(wǎng)信息的交換和通訊提出了更高的要求,涉及到設(shè)備間數(shù)量龐大的以太網(wǎng)專用和通用通訊協(xié)議。通訊數(shù)據(jù)和命令的調(diào)試工作不但復(fù)雜度高而且工作量大,本文所述的以太網(wǎng)通訊數(shù)據(jù)測試監(jiān)控方法應(yīng)用面廣、實用性強、易于實現(xiàn)并且應(yīng)用靈活便捷。
TCP/IP協(xié)議通常被認為是一個四層協(xié)議系統(tǒng),由下到上依次為鏈路層、網(wǎng)絡(luò)層、運輸層和應(yīng)用層。
鏈路層,也稱作數(shù)據(jù)鏈路層或網(wǎng)絡(luò)接口層,通常包括操作系統(tǒng)中的設(shè)備驅(qū)動程序和計算機中對應(yīng)的網(wǎng)絡(luò)接口卡。網(wǎng)絡(luò)層,有時也稱作互聯(lián)網(wǎng)層,處理分組在網(wǎng)絡(luò)中的活動,例如分組的選路,該層提供快速的網(wǎng)絡(luò)傳輸服務(wù)。運輸層主要為兩臺主機上的應(yīng)用程序提供端到端的通信,該層提供可靠的網(wǎng)絡(luò)傳輸服務(wù)。運輸層包含兩個重要的傳輸協(xié)議:TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報協(xié)議)。應(yīng)用層則屬于人機交互的層面負責(zé)處理特定的應(yīng)用程序細節(jié),如FTP、telnet和email等均屬于應(yīng)用層。
對于普通的網(wǎng)絡(luò)應(yīng)用程序是在運輸層進行數(shù)據(jù)包的接收和發(fā)送,即采用連接型的TCP協(xié)議和非連接型的UDP協(xié)議,而監(jiān)控網(wǎng)絡(luò)數(shù)據(jù)需要截取更底層的數(shù)據(jù)包即網(wǎng)絡(luò)層的IP數(shù)據(jù)包。
網(wǎng)絡(luò)數(shù)據(jù)監(jiān)控的實質(zhì)是通過技術(shù)手段直接截獲或間接獲取網(wǎng)絡(luò)上傳輸?shù)乃袛?shù)據(jù)包,并實現(xiàn)數(shù)據(jù)包的解析和過濾,以達到監(jiān)控特定網(wǎng)絡(luò)數(shù)據(jù)的傳輸來判斷是否滿足系統(tǒng)網(wǎng)絡(luò)通訊的設(shè)計要求。實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)監(jiān)控有如下兩個必要條件:
第一,需要將被監(jiān)控的網(wǎng)絡(luò)數(shù)據(jù)發(fā)送到監(jiān)控設(shè)備的網(wǎng)卡端口。一般來說通過網(wǎng)絡(luò)通訊的各種設(shè)備都是通過網(wǎng)線連接在交換機上,交換機通過查詢路由表將指定地址的網(wǎng)絡(luò)數(shù)據(jù)包發(fā)送到該地址對應(yīng)的端口上,連接在交換機上的其他設(shè)備則無法收到該網(wǎng)絡(luò)數(shù)據(jù)包。如果要把該數(shù)據(jù)包發(fā)送到監(jiān)控設(shè)備的網(wǎng)卡端口,則需要對交換機進行端口鏡像配置,即將被監(jiān)控的一個或多個端口數(shù)據(jù)進行鏡像拷貝并發(fā)送到指定的監(jiān)控端口。
第二,需要監(jiān)控設(shè)備的網(wǎng)卡接口接收所有發(fā)送到該網(wǎng)卡的數(shù)據(jù)包。windows系統(tǒng)的網(wǎng)絡(luò)編程通常是使用套接字方式來實現(xiàn)的,普通的套接字程序只能響應(yīng)與自身硬件地址相匹配或是以廣播形式發(fā)出的數(shù)據(jù)幀。對于不是發(fā)給此地址的數(shù)據(jù)幀,網(wǎng)絡(luò)接口在驗證投遞地址并非自身地址之后將不引起響應(yīng),也就是說上層應(yīng)用程序?qū)o法收到該數(shù)據(jù)包。如果希望網(wǎng)卡接收發(fā)送到網(wǎng)卡接口的所有數(shù)據(jù)包,需要對網(wǎng)卡進行特別的設(shè)置,即設(shè)置網(wǎng)卡為混雜模式。
所謂網(wǎng)卡混雜模式的設(shè)置是通過原始套接字來實現(xiàn)的,不同于網(wǎng)絡(luò)應(yīng)用編程通常使用的數(shù)據(jù)流套接字(TCP)和數(shù)據(jù)報套接字(UDP)。原始套接字獲取的數(shù)據(jù)包含IP頭、 TCP頭和UDP頭等信息頭,這些信息保留了它在網(wǎng)絡(luò)傳輸時的完整信息。通過對這些在低層傳輸?shù)脑夹畔⒌姆治隹梢缘玫接嘘P(guān)網(wǎng)絡(luò)的一些信息,這些數(shù)據(jù)經(jīng)過了網(wǎng)絡(luò)層(IP)和傳輸層(TCP/UDP)的打包,對幀頭數(shù)據(jù)包進行的分析需要依據(jù)“TCP/IP協(xié)議”進行解析。以太網(wǎng)數(shù)據(jù)幀封裝如圖1所示。
圖1 以太網(wǎng)數(shù)據(jù)幀封裝示意圖
首先,需要對交換機進行端口鏡像配置,以使被監(jiān)控的網(wǎng)絡(luò)數(shù)據(jù)包全部發(fā)送到監(jiān)控設(shè)備的網(wǎng)卡端口。下面以思科20口的千兆網(wǎng)絡(luò)交換機為例詳細說明交換機端口鏡像的配置方法和步驟:
建立計算機和交換機之間的網(wǎng)絡(luò)連接。一般交換機的控制IP默認地址是 192.168.1.1,在計算機的命令提示符窗口輸入 telnet 192.168.1.1字符串并回車建立連接。連接成功窗口顯示Switch#,此時交換機為查看模式不能進行配置,需要輸入configure terminal字符串并回車進入交換機配置模式。窗口顯示Switch(config)#表示已進入配置模式,此時便可以對交換機配置進行更改了。網(wǎng)絡(luò)數(shù)據(jù)包鏡像源端口配置:在命令窗口輸入 monitor session 1 source interface eth-0-1并回車設(shè)置網(wǎng)絡(luò)端口1為鏡像1的數(shù)據(jù)包源端口,如果有多個連接在交換機上的設(shè)備需要監(jiān)控網(wǎng)絡(luò)數(shù)據(jù)包可以將連接多個設(shè)備的多個端口設(shè)為鏡像的數(shù)據(jù)源端口。網(wǎng)絡(luò)數(shù)據(jù)包鏡像目的端口配置:在命令窗口輸入monitor session 1 destination interface eth-0-20并回車設(shè)置網(wǎng)絡(luò)端口20為鏡像1的數(shù)據(jù)包目的端口。配置完成所有通過交換機鏡像源端口的數(shù)據(jù)包都將被拷貝并轉(zhuǎn)發(fā)到鏡像目的端口。
另外還需要設(shè)置網(wǎng)卡為混雜模式,以使網(wǎng)卡接收到達端口的全部數(shù)據(jù)包。下面以windows系統(tǒng)下VC編程實現(xiàn)為例說明網(wǎng)卡混雜模式的設(shè)置方法和步驟:
VC下采用創(chuàng)建原始套接字的方式設(shè)置網(wǎng)卡為混雜模式。添加代碼 sockraw = socket(AF_INET, SOCK_RAW, IPPROTO_IP),其中AF_INET表示TCP/IP協(xié)議簇、SOCK_RAW表示創(chuàng)建套接字類型為原始socket。
將原始套接字綁定到本地地址,填充 sockaddr_in結(jié)構(gòu)體并綁定到原始套接字。設(shè)置該套接字為接收所有數(shù)據(jù)的模式,添加代碼 WSAIoctl(sockraw, SIO_RCVALL , &dwBufferLen,sizeof(dwBufferLen),NULL,0,&dwBytesReturn,NULL,NULL ),其中標志字SIO_RCVALL表示接收所有數(shù)據(jù)包。
至此網(wǎng)卡已經(jīng)可以工作在混雜模式,只需要調(diào)用 recv()函數(shù)便能夠接收到發(fā)送到網(wǎng)卡端口的所有數(shù)據(jù)包了。因為通過這種方式截獲的數(shù)據(jù)包里包含了IP幀頭、TCP和UDP幀頭等信息,可以依據(jù)TCP/IP協(xié)議解析出源IP地址目的IP地址及源端口號和目的端口號以及數(shù)據(jù)包的協(xié)議類型等信息有助于網(wǎng)絡(luò)數(shù)據(jù)的監(jiān)控分析。在接收處理程序中添加信息過濾代碼便可實現(xiàn) IP地址過濾、端口號過濾、協(xié)議類型過濾以及數(shù)據(jù)包中任意特征數(shù)據(jù)值過濾,便于觀察和分析數(shù)據(jù)包內(nèi)容達到快速定位異常網(wǎng)絡(luò)數(shù)據(jù)的目的。
本文所述的以太網(wǎng)數(shù)據(jù)包監(jiān)控方法只需要一通用臺計算機,無需添加任何硬件。并且通過編程可以方便靈活的實現(xiàn)數(shù)據(jù)包過濾、數(shù)據(jù)協(xié)議的分析以及數(shù)據(jù)通訊故障的快速定位?;诖朔椒ň帉懙腣C數(shù)據(jù)包監(jiān)控分析軟件已應(yīng)用于多個設(shè)備間的網(wǎng)絡(luò)數(shù)據(jù)的監(jiān)控和分析,高速數(shù)據(jù)通訊下數(shù)據(jù)包截獲穩(wěn)定無遺漏、分析過濾數(shù)據(jù)包快捷直觀,工作性能穩(wěn)定可靠。在信息化高度發(fā)展及物聯(lián)網(wǎng)技術(shù)日漸成熟的現(xiàn)代工業(yè)背景下,網(wǎng)絡(luò)數(shù)據(jù)的監(jiān)控分析是以太網(wǎng)數(shù)據(jù)通訊監(jiān)控和問題分析定位的重要方法。
[1] 史蒂文斯(W.Richard Stevens).TCP/IP 詳解(卷 1:協(xié)議)[M].機械工業(yè)出版社,2007.
[2] 孫鑫.VC++深入詳解(修訂版)[M].電子工業(yè)出版社,2012.
[3] 唐文超.VC++網(wǎng)絡(luò)編程[M].清華大學(xué)出版社,2013.
[4] 韋樸,陳泰生.Visual C++通用范例開發(fā)金典[M].電子工業(yè)出版社,2008.