SharpPcap-中文開發(fā)全攻略_第1頁
SharpPcap-中文開發(fā)全攻略_第2頁
SharpPcap-中文開發(fā)全攻略_第3頁
SharpPcap-中文開發(fā)全攻略_第4頁
SharpPcap-中文開發(fā)全攻略_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、簡(jiǎn)介包捕獲(或數(shù)據(jù)包嗅探)是收集數(shù)據(jù),通過特定的網(wǎng)絡(luò)接口將所有數(shù)據(jù)包的過程。在我們的應(yīng)用程序捕獲網(wǎng)絡(luò)數(shù)據(jù)包是一個(gè)強(qiáng)大的能力,它可以讓我們寫網(wǎng)絡(luò)監(jiān)控,數(shù)據(jù)包分析器和安全工具。本的libpcap庫和基于UNIX系統(tǒng)WinPcap的用于Windows是最廣泛使用的數(shù)據(jù)包捕獲驅(qū)動(dòng)程序監(jiān)視API提供低級(jí)別的網(wǎng)絡(luò)。其中應(yīng)用程序使用的libpcap/WinPcap的包捕獲子系統(tǒng)為是著名的tcpdump的和Wireshark的。在這篇文章中,我們將介紹SharpPcapWinPcap的從您的。NET應(yīng)用程序。)NET程序集(庫接口與libpcap的或并會(huì)給你一個(gè)詳細(xì)的方案編制教程教你如何使用。背景塔米爾加爾在

2、2004年左右開始的SharpPcap項(xiàng)目。他想用在。NET應(yīng)用WinPcap而在他的大學(xué)最后項(xiàng)目的工作。該項(xiàng)目涉及VoIP流量分析和解碼,他想繼續(xù)用C#編碼具有省時(shí),如垃圾收集功能簡(jiǎn)單。WinPcap的API的訪問似乎從凈是相當(dāng)流行的要求,他發(fā)現(xiàn)在CodeProject上的一些網(wǎng)站,讓您做到這一點(diǎn)有益的項(xiàng)目。:數(shù)據(jù)包捕獲和分析儀原始套接字捕獲使用C#與WinPcap的包嗅探功能移植到。NET庫第一個(gè)項(xiàng)目是一個(gè)偉大的空靈。NET的克隆,讓您獲取和分析大量的數(shù)據(jù)包的協(xié)議類型。然而,隨著這個(gè)項(xiàng)目的幾個(gè)問題使它幾乎不可能得到在其他。NET應(yīng)用程序共享。首先,作者沒有提供用于捕獲,可以通過其他。NET

3、應(yīng)用程序中使用任何通用的API包。他沒有單獨(dú)的UI代碼和他的分析和捕獲的代碼,使他的捕捉代碼類依賴于圖形用戶界面,如ListView操作。其次,由于某些原因,筆者選擇了重新實(shí)現(xiàn)在C#由他本人,而不是僅僅WinPcap的包裝他們的部分職能。這意味著他的應(yīng)用程序無法利用新的WinPcap的版本的硬編碼的優(yōu)勢(shì),因?yàn)樗谒腤inPcap的應(yīng)用程序的某些版本。第二個(gè)和第三個(gè)物品的包裝項(xiàng)目為WinPcap的好開始,但他們沒有提供一些重要的WinPcap的功能,如離線pcap的文件處理和應(yīng)用內(nèi)核級(jí)數(shù)據(jù)包過濾器,以及最重要的是他們提供了這樣的分析沒有協(xié)議分析器類包。這兩個(gè)項(xiàng)目沒有張貼的文章,以自己的庫的源代

4、碼,讓其他人一起延長(zhǎng)他們的工作和增加新功能和新的數(shù)據(jù)包分析器類。因此,塔米爾決定開始他對(duì)自己的圖書館工作。在系列的幾個(gè)版本發(fā)布。發(fā)展放緩對(duì)2007年年中時(shí),在系列的最后一個(gè)版本發(fā)布時(shí),SharpPcap??死锼鼓Ωl(fā)生在2008年11月超過SharpPcap發(fā)展。從那時(shí)起SharpPcap主要內(nèi)部已重寫和AP改進(jìn)。2010年2月下旬,SharpPcap被釋放。此版本是一個(gè)重寫SharpPcap的數(shù)據(jù)包分析器。分組分析功能被打破,進(jìn)入一個(gè)新的圖書館,。SharpPcap注意到與libpcap的/WinPcap的包和注意到接口解剖和創(chuàng)造護(hù)理照顧。對(duì)的建筑的細(xì)節(jié)將在本教程的后面討論。SharpPca

5、p版本發(fā)布了2月1日,2011年。版本包含重大的空氣污染指數(shù)的變化以及WinPcap的遠(yuǎn)程采集和支持AirPcap。關(guān)于SharpPcap的目的SharpPcap是提供一個(gè)框架NET應(yīng)用程序捕獲,注資。和分析網(wǎng)絡(luò)數(shù)據(jù)包。SharpPcap是公開和積極發(fā)展同它的源代碼和文件發(fā)布在SourceForge托管。源代碼補(bǔ)丁,以改善或解決問題歡迎通過sharppcap開發(fā)者郵件列表。錯(cuò)誤報(bào)告,功能要求和其他查詢正在積極回答問題的論壇和跟蹤支持,所以如果你有任何問題請(qǐng)與庫隨時(shí)問。SharpPcap是一個(gè)完全跨平臺(tái)的庫管理。同一程序集運(yùn)行在微軟的。NET以及單在32位和64位平臺(tái)。下面的列表說明了目前Sha

6、rpPcap功能支持:?jiǎn)我唤M件的Microsoft。NET和Mono平臺(tái)上的Windows(32位或64位)和Linux(32或64位)和Mac。高性能-SharpPcap可以捕捉足夠快跟上的3MB/s的傳輸速率高達(dá)SCP的WinPcap的擴(kuò)展部分支持:o設(shè)置內(nèi)核緩沖區(qū)大小o注射用的數(shù)據(jù)包發(fā)送隊(duì)列。o收集在一個(gè)特定的網(wǎng)絡(luò)接口的網(wǎng)絡(luò)統(tǒng)計(jì)AirPcap支持枚舉和顯示有關(guān)Windows機(jī)器上的物理網(wǎng)絡(luò)接口的細(xì)節(jié)。捕獲低級(jí)別的網(wǎng)絡(luò)數(shù)據(jù)包將通過給定的接口。分析和解析以下協(xié)議:o以太網(wǎng)o血清瘦素(Linux的熟食方式采集)oARP(地址解析協(xié)議)oIP(因特網(wǎng)協(xié)議):IPv4的IPv6的oTCP(傳輸控制

7、協(xié)議)oUDP(用戶數(shù)據(jù)報(bào)協(xié)議)oICMP協(xié)議(Internet控制消息協(xié)議):ICMPv4ICMPv6報(bào)oIGMPv2的oPPPoE協(xié)議o和平之路oLLDP功能o喚醒局域網(wǎng)(網(wǎng)絡(luò)喚醒)在給定接口注入的低級(jí)別的網(wǎng)絡(luò)數(shù)據(jù)包。處理(閱讀和寫作)離線數(shù)據(jù)包捕獲文件。檢索的數(shù)據(jù)包接收適配器統(tǒng)計(jì)對(duì)比下降請(qǐng)檢查項(xiàng)目主頁主頁最新的更新和bug修復(fù)。SharpPcap架構(gòu)SharpPcap具有層狀結(jié)構(gòu),在頂層的類,所有設(shè)備的工作:CaptureDeviceList-檢索系統(tǒng)名單上的所有設(shè)備OfflineCaptureDevice-文件讀取裝置從一個(gè)pcap的捕捉ICaptureDevice-所有的捕捉設(shè)備有I

8、CaptureDevice接口該命名空間的布局層次:libpcap的oLibPcapLiveDevice-一個(gè)ICaptureDeviceoLibPcapLiveDeviceList-檢索一個(gè)名單LibPcapLiveDevice設(shè)備(其中包括pcap的/WinPcap的和airpcap設(shè)備)WinPcap的oWinPcapDeviceList-檢索一個(gè)名單WinPcapDevices(其中包括WinPcap的和airpcap設(shè)備)oWinPcapDevice-阿LibPcapLiveDevice額外WinPcap的功能和接口AirPcapoAirPcapDeviceList-檢索一個(gè)名單Ai

9、rPcapDevicesoAirPcapDevice-阿WinPcapDevice額外AirPcap功能和接口返回一個(gè)設(shè)備清單完全分化。這意味著每個(gè)ICaptureDevice由歸國(guó)CaptureDeviceList要么是LibPcapLiveDeviceWinPcapDevice或AirPcapDevice。這使您可以檢索整個(gè)列表的設(shè)備和差異化在每個(gè)設(shè)備類型看。如果你想獲得一個(gè)特定的特定類型的設(shè)備只,你可以使用一個(gè)*DeviceList類。Collapse|CopyCodeEl切換從到SharpPcap繼承模型的嵌套包之一。所有的數(shù)據(jù)包包含一個(gè)PacketPayloadPacket屬性和一個(gè)

10、Byte口PayloadData財(cái)產(chǎn)。一個(gè)或多個(gè)這些都不能有效。以太網(wǎng)上的TCP數(shù)據(jù)包捕獲的可能EthernetPacket->IPv4包->"TC煎據(jù)包。在時(shí),TCP數(shù)據(jù)包可能被訪問一樣而是要幫助用戶從staticGetEncapsulsted()方法被添力口,因此用戶可以做的vartcpPacket=(capturedPacket);。該GetEncapsulated()方法是很聰明,設(shè)計(jì)工作在許多不同的情況。()將返回EthernetPacketUDP包的數(shù)據(jù)包,包括->IP數(shù)據(jù)包"->UdpPacket或Linux熟捕捉->知識(shí)產(chǎn)權(quán)&q

11、uot;->UdpPacket或EthernetPacket->的PPPoE->”和平之路->知識(shí)產(chǎn)權(quán)->"UdpPacket我們建議使用GetEncapsulated()方法來檢索子數(shù)據(jù)包。隨著,建設(shè)包是這樣的:ElCollapse|CopyCode使用PacketDotNet;ushort的tcpSourcePort=123;ushort的tcpDestinationPort=321;風(fēng)險(xiǎn)tcpPacket=新TcpPacket(tcpSourcePort,tcpDestinationPort);風(fēng)險(xiǎn)ipSourceAddress=()'風(fēng)險(xiǎn)

12、ipDestinationAddress=()'風(fēng)險(xiǎn)ipPacket=新IPv4Packet(ipSourceAddress,ipDestinationAddress);風(fēng)險(xiǎn)sourceHwAddress="9090-90-90-90-90”;風(fēng)險(xiǎn)ethernetSourceHwAddress=(sourceHwAddress);風(fēng)險(xiǎn)destinationHwAddress="8080-80-80-80-80”;風(fēng)險(xiǎn)ethernetDestinationHwAddress=(destinationHwAddress);子可以發(fā)現(xiàn),在示例/包目錄源。本教程的文本,這是

13、直接取自WinPcap的的官方教程,但修改以顯示C#中使用SharpPcap庫。所有的例子可以下載連同SharpPcap此網(wǎng)頁的源代碼從頂部。如果您是Windows上運(yùn)行,WinPcap的庫必須安裝運(yùn)行的例子,然后再嘗試任何這些,所以請(qǐng)下載并安裝最新版本的WinPcap的的下載頁面。如果Mac運(yùn)行在Unix/Linux/時(shí),libpcap庫必須安裝使用你的系統(tǒng)軟件管理系統(tǒng)。涵蓋以下主題在這方面與在括號(hào)中的實(shí)例名稱教程:1 .獲取設(shè)備列表(例1)2 .打開適配器并捕獲數(shù)據(jù)包(示例3)3 .4)捕獲的數(shù)據(jù)包,但無事件(例4 .過濾流量(例5)5 .解讀包(例6)6 .脫機(jī)處理轉(zhuǎn)儲(chǔ)文件(例8)7 .

14、發(fā)送數(shù)據(jù)包(例9)8 .發(fā)送隊(duì)列(例10)-WinPcap的唯一9 .11)收集統(tǒng)計(jì)數(shù)據(jù)在網(wǎng)絡(luò)上的流量(例如-WinPcap的唯一10 .后臺(tái)處理數(shù)據(jù)包隊(duì)列-高封包捕獲率獲取設(shè)備列表(例如,在源碼包1)通常,第一個(gè)事,一個(gè)SharpPcap為基礎(chǔ)的應(yīng)用程序是得到一個(gè)連接的網(wǎng)絡(luò)適配器的列表。SharpPcap提供了一個(gè)類,CaptureDeviceList用于這一目的。這個(gè)類是一個(gè)單實(shí)例,持有型緩存網(wǎng)絡(luò)適配器列表ICaptureDevice。特別是,Name和Description屬性包含人類可讀的名稱和描述,分別對(duì)相應(yīng)的設(shè)備。下面的C#示例顯示了如何檢索適配器列表和打印在屏幕上,印刷錯(cuò)誤,如果

15、沒有適配器發(fā)現(xiàn):-Collapse|CopyCode(點(diǎn)擊輸入退出.)”;。;上述應(yīng)用程序的輸出會(huì)是這樣的:-Collapse|CopyCode?:實(shí)例'目錄調(diào)試">SharpPcap,以下是這臺(tái)機(jī)器上的設(shè)備可供選擇:接口:名稱:DeviceNPF_D8B7c9B2-D53D-45DA-ACF0-2E2116F97314的FriendlyName:局域網(wǎng)連接2描述:英特爾(R)PRO/1000MT臺(tái)式機(jī)適配器地址:地址:為fe80:b444:92d8:c882:8227網(wǎng)絡(luò)掩碼:Broadaddr:地址:地址:網(wǎng)絡(luò)掩碼:Broadaddr:地址:地址:硬件地址:0800

16、276AC792標(biāo)志:0按'Enter'鍵退出.打開一個(gè)適配器和捕獲數(shù)據(jù)包(例如,在源碼包3)現(xiàn)在,我們已經(jīng)看到了如何獲得一個(gè)適配器一起玩,讓我們開始真正的工作,打開適配器并捕獲一些交通。在本節(jié)中,我們將編寫一個(gè)程序,打印一些通過適配器每個(gè)數(shù)據(jù)包信息流。該函數(shù)打開一個(gè)捕獲裝置是Open()重載是如下一些論據(jù):Open()Open(DeviceModemode)Open(DeviceModemode,intread_timeout)以上兩個(gè)論點(diǎn)值得一些進(jìn)一步的解釋。:在正常模式(),網(wǎng)絡(luò)適配器只捕獲的數(shù)據(jù)包直接解決它;在網(wǎng)絡(luò)上的其他主機(jī)的數(shù)據(jù)包交換的被忽略。相反,當(dāng)適配器(處于混

17、雜模式),它捕獲所有的數(shù)據(jù)包不管是不是注定它或。這意味著,在共同的媒介(如非交換以太網(wǎng)),libpcap的/WinPcap的將能夠捕捉到其他主機(jī)的數(shù)據(jù)包?;祀s模式是應(yīng)用程序的默認(rèn)大多數(shù)捕捉,所以我們能夠例如它在以下方面:。注意混雜模式,可以通過網(wǎng)絡(luò)檢測(cè)手段,如果你是在混雜模式捕獲您可能能夠被檢測(cè)到其他實(shí)體在網(wǎng)絡(luò)上。搜索發(fā)現(xiàn)混雜”通過獲取更多信息網(wǎng)上搜索引擎。:指定讀取超時(shí)毫秒,在。一個(gè)讀了適配器(例如,使用GetNextPacket()函數(shù))將總是返回后read_timeout毫秒,即使沒有數(shù)據(jù)包網(wǎng)絡(luò)可從。read_timeout還定義統(tǒng)計(jì)報(bào)告之間的間隔如果適配器模式在統(tǒng)計(jì)(見在網(wǎng)絡(luò)流量收集統(tǒng)

18、計(jì)數(shù)據(jù)的部分)。設(shè)置read_timeout以0表示沒有超時(shí),數(shù)據(jù)包到達(dá)一個(gè)適配器上的閱讀永遠(yuǎn)不會(huì)返回,如果沒有。甲-1方超時(shí)而導(dǎo)致適配器讀取上總是立即返回。下面的例子顯示了使用OnPacketArrival事件接收數(shù)據(jù)包。我們創(chuàng)建一個(gè)事件處理程序被稱為每當(dāng)一個(gè)新的包是經(jīng)歷ICaptureDevice:-Collapse|CopyCode('-監(jiān)聽0,按'回車停止”,);/等待回車'從用戶。;m旦適配器被打開,可以開始捕捉與StartCapture()或Capture(intpacketCount)功能。這兩個(gè)函數(shù)非常相似,所不同的是StartCapture()是一個(gè)非

19、阻斷功能,啟動(dòng)新的線程捕獲進(jìn)程A,而Capture(intpacketCount)直至塊packetCount包已被抓獲。當(dāng)使用StartCapture()我們應(yīng)該以后調(diào)用StopCapture()終止捕獲過程。為了捕捉下去,調(diào)用Capture。方法。這些功能都需要一個(gè)用于處理數(shù)據(jù)包的事件處理程序調(diào)用它們前登記。此事件處理程序調(diào)用ICaptureDevice為每個(gè)新的網(wǎng)絡(luò)數(shù)據(jù)包,并接收來自發(fā)送者對(duì)象,調(diào)用該處理程序(即ICaptureDevice對(duì)象)和實(shí)際收到的Packet,包括所有的協(xié)議頭。請(qǐng)注意該幀的CRC通常不會(huì)在報(bào)文中,因?yàn)樗怯煽蚣茯?yàn)證后的網(wǎng)絡(luò)適配器中刪除。還要注意的是大多數(shù)適配器

20、丟棄錯(cuò)誤的CRC所以WinPcap的包(因此SharpPcap)通常無法捕捉他們。該P(yáng)acket類表示一個(gè)通用分組網(wǎng)絡(luò)捕捉到的。每一個(gè)這樣的數(shù)據(jù)包有一個(gè)PcapHeader的TIMESTAMP屬性包含了捕獲的數(shù)據(jù)包的長(zhǎng)度和捕獲)的有關(guān)數(shù)據(jù)包信息(例如。上面的例子中提取和長(zhǎng)度從每一個(gè)時(shí)間戳Packet對(duì)象,并打印在屏幕上。請(qǐng)注意,處理程序代碼是由所謂的ICaptureDevice,因此,用戶應(yīng)用程序沒有在它的直接控制。另一種方法是使用GetNextPacket()函數(shù),它在未來的一段介紹。如果沒有事件處理程序(例如,在源碼包4)捕獲數(shù)據(jù)包在本節(jié)中的示例程序中的行為完全像前面的示例,但它使用()事

21、件處理方法,而不是注冊(cè)一個(gè)。該OnPacketArrival事件是一個(gè)很好的做法,可在一次捕捉設(shè)備從幾個(gè)不錯(cuò)的選擇在這樣一些情況,因?yàn)楫?dāng)。但是,處理回調(diào)有時(shí)并不實(shí)用-它往往使得程序更加復(fù)雜,特別是在多線程應(yīng)用程序的情況。在這種情況下,GetNextPacket()檢索直接調(diào)用一個(gè)包,-使用GetNextPacket()數(shù)據(jù)包只收到當(dāng)程序員想用它們。在下面的程序,我們重新使用以前的示例中的事件處理程序代碼和移動(dòng)循環(huán)它成一個(gè)函數(shù)調(diào)用后立即在主要以GetNextPacket()注意:下面的例子將退出如果MS超時(shí)到期的1000網(wǎng)絡(luò)上沒有數(shù)據(jù)包:-Collapse|CopyCode('-.&qu

22、ot;監(jiān)聽0,);分組包=0;('-捕捉停止,裝置關(guān)閉?!保?過濾交通(例如在源碼包5)由libpcap和WinPcap的提供了最強(qiáng)大的功能之一就是過濾引擎。它提供了非常有效的方式來接收網(wǎng)絡(luò)流量的子集。WinPcap的和libpcap擁有一個(gè)完整的編譯器,它接受一個(gè)string包含一個(gè)高層次的布爾(過濾器)的表達(dá),并產(chǎn)生一個(gè)低級(jí)別的字節(jié)代碼,可以通過數(shù)據(jù)包捕獲驅(qū)動(dòng)程序解釋的過濾器的發(fā)動(dòng)機(jī)。作為tcpdump的布爾語法)表達(dá)式的語法(也稱為被廣泛用于許多應(yīng)用的libpcap和WinPcap的除外。你可以找到它的規(guī)格在WinPcap的文檔頁面,或者如果您運(yùn)行的是通過Linux的人pcap的

23、過濾器。該Filter屬性相關(guān)聯(lián)過濾器,捕捉器。一旦Filter設(shè)置,相關(guān)的過濾器將被應(yīng)用到所有的數(shù)據(jù)包來自于網(wǎng)絡(luò),所有的符合性的數(shù)據(jù)包(即包為其布爾表達(dá)式的值為true)將實(shí)際復(fù)制到應(yīng)用程序。下面的代碼演示如何編譯和設(shè)置過濾器。請(qǐng)注意的libpcap/WinPcap的的表達(dá)式編譯器要求掩碼由ICaptureDevice傳遞連同過濾器,因?yàn)榫幾g器創(chuàng)建的一些過濾器需要它。然而SharpPcap需要通過自動(dòng)提取從適配器掩碼它照顧我們?!癐PF口 TCP ,這意味著 只保留數(shù)據(jù)包是IPv4和TCP該過濾器的表達(dá)我們?cè)谙旅娴拇a片段使用和提供這些應(yīng)用程序”:- Collapse|CopyCode(&#

24、39;-監(jiān)聽0,按'回車停止”,);在,我們能夠捕捉和過濾網(wǎng)絡(luò)流量,我們希望把我們的知識(shí),可以用一個(gè)簡(jiǎn)單的真實(shí)世界”的申請(qǐng)。在這一課,我們將采取從前面的代碼,并使用這些作品建立一個(gè)更加有用的程序。當(dāng)前計(jì)劃的主要目的是展示如何捕獲的數(shù)據(jù)包的協(xié)議頭可以解析和解釋。由此產(chǎn)生的程序,名字叫DumpTCP,打印網(wǎng)絡(luò)摘要對(duì)我們的TCP流量。我選擇了解析和顯示TCP協(xié)議(UDP的例子,而不是在原來的教程貼),因?yàn)樗且粋€(gè)更加有趣比UDP和SharpPcap它不需要太多的編碼解析。- Collapse|CopyCode果你在看一個(gè)UDP的例子原WinPcap教程,你將看到它是多么復(fù)雜的報(bào)文解析(雖然U

25、DP是一個(gè)簡(jiǎn)單的TCP解析位比在我們的例子)提供直接從數(shù)據(jù)字節(jié)的原始WinPcap的庫。幸運(yùn)的是,SharpPcap提供了一些有用的數(shù)據(jù)包進(jìn)行分析一些常見的協(xié)議(例如TCP,UDP和ICMP和其他)類。這些分析類是直接的C#最初是從翻譯JPcap,一個(gè)libpcap的Java包裝/WinPcap的類似SharpPcap,但已作出重大改變,使他們更好地適應(yīng)。NET中。所有代碼的數(shù)據(jù)包解析和生成可以發(fā)現(xiàn),在PacketDotNet命名空間中PacketDotNet大會(huì)。正如你可以看到,在我們的包處理,我們首先嘗試提取的TCP報(bào)文的那包就行了捕獲封裝。如果一個(gè)人發(fā)現(xiàn)了,它應(yīng)該是唯一的選擇,因?yàn)槲覀兊?/p>

26、TCP數(shù)據(jù)包過濾器,我們就可以訪問其屬性。如果我們也希望看到的IP數(shù)據(jù)包通過這些屬性是可以訪問varip=;口Collapse|CopyCode可用設(shè)備:1)英特爾(R)PRO/1000噸移動(dòng)連接(微軟的數(shù)據(jù)包調(diào)度程序)- 請(qǐng)選擇一個(gè)設(shè)備捕捉:1- 英特爾聽力(R)的PRO/1000噸移動(dòng)連接- (微軟的數(shù)據(jù)包調(diào)度程序)1:18:17,675長(zhǎng)度=123->1:18:17,675長(zhǎng)度=80->“1:18:17,919長(zhǎng)度=54->“最后三個(gè)行,每行代表一個(gè)不同的數(shù)據(jù)包。脫機(jī)處理轉(zhuǎn)儲(chǔ)文件(例如,在源碼包8)在本節(jié)中,我們將學(xué)習(xí)如何處理數(shù)據(jù)包捕獲到一個(gè)文件(轉(zhuǎn)儲(chǔ)到文件)。Libp

27、cap的/WinPcap的提供內(nèi)置的保存到一個(gè)文件中的網(wǎng)絡(luò)通信功能和讀取的轉(zhuǎn)儲(chǔ)內(nèi)容-這部分將教你如何完成與SharpPcap這一點(diǎn)。為轉(zhuǎn)儲(chǔ)文件的格式是libpcap的一個(gè)。這種格式包含了二進(jìn)制數(shù)據(jù)捕獲的數(shù)據(jù)包的形式,廣泛應(yīng)用于許多網(wǎng)絡(luò)工具,包括的wireshark,windump,tcpdump和snort的使用標(biāo)準(zhǔn)。因此,任何轉(zhuǎn)儲(chǔ)文件中,我們創(chuàng)建使用SharpPcap可與上述工具和其他人可以通過這些工具創(chuàng)建的文件SharpPcap打開任何打開。保存數(shù)據(jù)包轉(zhuǎn)儲(chǔ)文件首先,讓我們來看看如何寫libpcap文件格式的數(shù)據(jù)包。下面的示例捕獲從選定的接口的數(shù)據(jù)包并將其保存在一個(gè)文件的名稱是由用戶提供他們

28、:-Collapse|CopyCode('-請(qǐng)輸入輸出文件名:”);串capFile=();ICaptureDevice設(shè)備=我;('-監(jiān)聽0,按'按Ctrl-c'來退出”);日(數(shù)據(jù)包轉(zhuǎn)儲(chǔ)到文件中?!保?正如你可以看到,該方案的結(jié)構(gòu)非常相似,我們?cè)谇懊娴恼鹿?jié)中看到的。區(qū)別是:調(diào)用(capFile)發(fā)出一旦接口被打開。此調(diào)用打開與接口轉(zhuǎn)儲(chǔ)文件和關(guān)聯(lián)。數(shù)據(jù)包寫入文件以(packet)處理程序調(diào)用的數(shù)據(jù)包。請(qǐng)注意一個(gè)使用發(fā)送者的對(duì)象參數(shù)傳遞給包處理程序回調(diào)是投ICaptureDevice。從轉(zhuǎn)儲(chǔ)文件中讀數(shù)據(jù)包現(xiàn)在,我們有一個(gè)轉(zhuǎn)儲(chǔ)文件可用,我們可以嘗試讀取其內(nèi)容。下面

29、的代碼打開一個(gè)WinPcap的/libpcap的轉(zhuǎn)儲(chǔ)文件并顯示文件中的每個(gè)數(shù)據(jù)包。該(capFile)類是一個(gè)ICaptureDevice對(duì)象,表示脫機(jī)捕獲文件,我們讀到,那么通常OnPacketArrival事件中使用的數(shù)據(jù)包按順序。正如你可以看到,從脫機(jī)閱讀捕獲數(shù)據(jù)包幾乎是相同的,以期得到一個(gè)物理接口它們:口Collapse|CopyCode('-請(qǐng)輸入一個(gè)輸入捕捉文件名:”);串capFile=();ICaptureDevice裝置;嘗試('-捕獲'0',按'按Ctrl-C'退出”capFile);('-文件結(jié)束為止。”);發(fā)送數(shù)據(jù)

30、包(例如,在源碼包9)最簡(jiǎn)單的方法來發(fā)送一個(gè)數(shù)據(jù)包顯示在下面的代碼片段。開業(yè)后適配器,SendPacket調(diào)用來發(fā)送一個(gè)手工制作的數(shù)據(jù)包。SendPacket作為參數(shù)的字節(jié)數(shù)組或Packet對(duì)象,它包含的數(shù)據(jù)被發(fā)送。請(qǐng)注意,緩沖區(qū)發(fā)送到網(wǎng)絡(luò)中,它已收到。這意味著應(yīng)用程序必須創(chuàng)建正確的協(xié)議頭,以送一些有意義的事:3Collapse|CopyCode('-包發(fā)送成功?!保?;趕上(例外五)('-"+);('-設(shè)備關(guān)閉?!保?發(fā)送隊(duì)列-WinPcap的專用的擴(kuò)展(例如,在源碼包10)雖然SendPacket提供了一個(gè)簡(jiǎn)單而直接的方法來發(fā)送一個(gè)數(shù)據(jù)包,發(fā)送隊(duì)列提供了一個(gè)

31、先進(jìn),強(qiáng)大和優(yōu)化機(jī)制,寄包集合。發(fā)送隊(duì)列是一個(gè)一將數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò)變量的容器。它有大小,它代表的字節(jié)可以存儲(chǔ)的最大數(shù)量。由于SendQueueWinPcap的具體功能是,作者建議的SharpPcap基準(zhǔn)特定使用您的發(fā)送隊(duì)列發(fā)送數(shù)據(jù)包,以確定如果損失跨平臺(tái)支持的使用效率是值得的補(bǔ)充。一句老話,避免過早優(yōu)化”應(yīng)該慎重考慮。SharpPcap代表發(fā)送隊(duì)列使用SendQueue類,這是通過指定構(gòu)造隊(duì)列的大小,新的發(fā)送。一旦發(fā)送隊(duì)列的創(chuàng)建,()可以被調(diào)用時(shí),添加一個(gè)數(shù)據(jù)包的發(fā)送隊(duì)列。這個(gè)函數(shù)接受一個(gè)PcapHeader與數(shù)據(jù)包的時(shí)間戳和長(zhǎng)度和一個(gè)緩沖或Packet分組數(shù)據(jù)對(duì)象持有的。這些參數(shù)是由收到相同

32、的OnPacketArrival事件,因此排隊(duì)一個(gè)數(shù)據(jù)包從剛剛抓獲了一名或讀文件是傳遞參數(shù)的問題這些()要發(fā)送發(fā)送隊(duì)歹1J,SharpPcap提供(SendQueueq,SendQueueTransmitModestransmitMode)功能。請(qǐng)注意第二個(gè)參數(shù):如果,發(fā)送將被同步,即數(shù)據(jù)包的相對(duì)時(shí)間戳將得到尊重。此操作需要非凡的CPU數(shù)量,因?yàn)橥叫枰趦?nèi)核中使用忙等待”循環(huán)趕車。盡管這個(gè)操作是相當(dāng)?shù)腃PU密集型的,它往往在非常高的精度的數(shù)據(jù)包傳輸?shù)慕Y(jié)果(經(jīng)常在以下幾微秒)。請(qǐng)注意,轉(zhuǎn)遞發(fā)送隊(duì)列()能更有效的不是執(zhí)行一系列()由于發(fā)送量在內(nèi)核隊(duì)列緩沖交換機(jī)數(shù)量急劇減少的情況。當(dāng)不再需要排隊(duì),

33、它可以被刪除的()是釋放所有的隊(duì)列發(fā)送緩沖區(qū)與。下一個(gè)程序顯示了如何使用發(fā)送隊(duì)列。它打開通過創(chuàng)建一個(gè)捕獲文件OflineCaptureDevice()那么它存儲(chǔ)文件的數(shù)據(jù)包從發(fā)送到正確分配隊(duì)列。在這一點(diǎn)上,它傳輸隊(duì)列同步。請(qǐng)注意,鏈路層的轉(zhuǎn)儲(chǔ)文件是比一的接口,將數(shù)據(jù)包發(fā)送使用財(cái)產(chǎn),并打印一個(gè)警告,如果它們是不同的-這是很重要的捕獲文件的鏈接層是作為適配器的,否則傳輸鏈路層一樣是毫無意義的:-Collapse|CopyCodeICaptureDevice裝置;嘗試(排隊(duì)包)”;(int)的(OfflineCaptureDevice)設(shè)備)PcapFileSize);分組包;嘗試并非所有的數(shù)據(jù)包將

34、被發(fā)送?!保?打破;趕上(例外五)。;返回;(行”);。;(以下設(shè)備機(jī)可在本:”);");。;詮釋我=0;=VaR的裝置;我=整數(shù))。解析()。器件我開放();串分別;如果(器件我。PcapDataLink!=)(警告:捕獲數(shù)據(jù)鏈的"+不同于接口一個(gè)選定,continueYES|no");resp=().ToLower();if(resp!="")&&(!("y")("Cancelledbyuser!");devicesi.Close();返回;oLower();if(resp!=&quo

35、t;")&&(!("y")("Cancelledbyuser!");返回;嘗試("Sendingpackets.");intsent=(squeue,;("Done!");if(sent<("Anerroroccurredsendingthepackets:0."Only1bytesweresentn",sent);catch(Exceptione)("Error:"+);););GatheringStatisticsontheNet

36、workTraffic-WinPcapOnly(Example11intheSourcePackage)Adapterstatisticsareavailablebycallingtheproperty.TheStatisticspropertyissupportedbyallICaptureDevicetypes.WinPcaphasastatisticsextensionthatprovidesstatisticscallbacksthatcanbemoreefficientthanretrievingdevicestatisticsoverandover.WinPcap'ssta

37、tisticalenginemakesuseofthekernel-levelpacketfiltertoefficientlyclassifytheincomingpacket.YoucantakealookattheNPFdriverinternalsmanualifyouwanttolearnmoreaboutthedetails.Inordertousethisfeature,theprogrammermustopenanadapterandputitinstatisticalmode.Thiscanbedonebysettingtheproperty.Inparticular,the

38、propertyshouldbesetto.Withthestatisticalmode,makinganapplicationthatmonitorstheTCPtrafficloadisamatterofafewlinesofcode.Thefollowingsampleshowshowtodothis:Collapse|CopyCode.".;0;);Andoureventhandlerwillprintthestatistics:Collapse|CopyCodestaticintoldSec=0;staticintoldUsec=0;intdelay=-oldSec)*1000000-oldUsec+;/*Get

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論