




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、!-簡介包捕獲(或數(shù)據(jù)包嗅探)是收集數(shù)據(jù),通過特定的網絡接口將所有數(shù)據(jù)包的過程。在我們的應用 程序捕獲網絡數(shù)據(jù)包是一個強大的能力,它可以讓我們寫網絡監(jiān)控,數(shù)據(jù)包分析器和安全工具。本的lib pea p庫和基于UNIX系統(tǒng)WinP ca p的用于Win dows 是最廣泛使用的數(shù)據(jù)包捕獲驅動 程序監(jiān)視API提供低級別的網絡。其中應用程序使用的libpcap / WinPcap的包捕獲子系統(tǒng)為是著名的tcpdump的和 Wireshark 的。在這篇文章中, 我們將介紹 SharpPcap WinPcap的從您的。NET應用程序。)NET程序集(庫 接口與libpcap的或并會給你一個詳細的方案編
2、制教程教你如何使用。背景應用WinPcap 而在他的C #編碼具有省時,如垃他發(fā)現(xiàn)在Code Project塔米爾加爾在 2004 年左右開始的 SharpPcap 項目。他想用在。NET 大學最后項目的工作。該項目涉及VoIP流量分析和解碼,他想繼續(xù)用圾收集功能簡單。WinPcap的API的訪問似乎從凈是相當流行的要求, 上的一些網站,讓您做到這一點有益的項目。:數(shù)據(jù)包捕獲和分析儀原始套接字捕獲使用 C#與WinPcap的包嗅探功能移植到。NET庫第一個項目是一個偉大的空靈。NET的克隆,讓您獲取和分析大量的數(shù)據(jù)包的協(xié)議類型。然而,隨著這個項目的幾個問題使它幾乎不可能得到在其他。NET應用程
3、序共享。首先,作者沒有提NET應用程序中使用任何通用的API包。他沒有單獨的供用于捕獲,可以通過其他。NET應用程序中使用任何通用的API包。他沒有單獨的 UI代碼和他的分析和捕獲的代碼,使他的捕捉代碼類依賴于圖形用戶界面,如ListView 操作。其次,由于某些原因,筆者選擇了重新實現(xiàn)在C #由他本人,而不是僅僅WinPcap 的包裝他們的部分職能。這意味著他的應用程序無法利用新的WinPcap的版本的硬編碼的優(yōu)勢,因為他在他的WinP ca p的應用程序的某些版本。第二個和第三個物品的包裝項目為WinP ca p 的好開始,但他們沒有提供一些重要的WinP ca p的功能,如離線pcaP的
4、文件處理和應用內核級數(shù)據(jù)包過濾器,以及最重要的是他們提供了這樣的分析沒有協(xié)議分析器類包。這兩個項目沒有張貼的文章,以自己的庫的源代碼,讓其他人一起延長他們的工作和增加新功能和新的數(shù)據(jù)包分析器類。因此,塔米爾決定開始他對自己的圖書館工作。在 年年中時,在1.x系列的最后一個版本發(fā)布時,1.x系列的幾個版本發(fā)布。發(fā)展放緩對2007Shar pP ca p 1.6.2o克里斯摩根發(fā)生在 2008年11月超過Shar pP ca p發(fā)展。從那時起 Sharp Pea p 主要內部已重寫和API改進。2010年2月下旬,Shar pP ca p 3.0被釋放。此版本是一個重寫Sharp Pea p 的數(shù)
5、據(jù)包分析器。分組分析功能被打破,進入一個新的圖書館,P acket.Net o Sharp Pea p 注意到與lib pcap 的/ WinPeap 的包和Packet.Net注意到接口解剖和創(chuàng)造護理照顧。對Packet.Net的建筑的細節(jié)將在本教程的后面討論。SharpPcap v3.5版本發(fā)布了 2月1日,2011年。3.5版本包含重大的空氣污染指數(shù)的變化以及WinPcap 的遠程采集和支持 AirPcap o關于 SharpPcap的目的SharpPcap 是提供一個框架 NET應用程序捕獲,注資。和分析網絡數(shù)據(jù)包。Shar pP ca p 是公開和積極發(fā)展同它的源代碼和文件發(fā)布在以改
6、善或解決問題歡迎通過sharp pcap開發(fā)者郵件列表積極回答問題的論壇和跟蹤支持,所以如果你有任何問題請與庫隨時問。SourceForge。錯誤報告,托管。源代碼補丁, 功能要求和其他查詢正在Shar pP ca p 是一個完全跨平臺的庫管理。同一程序集運行在微軟的。 64位平臺。NET以及單在32位和F面的列表說明了目前Shar pP ca p 功能支持:oNET 和 Mo no 平臺上的 Win dows(32 位或64 位)和Linux單一組件的 Microsoft(32 或 64 位)和 Mac o高性能-SharpPcap可以捕捉足夠快跟上 > 的3MB / s 的傳輸速率高
7、達 SCP的WinPcap的擴展部分支持:設置內核緩沖區(qū)大小注射用的數(shù)據(jù)包發(fā)送隊列。收集在一個特定的網絡接口的網絡統(tǒng)計 支持AirPca p枚舉和顯示有關 Win dows 機器上的物理網絡接口的細節(jié)。 捕獲低級別的網絡數(shù)據(jù)包將通過給定的接口。分析和解析以下協(xié)議:以太網血清瘦素(Linux的熟食方式采集)ARP (地址解析協(xié)議)IP (因特網協(xié)議):? IPv4 的? IPv6 的TCP (傳輸控制協(xié)議)UDP (用戶數(shù)據(jù)報協(xié)議)ICMP協(xié)議(In ternet 控制消息協(xié)議)? ICMPv4? ICMPv6 報IGMPv2 的PPP oE協(xié)議和平之路LLDP功能喚醒局域網(網絡喚醒)在給定接
8、口注入的低級別的網絡數(shù)據(jù)包。 處理(閱讀和寫作)離線數(shù)據(jù)包捕獲文件。 檢索的數(shù)據(jù)包接收適配器統(tǒng)計對比下降請檢查項目主頁主頁最新的更新和 bug修復。Sharp Pca p架構Shar pPcap 具有層狀結構,在頂層的類,所有設備的工作:Cap tureDeviceListOfflin eCa ptureDeviceICap tureDevice-檢索系統(tǒng)名單上的所有設備-文件讀取裝置從一個pcap的捕捉-所有的捕捉設備有 ICaptureDevice接口該命名空間的布局層次:libp ca po的Lib Pcap LiveDeviceLib Pcap LiveDeviceList-一個 IC
9、aptureDevice-檢索一個名單 LibPcapLiveDevice設備(其中包括pcap的/ WinPcap的和airpcap 設備)WinPcap 的oWinPcap DeviceList-檢索一個名單WinPcapDevices(其中包括WinPcap 的和 airpcap 設備)WinPcap Device口-阿 LibPcapLiveDevice額外WinPcap 的功能和接AirPca poAir Pcap DeviceListAir Pcap Device-檢索一個名單 AirPcapDevices-阿 WinPcapDevice額外 AirPcap 功能和接口Cap tu
10、reDeviceList返回一個設備清單完全分化。這意味著每個歸國 CaptureDeviceListICap tureDevice要么是 LibPcapLiveDevice由,一 WinPcapDevice 或AirPca pDevice。這使您可以檢索整個列表的設備和差異化在每個設備類型看。如果你想獲得一個特定的特定類型的設備只,你可以使用一個*DeviceList 類。曰 Colla pse |Copy Code/ /檢索所有捕獲設備=Cap tureDeviceListVaR的裝置;/ /類型的區(qū)分依據(jù)的 foreach ( ICaptureDevice如果(dev 是 AirPcap
11、Devicedev 的設備中)過程作為 AirPcapDevice否則如果(dev 是 WinPcapDevice)過程作為 WinPcapDevice否則如果(dev 是 LibPcapLiveDevice過程作為 LibPcapLiveDeviceElColla pse |Copy Code/ /只檢索Win Pea p的(和AirPca p 設備)=AirPcapDeviceListVaR 的裝置;的 foreach ( AirPcapDevicedev 的設備中)/ /處理該AirPcap設備Packet.Net結構和用法Packet.Net切換從2.x到SharpPcap 繼承模型的
12、嵌套包之一。所有的數(shù)據(jù)包包含一個Packet PayloadPacket屬性和一個Byte PayloadData財產。一個或多個這些都不能有效。以太網上的TCP數(shù)據(jù)包捕獲的可能 EthernetPacket “ - > IPv4 包->” TCP數(shù)據(jù)包。在Packet.Net時,TCP數(shù)據(jù)包可能被訪問一樣cap turedPacket.PayloadPacket.PayloadPacketGetE neap sulsted()方法被添加,因此用戶可以做的Tcp Packet.GetE neap sulated(ca pturedPacket);而是要幫助用戶從staticvar
13、tcp Packet =該GetEneapsulated()方法是很聰明,設計工作在許多不同的情況。Udp Packet.GetE neap sulated()將返回 Ether net Packet UDP包的數(shù)據(jù)包,包括“->IP數(shù)據(jù)包” -> UdpPacket或Linux 熟捕捉- > "知識產權” -> UdpPacket或Ethernet Packet -> “的PPPoE - > ”和平之路“- > 知識產權 -> ” UdpP acket。我們建議使用GetEneapsulated()方法來檢索子數(shù)據(jù)包。隨著Packet
14、.Net ,建設包是這樣的:曰 Colla pse |Copy Code使用 P acketDotNet;ushort 的 tc pSource Port = ushort 的 tcp Destinatio nPort = 風險123;321;tcpP acket =新 TcpP acket(tcp Source Port, tcp Destinatio nPort風險ip SourceAddress =System.Net.I PAddress. Parse風險ip DestinationAddress =System.Net.I PAddress. Parse(“ ”
15、);(“ ”);風險ipP acket =新 IPv4Packet(ipSourceAddress, ipDestinationAddress風險sourceHwAddress90-90-90-90-90-90”;風險ethernetSourceHwAddress =System.Net.NetworkInformation. PhysicalAddress. Parse(sourceHwAddress ); 風險 destinationHwAddress80-80-80-80-80- 80”;風險 ethernetDestinationHwAddress =System
16、.Net.NetworkInformation. PhysicalAddress. Parse(destinationHwAddress/ / 注意:使用 EthernetPacketType.None/ /協(xié)議類型的更新是基于數(shù)據(jù)包有效載荷說明了以太網/ /分配給特定的以太網包風險 ethernet Packet =新 Ethernet Packet(ethernetSourceHwAddressethernetDestinationHwAddressEthernet PacketT yp e.None/ /現(xiàn)在所有的數(shù)據(jù)包縫在一起ipP acket .P ayload Packet = t
17、cpP acket;ethernet Packet. Payload Packet = ipP acket;/ /并打印岀包地看到,它看上去就像我們希望它Console.WriteLine(ethernet Packet.ToString0);/ /要檢索的字節(jié)表示這個新創(chuàng)建使用屬性的字節(jié)字節(jié)P acketBytes = ethernet Packet.Bytes;/ / Ethernet PacketSharpPcap步步教您使用Shar pPcap例子可以發(fā)現(xiàn),在 示例/包目錄源。本教程的文本,這是直接取自 WinPcap的的官方教程,但修改以顯示 C #中使用SharpPcap 庫。所有
18、的例子可以下載連同SharpPca p 此網頁的源代碼從頂部。如果您是Win dows 上運行,WinPcap的庫必須安裝運行的例子,然后再嘗試任何這些,所以請下載并安裝最新版本的WinPcap 的的下載頁面。如果Mac運行在Unix / Linux / 時,libpcap庫必須安裝使用你的系統(tǒng)軟件管理系統(tǒng)。涵蓋以下主題在這方面與在括號中的實例名稱教程:..9.獲取設備列表(例 1) 打開適配器并捕獲數(shù)據(jù)包(示例 4)捕獲的數(shù)據(jù)包,但無事件(例 過濾流量(例5) 解讀包(例6) 脫機處理轉儲文件(例8)發(fā)送數(shù)據(jù)包(例 9)發(fā)送隊列(例10 ) - WinP ca p
19、 11)收集統(tǒng)計數(shù)據(jù)在網絡上的流量3)的唯一(例如 -WinPcap的唯一10.后臺處理數(shù)據(jù)包隊列-高封包捕獲率獲取設備列表(例如,在源碼包 1 )通常,第一個事,一個Sharp Pcap 提供了一個類,Ca ptureDeviceList 持有型緩存網絡適配器列表ICa ptureDevice含人類可讀的名稱和描述,分別對相應的設備。印在屏幕上,印刷錯誤,如果沒有適配器發(fā)現(xiàn):Shar pPcap 為基礎的應用程序是得到一個連接的網絡適配器的列表。用于這一目的。這個類是一個單實例,。特別是,Name和Description 屬性包下面的C #示例顯示了如何檢索適配器列表和打pColla pse
20、 |Copy Code/ / 打印SharpPcap 版本字符串 版本=SharpPcap.Version.VersionString;Console.WriteLine(“0 SharpPcap , Example1.lfList.cs,版本);/ /檢索設備列表Cap tureDeviceList設備=Cap tureDeviceList.lnstance;/ /如果沒有設備被發(fā)現(xiàn)打印錯誤女口果(devices.CountConsole.WriteLine設備不被發(fā)現(xiàn)本機”;Console.WriteLineConsole.WriteLine? “);返回; n以下是機器設備可以用這樣的:
21、”;!-/ /打印岀可用的網絡設備的 foreach(ICaptureDevicedev 的設備中)();Console.WriteLine(“0 N'的,dev.ToString該函數(shù)打開一個捕獲裝置是Open()重載是如下一些論據(jù):Console.Write點擊輸入退出.”);Console.ReadLine上述應用程序的輸岀會是這樣的:ElColla pse |Copy Code實例目錄調試 “> Exampl e1.IfList.exeSharp Pcap ,Example1.lfList.cs以下是這臺機器上的設備可供選擇:接口:名稱: Device NP
22、F_ D8B7C9B2 - D53D - 45DA - ACF0 - 2E2116F97314 的 FriendlyName描述:英特爾(R)地址::局域網連接2Pro/1000 mt臺式機適配器地址:為fe80 :b444 : 92d8 : c882 : 8227網絡掩碼:Broadaddr地址:地址:5網絡掩碼:Broadaddr : 55地址:地址:硬件地址:0800276AC792標志:0按'Enter' 鍵退出.打開一個適配器和捕獲數(shù)據(jù)包(例如,在源碼包現(xiàn)在,我們已經看到了如何獲得一個適配器一起玩,一
23、些交通。在本節(jié)中,我們將編寫一個程序,打印一些通過適配器每個數(shù)據(jù)包信息流。讓我們開始真正的工作,打開適配器并捕獲!-Open()Open( DeviceMode mode)Open( DeviceMode mode, int read_timeout)以上兩個論點值得一些進一步的解釋。DeviceMode :在正常模式(DeviceMode.Normal ),網絡適配器只捕獲的數(shù)據(jù)包直接解 決它;在網絡上的其他主機的數(shù)據(jù)包交換的被忽略。相反,當適配器(處于混雜模式DeviceMode.Promiscuous ),它捕獲所有的數(shù)據(jù)包不管是不是注定它或。這意味著,在 共同的媒介(如非交換以太網),
24、lib pcap的/ WinPcap的將能夠捕捉到其他主機的數(shù)據(jù)包?;祀s模式是應用程序的默認大多數(shù)捕捉,所以我們能夠例如它在以下方面:。注意混雜模式,以通過網絡檢測手段,如果你是在混雜模式捕獲您可能能夠被檢測到其他實體在網絡上。搜索現(xiàn)混雜”通過獲取更多信息網上搜索引擎。read_timeout :指定讀取超時毫秒,在。一個讀了適配器(例如,使用GetNextPacket() 函數(shù))將總是返回后 read_timeout 毫秒,即使沒有數(shù)據(jù)包網絡可從。read_timeout定義統(tǒng)計報告之間的間隔如果適配器模式在統(tǒng)計(見在網絡流量收集統(tǒng)計數(shù)據(jù)的部分)。設置read_timeout 以0表示沒有超
25、時,數(shù)據(jù)包到達一個適配器上的閱讀永遠不會返回,如果沒 有。甲-1方超時而導致適配器讀取上總是立即返回。下面的例子顯示了使用On PacketArrival事件接收數(shù)據(jù)包。我們創(chuàng)建一個事件處理程序被稱為每當一個新的包是經歷ICa ptureDevice:pColla pse |Copy Code/ /提取設備的清單ICaptureDevice設備=器件我;/ /注冊的處理函數(shù)的/ /'包到來的事件device.O nP acketArrival + =(device_ OnP acketArrival/ /打開設備捕捉詮釋 readTimeoutMilliseconds =新 Sharp
26、Pcap.P acketArrivalEventHandler1000;device.Open( DeviceMode.Promiscuous, readTimeoutMillisecondsConsole.WriteLine(“-. 監(jiān)聽0,按回車停止”,0 ;device.Descri ption / /開始捕獲過程device.StartCa pture / /等待回車從用戶。Console.ReadLine ();!-/ /停止捕獲過程devices opCap ture/ /關閉PcaP的設備device.Close ();這里是我們的包處理程序的執(zhí)行情況:HColla pse |C
27、opy Code摘要打印的時間和長度分別獲得分組/摘要/ / /私有靜態(tài)無效 device_OnPacketArrival(對象發(fā)件人,Cap tureEventArgs包)DateTime 的時間=p acket.Timeval.Date;詮釋 長度=P acket.Data.Length;Console.WriteLine( “0 : 1 : 2 ,3 4長度=”time.Hour ,time.Minute ,time.Second ,time.Millisecond,len 個);或 Capture(intpacketCount)一旦適配器被打開,可以開始捕捉與StartCa pture
28、()功能。這兩個函數(shù)非常相似,所不同的是程捕獲進程 A,而Capture(intpacketCount)直至塊packetCount包已被抓獲。當使用StartCapture()我們應該以后調用StopCapture()終止捕獲過程。為了捕捉下去,方法。StartCa pture()是一個非阻斷功能,啟動新的線調用 Capture()這些功能都需要一個用于處理數(shù)據(jù)包的事件處理程序調用它們前登記。此事件處理程序調用為每個新的網絡數(shù)據(jù)包,并接收來自發(fā)送者對象,調用該處理程序(即對象)和實際收到的 Packet ,包括所有的協(xié)議頭。請注意該幀的CRC因為它是由框架驗證后的網絡適配器中刪除。還要注意的
29、是大多數(shù)適配器丟ICa ptureDeviceICa ptureDevice通常不會在報文中, 棄錯誤的CRC,所以 WinPcap 的包(因此 Sharp Pea p )通常無法捕捉他們。該Packet 類表示一個通用分組網絡捕捉到的。每一個這樣的數(shù)據(jù)包有一個PcapHeader 的,因此,用戶應用程序沒有在它的直接 函數(shù),它在未來的一段介紹。TIMESTA MP 屬性包含了捕獲的數(shù)據(jù)包的長度和捕獲)的有關數(shù)據(jù)包信息(例如。上面的例子 中提取和長度從每一個時間戳Packet對象,并打印在屏幕上。請注意,處理程序代碼是由所謂的ICa ptureDevice控制。另一種方法是使用GetNextP
30、acket()如果沒有事件處理程序(例如,在源碼包4)捕獲數(shù)據(jù)包在本節(jié)中的示例程序中的行為完全像前面的示例,ICa ptureDevice.GetNextPacketOOn PacketArrival但它使用事件處理方法,而不是注冊一個。該事件是一個很好的做法,可在一次捕捉設備從幾個不錯的選擇在這樣一些情況,因為當。但是,處理回調有時并不實用-它往往使得程序更加復雜,特別是在多線程應用程序的情況。在這種情況下, GetNextPacketO檢索直接調用一個包,一-使用GetNextPacketO 數(shù)據(jù)包只收到當程序員想用它們。在下面的程序,例中的事件處理程序代碼和移動循環(huán)它成一個函數(shù)調用后立即
31、在主要以我們重新使用以前的示GetNextPacketO注意:下面的例子將退岀如果MS超時到期的1000網絡上沒有數(shù)據(jù)包:目 Colla pse |Copy Code/ /提取設備的清單ICaptureDevice設備=器件我;/ /打開設備捕捉詮釋 readTimeoutMilliseconds =1000;device.Open( DeviceMode.Promiscuous,readTimeoutMillisecondsConsole.WriteLineConsole.WriteLine();(“ -"監(jiān)聽0,device.Descri ption分組包=0;()()!=空)/
32、 /保存捕獲數(shù)據(jù)包使用GetNextPacket 而(包=device.GetNextPacket/ /打印的時間和收到的每個數(shù)據(jù)包的長度DateTime 的時間=p acket. Pcap Header.Date; 詮釋 長度=p acket .Pcap Header. PacketLength;Console.WriteLine(“0 : 1 : 2,3 4長度=”time.Hour , time.Minute ,time.Second , time.Millisecond, len 個);/ /關閉PcaP的設備device.Close ();Console.WriteLine( “ -
33、捕捉停止,裝置關閉?!?;過濾交通(例如在源碼包 5 )由libpcap和WinPcap的提供了最強大的功能之一就是過濾引擎。它提供了非常有效的方式來接收網絡流量的子集。WinPcap的和lib pea p擁有一個完整的編譯器,它接受一個stri ng包含一個高層次的布爾(過濾器)的表達,并產生一個低級別的字節(jié)代碼,可以通過數(shù)據(jù)包捕獲驅動程序解釋的過濾器的發(fā)動機。作為tepdump 的布爾語法)表達式的語法(也稱為被廣泛用于許多應用的libpcap和WinPcap的除外。你可以找到它的規(guī)格在WinPcap的文檔頁面,或者如果您運行的是通過Linux的人pcap的過濾器。捕捉器。一旦Filter
34、該Filter屬性相關聯(lián)過濾器,捕捉器。一旦Filter 設置,相關的過濾器將被應用到所有的數(shù)據(jù)包來自于網絡,所有的符合性的數(shù)據(jù)包(即包為其布爾表達式的值為true )將實際復制到應用程序。下面的代碼演示如何編譯和設置過濾器。請注意的 libpcap / WinPcap濾器,因為編譯器創(chuàng)建的一些過濾器需要它。 它照顧我們。的的表達式編譯器要求掩碼由ICa ptureDevice傳遞連同過然而SharpPcap 需要通過自動提取從適配器掩碼該過濾器的表達我們在下面的代碼片段使用TCP和提供這些應用程序”:“IP和TCP,這意味著 只保留數(shù)據(jù)包是IPv4和pColla pse |Copy Code
35、/ /打開設備捕捉詮釋 readTimeoutMilliseconds =1000;device.Open( DeviceMode.Promiscuous,readTimeoutMilliseconds/ / tepdump的過濾器,只捕獲的TCP / IP字符串過濾=“IP和TCP ;過濾器;device.Filter =Console.WriteLineConsole.WriteLine過濾器);Console.WriteLine數(shù)據(jù)包();(“-下tcpdump的過濾器將被應用于:” 0(“-. 監(jiān)聽0,按回車停止”,device.Descri ption / /開始捕獲數(shù)據(jù)包無限期de
36、vice.Capture();/ /關閉PcaP的設備/ /(注:這條線將永遠不會被調用,因為/ /我們捕捉無限期device.Close ();口譯(在源代碼包示例 6)包現(xiàn)在,我們能夠捕捉和過濾網絡流量,我們希望把我們的知識,可以用一個簡單的真實世界”的申請。在這一課,我們將采取從前面的代碼,并使用這些作品建立一個更加有用的程序。當前 計劃的主要目的是展示如何捕獲的數(shù)據(jù)包的協(xié)議頭可以解析和解釋。由此產生的程序,名字叫DumpTCP,打印網絡摘要對我們的 TCP流量。我選擇了解析和顯示 TCP協(xié)議(UDP的例子, 而不是在原來的教程貼),因為它是一個更加有趣比UDP和Sharp Pea p
37、它不需要太多的編碼解析。冃 Colla pse |Copy Code摘要打印的時間,長度,源IP,源端口,DST的IP和端口的DST 為每個TCP / IP數(shù)據(jù)包在網絡上收到/摘要私有靜態(tài)無效 device_OnPacketArrival 對象發(fā)件人,Cap tureEventArgs 五) (e.Packet );風險值 的 TCP = TepPacket.GetEncapsulated如果(技術合作計劃!=空)DateTime 的時間=e.P acket.Timeval.Date;詮釋長度=e.P acket.Data.Length;串 src Ip = tcp .SourceAddres
38、s; 串 dstI p = tcp .DestinationAddress;Console.WriteLine(“0 : 1 : 2,3 4 長度=”time.Hour ,time.Minute ,time.Second,len 個);(e.P acket.ToStringtime.MillisecondConsole.WriteLine0);如果你在看一個 UDP的例子原WinPcap 是一個簡單的TCP解析位比在我們的例子)教程,你將看到它是多么復雜的報文解析(雖然 UDP 提供直接從數(shù)據(jù)字節(jié)的原始WinP ca p的庫。幸運(例如 TCP , UDP 和 ICMP的是,SharpPcap
39、 提供了一些有用的數(shù)據(jù)包進行分析一些常見的協(xié)議和其他)類。這些分析類是直接的 C #最初是從翻譯 JPeap,個lib pea p的Java包裝/ WinPcap 的類似SharpPcap ,但已作岀重大改變,使他們更好地適應。和生成可以發(fā)現(xiàn),在PacketDotNet 命名空間中NET中。所有代碼的數(shù)據(jù)包解析PacketDotNet 大會。正如你可以看到,在我們的包處理,我們首先嘗試提取的 果一個人發(fā)現(xiàn)了,它應該是唯一的選擇,因為我們的 性。如果我們也希望看到的IP數(shù)據(jù)包通過這些屬性是可以訪問Ip Packet.GetE neap sulated(e.Packet);TCP報文的那包就行了捕
40、獲封裝。如TCP數(shù)據(jù)包過濾器,我們就可以訪問其屬var ip =pColla pse |Copy Code可用設備:1 )英特爾(R) P RO/1000 噸移動連接(微軟的數(shù)據(jù)包調度程序)請選擇一個設備捕捉:1英特爾聽力(R)的PRO/1000 噸移動連接(微軟的數(shù)據(jù)包調度程序).長度=123 47:80 -長度=80 1:43501 -1:18:17,6751:18:17,675> “1:43501> “47:801:18:17,919長度=54 47:80 -> “10.
41、21.98.21:43501最后三個行,每行代表一個不同的數(shù)據(jù)包。脫機處理轉儲文件(例如,在源碼包8)在本節(jié)中,我們將學習如何處理數(shù)據(jù)包捕獲到一個文件(轉儲到文件)。Lib pea p的/ WinP cap的提供內置的保存到一個文件中的網絡通信功能和讀取的轉儲內容-這部分將教你如何完成與Sharp Pca p這一點。為轉儲文件的格式是lib pea p的一個。這種格式包含了二進制數(shù)據(jù)捕獲的數(shù)據(jù)包的形式,廣泛應用于許多網絡工具,包括的wireshark , windump , tcpdump 和snort的使用標準。因此,任何轉儲文件中,我們創(chuàng)建使用Shar pP ca p可與上述工具和其他人可
42、以通過這些工具創(chuàng)建的文件Shar pPcap打開任何打開。保存數(shù)據(jù)包轉儲文件首先,讓我們來看看如何寫lib pca p文件格式的數(shù)據(jù)包。下面的示例捕獲從選定的接口的數(shù)據(jù)包并將其保存在一個文件的名稱是由用戶提供他們:pColla pse |Copy CodeConsole.Write(“-請輸入輸出文件名:”;串 cap File = Console.ReadLineICap tureDevice設備=Cap tureDeviceList.lnstance 我;/ /注冊的處理函數(shù)的包到來的事件device.O nP acketArrival + =新 Sharp Pcap.P acketArr
43、ivalEventHandler(device_OnPacketArrival/ /打開設備捕捉詮釋 readTimeoutMilliseconds =1000;device.Open( DeviceMode.Promiscuous,readTimeoutMilliseconds/ /打開或創(chuàng)建一個捕獲輸岀文件device.Du mpOpen(capFile);Console.WriteLineConsole.WriteLine();(“-. 監(jiān)聽0,按按 Ctrl - c'來退出”device.Descri ption!-Console.Write ( “ -請輸入一個輸入捕捉文件名
44、:”;/ /開始捕獲無限期device.Capture();/ /關閉PcaP的設備/ /(注:這條線將永遠不會被調用,因為/ /我們永遠捕捉device.Close ();這里是包處理程序,將每一個收到的數(shù)據(jù)包轉儲到文件中:ElColla pse |Copy Code摘要每次接收的數(shù)據(jù)包轉儲到一個pcap/摘要的文件/ / /私有靜態(tài)無效 device_OnPacketArrival對象發(fā)件人,CaptureEventArgs 包)ICap tureDevice 設備=(ICa ptureDevice/ /如果設備有一個轉儲文件打開女果(device.Du mpOp ened )/ /數(shù)據(jù)包
45、轉儲到文件device.Dump (包);Console.WriteLine(數(shù)據(jù)包轉儲到文件中?!?寄件人;正如你可以看到,該方案的結構非常相似,我們在前面的章節(jié)中看到的。區(qū)別是:調用device.Du mpOpen(cap File)發(fā)岀一旦接口被打開。此調用打開與接口轉儲文件和關聯(lián)。數(shù)據(jù)包寫入該文件以device.Du mp( packet )個使用發(fā)送者的對象參數(shù)傳遞給包處理程序回調是投處理程序調用的數(shù)據(jù)包。請注意一ICa ptureDevice 。從轉儲文件中讀數(shù)據(jù)包WinPcap 的現(xiàn)在,我們有一個轉儲文件可用,我們可以嘗試讀取其內容。下面的代碼打開一個/ lib pea p的轉儲
46、文件并顯示文件中的每個數(shù)據(jù)包。該SharpPcap.OfflineCaptureDevice(capFile)類是一個 ICaptureDevice對象,表示脫機捕獲文件,我們讀到,那么通常On PacketArrival事件中使用的數(shù)據(jù)包按順序。正如你可以看到,從脫機閱讀捕獲數(shù)據(jù)包幾乎是相同的,以期得到一個物理接口它們:pColla pse |Copy Code!-串 cap File = Console.ReadLineICap tureDevice裝置;嘗試/ /得到一個脫機文件pcap的設備設備=新 OfflineCa ptureDevice/ /打開設備捕捉(capFile);dev
47、ice.Open();趕上(例外五)Console.WriteLine(e.Message返回;/ /注冊的處理函數(shù)的包到來的事件device.O nP acketArrival + =(device_OnPacketArrival新 Sharp Pcap.P acketArrivalEventHandlerConsole.WriteLineConsole.WriteLine(“-捕獲'0',按'按 Ctrl - C'退出.”cap File);/ /開始捕獲的數(shù)據(jù)包數(shù)量不定device.Ca pture/ / 關閉Pcap的設備device.CloseCons
48、ole.WriteLine0 ;(“-文件結束為止。”);開業(yè)后適配器,Sen dPacket發(fā)送數(shù)據(jù)包(例如,在源碼包 9)調用來最簡單的方法來發(fā)送一個數(shù)據(jù)包顯示在下面的代碼片段。發(fā)送一個手工制作的數(shù)據(jù)包。Se ndPacket 作為參數(shù)的字節(jié)數(shù)組或Packet 對象,它包含的數(shù)據(jù)被發(fā)送。請注意,緩沖區(qū)發(fā)送到網絡中,它已收到。這意味著應用程序必須創(chuàng)建正確的協(xié)議頭,以送一些有意義的事:目 Colla pse |Copy Code/ /打開設備device.Open();/ /生成一個隨機分組字節(jié) 字節(jié)=GetRandomPacket();嘗試(字節(jié));“-包發(fā)送成功?!保?;/ /發(fā)送數(shù)據(jù)包的網
49、絡設備岀Console.WriteLinedevice.Send Packet趕上(例外五)Console.WriteLine”+ e.Message );/ /關閉PcaP的設備 device.Close ();Console.WriteLine“-設備關閉?!保?;發(fā)送隊列-Win Pcap的專用的擴展(例如,在源碼包 10)雖然SendPacket 提供了一個簡單而直接的方法來發(fā)送一個數(shù)據(jù)包, 發(fā)送隊列提供了一個先 進,強大和優(yōu)化機制,寄包集合。發(fā)送隊列是一個一將數(shù)據(jù)包發(fā)送到網絡變量的容器。 它有大小, 它代表的字節(jié)可以存儲的最大數(shù)量。由于SendQueue WinPcap 的具體功能是,
50、作者建議的SharpPcap 基準特定使用您的發(fā)送隊 列發(fā)送數(shù)據(jù)包,以確定如果損失跨平臺支持的使用效率是值得的補充。一句老話,避免過早優(yōu)化”應該慎重考慮。SharpPcap 代表發(fā)送隊列使用 SendQueue類,這是通過指定構造隊列的大小,新的發(fā)送。一旦發(fā)送隊列的創(chuàng)建,Sen dQueue.AddO可以被調用時,添加一個數(shù)據(jù)包的發(fā)送隊列。這個函數(shù)接受一個PcapHeader 與數(shù)據(jù)包的時間戳和長度和一個緩沖或Packet分組數(shù)據(jù)對象持有的。這些參數(shù)是由收到相同的On PacketArrival事件,因此排隊一個數(shù)據(jù)包從剛剛抓獲了一名或讀文件是傳遞參數(shù)的問題這些Sen dQueue.Add()
51、要發(fā)送發(fā)送隊列,SharpPcap 提供 WinPcapDevice.SendQueue(SendQueue q,Sen dQueueTra nsmitModes tran smitMode)功能。請注意第二個參數(shù):如果SendQueueTransmitModes.Synchronized,發(fā)送將被 同步,即數(shù)據(jù)包的相對時間戳將得到尊重。此操作需要非凡的CPU數(shù)量,因為同步需要在內核中使用忙等待”循環(huán)趕車。盡管這個操作是相當?shù)?CPU密集型的,它往往在非常高的精度的數(shù)據(jù)包傳輸?shù)慕Y果(經常在以下 幾微秒)。請注意,轉遞發(fā)送隊列WinPcap Device.Se ndQueue()能更有效的不是執(zhí)
52、行一系列ICa ptureDevice.Se ndPacket()由于發(fā)送量在內核隊列緩沖交換機數(shù)量急劇減少的情況。是釋放所有的隊列發(fā)送緩沖區(qū)當不再需要排隊,它可以被刪除的Sen dQueue.Dis pose()與。下一個程序顯示了如何使用發(fā)送隊列。它打開通過創(chuàng)建一個捕獲文件在這一點上,Offli neCa ptureDevice()那么它存儲文件的數(shù)據(jù)包從發(fā)送到正確分配隊列。它傳輸隊列同步。請注意,鏈路層的轉儲文件是比一的接口,將數(shù)據(jù)包發(fā)送使用Pca pDevice.DataLi nk產,并打印一個警告,如果它們是不同的-這是很重要的捕獲文件的鏈接層是作為適配器的,否則傳輸鏈路層一樣是毫無意義的:pColla pse |Copy CodeICaptureDevice裝置;嘗試 / /得到一個脫機文件pcap的設備設備=新 OfflineCa ptureDevice( cap File );/ /打開設備捕捉device.Open();趕上(例外五)Consol
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 冷漆標線合同范本
- 出售新舊彩鋼瓦合同范例
- 2024年蕪湖無為市投資促進發(fā)展有限公司招聘考試真題
- led電源合同范本
- 公司購銷合同范本
- 2024年清遠英德市市區(qū)學校選調教師(編制)考試真題
- 個人買賣定金合同范本
- 五人合伙工程合同范本
- 交通類ppp合同范本
- 代簽銷售合同范本
- 如何發(fā)揮好辦公室協(xié)調、督導、服務職能
- 部隊安全教育教案大全
- 交易商協(xié)會非金融企業(yè)債務融資工具發(fā)行注冊工作介紹
- 《人與環(huán)境》課程教學大綱
- 班組長管理能力提升培訓(PPT96張)課件
- 深圳市城市用地分類表
- 法蘭蝶閥螺栓配用表
- 垃圾中轉站施工方案及施工方法
- 內蒙古自治區(qū)小額貸款公司試點管理實施細則
- 勞務分包入住生活區(qū)承諾書
- 直系親屬關系證明(存根)(共1頁)
評論
0/150
提交評論