◆陶德志 王 佳
(1.第七一五研究所 浙江 310023;2.杭州譜聲電子有限公司 浙江 311121)
以太網數據測試監控方法設計與實現
◆陶德志 王 佳
(1.第七一五研究所 浙江 310023;2.杭州譜聲電子有限公司 浙江 311121)
本文所述的以太網數據監控方法無需購置價格昂貴的網絡數據分析儀,采用VC軟件編程實現網絡數據包的截獲和分析,具有編程靈活方便、功能全面、性能穩定的特點。本文介紹的方法有兩個關鍵點,一是配置交換機端口鏡像即通過配置交換機將被監控的網絡數據通過交換機的某一指定端口拷貝發送給監控設備;二是將接收監控數據的計算機網卡設置為混雜模式以使網卡接收所有發送來的網絡數據包。
以太網;TCP/IP協議;原始套接字;交換機鏡像;網絡數據監控
現代工業已步入物聯網時代,設備間的實時通訊和互聯互通極大的提高了工業領域的自動化和信息化程度,物聯網已經滲透到現代工業從生產、裝配、調試、運輸、倉儲、監控、管理直到銷售的各個環節。可以說基于以太網技術的物聯網等信息化技術是現代工業的鮮明標簽,對生產率的提高不亞于前幾次工業技術革命。設備的互聯互通和信息化一方面提高了效率另一方面也對設備間的以太網信息的交換和通訊提出了更高的要求,涉及到設備間數量龐大的以太網專用和通用通訊協議。通訊數據和命令的調試工作不但復雜度高而且工作量大,本文所述的以太網通訊數據測試監控方法應用面廣、實用性強、易于實現并且應用靈活便捷。
TCP/IP協議通常被認為是一個四層協議系統,由下到上依次為鏈路層、網絡層、運輸層和應用層。
鏈路層,也稱作數據鏈路層或網絡接口層,通常包括操作系統中的設備驅動程序和計算機中對應的網絡接口卡。網絡層,有時也稱作互聯網層,處理分組在網絡中的活動,例如分組的選路,該層提供快速的網絡傳輸服務。運輸層主要為兩臺主機上的應用程序提供端到端的通信,該層提供可靠的網絡傳輸服務。運輸層包含兩個重要的傳輸協議:TCP(傳輸控制協議)和UDP(用戶數據報協議)。應用層則屬于人機交互的層面負責處理特定的應用程序細節,如FTP、telnet和email等均屬于應用層。
對于普通的網絡應用程序是在運輸層進行數據包的接收和發送,即采用連接型的TCP協議和非連接型的UDP協議,而監控網絡數據需要截取更底層的數據包即網絡層的IP數據包。
網絡數據監控的實質是通過技術手段直接截獲或間接獲取網絡上傳輸的所有數據包,并實現數據包的解析和過濾,以達到監控特定網絡數據的傳輸來判斷是否滿足系統網絡通訊的設計要求。實現網絡數據監控有如下兩個必要條件:
第一,需要將被監控的網絡數據發送到監控設備的網卡端口。一般來說通過網絡通訊的各種設備都是通過網線連接在交換機上,交換機通過查詢路由表將指定地址的網絡數據包發送到該地址對應的端口上,連接在交換機上的其他設備則無法收到該網絡數據包。如果要把該數據包發送到監控設備的網卡端口,則需要對交換機進行端口鏡像配置,即將被監控的一個或多個端口數據進行鏡像拷貝并發送到指定的監控端口。
第二,需要監控設備的網卡接口接收所有發送到該網卡的數據包。windows系統的網絡編程通常是使用套接字方式來實現的,普通的套接字程序只能響應與自身硬件地址相匹配或是以廣播形式發出的數據幀。對于不是發給此地址的數據幀,網絡接口在驗證投遞地址并非自身地址之后將不引起響應,也就是說上層應用程序將無法收到該數據包。如果希望網卡接收發送到網卡接口的所有數據包,需要對網卡進行特別的設置,即設置網卡為混雜模式。
所謂網卡混雜模式的設置是通過原始套接字來實現的,不同于網絡應用編程通常使用的數據流套接字(TCP)和數據報套接字(UDP)。原始套接字獲取的數據包含IP頭、 TCP頭和UDP頭等信息頭,這些信息保留了它在網絡傳輸時的完整信息。通過對這些在低層傳輸的原始信息的分析可以得到有關網絡的一些信息,這些數據經過了網絡層(IP)和傳輸層(TCP/UDP)的打包,對幀頭數據包進行的分析需要依據“TCP/IP協議”進行解析。以太網數據幀封裝如圖1所示。

圖1 以太網數據幀封裝示意圖
首先,需要對交換機進行端口鏡像配置,以使被監控的網絡數據包全部發送到監控設備的網卡端口。下面以思科20口的千兆網絡交換機為例詳細說明交換機端口鏡像的配置方法和步驟:
建立計算機和交換機之間的網絡連接。一般交換機的控制IP默認地址是 192.168.1.1,在計算機的命令提示符窗口輸入 telnet 192.168.1.1字符串并回車建立連接。連接成功窗口顯示Switch#,此時交換機為查看模式不能進行配置,需要輸入configure terminal字符串并回車進入交換機配置模式。窗口顯示Switch(config)#表示已進入配置模式,此時便可以對交換機配置進行更改了。網絡數據包鏡像源端口配置:在命令窗口輸入 monitor session 1 source interface eth-0-1并回車設置網絡端口1為鏡像1的數據包源端口,如果有多個連接在交換機上的設備需要監控網絡數據包可以將連接多個設備的多個端口設為鏡像的數據源端口。網絡數據包鏡像目的端口配置:在命令窗口輸入monitor session 1 destination interface eth-0-20并回車設置網絡端口20為鏡像1的數據包目的端口。配置完成所有通過交換機鏡像源端口的數據包都將被拷貝并轉發到鏡像目的端口。
另外還需要設置網卡為混雜模式,以使網卡接收到達端口的全部數據包。下面以windows系統下VC編程實現為例說明網卡混雜模式的設置方法和步驟:
VC下采用創建原始套接字的方式設置網卡為混雜模式。添加代碼 sockraw = socket(AF_INET, SOCK_RAW, IPPROTO_IP),其中AF_INET表示TCP/IP協議簇、SOCK_RAW表示創建套接字類型為原始socket。
將原始套接字綁定到本地地址,填充 sockaddr_in結構體并綁定到原始套接字。設置該套接字為接收所有數據的模式,添加代碼 WSAIoctl(sockraw, SIO_RCVALL , &dwBufferLen,sizeof(dwBufferLen),NULL,0,&dwBytesReturn,NULL,NULL ),其中標志字SIO_RCVALL表示接收所有數據包。
至此網卡已經可以工作在混雜模式,只需要調用 recv()函數便能夠接收到發送到網卡端口的所有數據包了。因為通過這種方式截獲的數據包里包含了IP幀頭、TCP和UDP幀頭等信息,可以依據TCP/IP協議解析出源IP地址目的IP地址及源端口號和目的端口號以及數據包的協議類型等信息有助于網絡數據的監控分析。在接收處理程序中添加信息過濾代碼便可實現 IP地址過濾、端口號過濾、協議類型過濾以及數據包中任意特征數據值過濾,便于觀察和分析數據包內容達到快速定位異常網絡數據的目的。
本文所述的以太網數據包監控方法只需要一通用臺計算機,無需添加任何硬件。并且通過編程可以方便靈活的實現數據包過濾、數據協議的分析以及數據通訊故障的快速定位?;诖朔椒ň帉懙腣C數據包監控分析軟件已應用于多個設備間的網絡數據的監控和分析,高速數據通訊下數據包截獲穩定無遺漏、分析過濾數據包快捷直觀,工作性能穩定可靠。在信息化高度發展及物聯網技術日漸成熟的現代工業背景下,網絡數據的監控分析是以太網數據通訊監控和問題分析定位的重要方法。
[1] 史蒂文斯(W.Richard Stevens).TCP/IP 詳解(卷 1:協議)[M].機械工業出版社,2007.
[2] 孫鑫.VC++深入詳解(修訂版)[M].電子工業出版社,2012.
[3] 唐文超.VC++網絡編程[M].清華大學出版社,2013.
[4] 韋樸,陳泰生.Visual C++通用范例開發金典[M].電子工業出版社,2008.