pcap_open 和 pcap_open_live
打開一個通用源,以便捕獲/發送(僅限WinPcap)流量。
該pcap_open()替換所有pcap_open_xxx()與一個單一的通話功能。
該函數隱藏不同的pcap_open_xxx()函數之間的差異,以便程序員無需管理不同的打開功能。
該函數可以依靠pcap_createsrcstr()創建根據新語法保留捕獲設備的字符串,另一方面是pcap_parsesrcstr()。
? ? ? ? ? ? ? 1.pcap_findalldevs_ex()返回的適配器可以由pcap_open()立即使用,
? ? ? ? ? ? ? 2.如果用戶想要將自己的源字符串傳遞給pcap_open(),則pcap_createsrcstr()有助于創建正確的源標識符。
snaplen: 必須保留的包的長度。對于由過濾器接收的每個數據包,只有第一個“snaplen”字節存儲在緩沖區中并傳遞給用戶應用程序。例如,snaplen等于100表示只存儲每個數據包的前100個字節。
flags: ? 保留捕獲數據包可能需要的幾個標志。允許的標志在pcap_open()標志中定義。
read_timeout: 以毫秒為單位讀取超時。讀取超時用于安排在看到數據包時讀取不一定立即返回,但是在一次操作中,它會等待一段時間來允許更多數據包到達并從操作系統內核讀取多個數據包。并非所有平臺都支持讀取超時; 在沒有的平臺上,讀取超時被忽略。
auth: 指向“結構pcap_rmtauth”的指針,它保留在遠程機器上驗證用戶所需的信息。如果這不是遠程捕獲,則該指針可以設置為NULL。
errbuf: 指向用戶分配的緩沖區的指針,該緩沖區將在該函數失敗的情況下包含錯誤。
返回值:
指向'pcap_t'的指針,可以用作以下調用(pcap_compile()等)的參數,并指定打開的WinPcap會話。如果出現問題,它返回NULL,'errbuf'變量保留錯誤消息。
警告:
源不能大于PCAP_BUF_SIZE。
以下格式不允許為“源”字符串:
rpcap:// [打開第一個本地適配器]
rpcap:// hostname / [打開第一個遠程適配器]
從網絡打開實時捕獲。
pcap_open_live()用于獲取數據包捕獲描述符以查看網絡上的數據包。
device是指定要打開的網絡設備的字符串; 在具有2.2或更高版本內核的Linux系統上,可以使用“any”或NULL的設備參數來捕獲來自所有接口的數據包。
snaplen指定要捕獲的最大字節數。如果該值小于捕獲的數據包的大小,則該數據包的第一個snaplen字節將被捕獲并作為數據包數據提供。在大多數(如果不是全部)網絡中,值65535應該足以捕獲數據包中可用的所有數據。
promisc指定是否將接口置于混雜模式。(注意,即使這個參數是假的,接口也可能在混雜模式下出于某些其他原因。)現在,這不適用于“任何”設備; 如果提供了“any”或NULL的參數,則將忽略promisc標志。
to_ms指定讀取超時(以毫秒為單位)。讀取超時用于安排在看到數據包時讀取不一定立即返回,但是在一次操作中,等待一段時間才能允許更多數據包到達并從操作系統內核讀取多個數據包。
并非所有平臺都支持讀取超時; 在沒有的平臺上,讀取超時被忽略。對于支持讀取超時的平臺,to_ms的零值將導致讀取永遠等待,以允許足夠的數據包到達,沒有超時。errbuf用于返回錯誤或警告文本。
當pcap_open_live()失敗并返回NULL時,它將被設置為錯誤文本。
當pcap_open_live()成功時,errbuf也可能設置為警告文本; 為了檢測這種情況,調用者在調用pcap_open_live()之前應該在errbuf中存儲一個零長度的字符串,并且如果errbuf不再是零長度字符串,則向用戶顯示警告。
總結
以上是生活随笔為你收集整理的pcap_open 和 pcap_open_live的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嵌入式软件设计第12次实验报告-1402
- 下一篇: [笔记]C#基础入门(十四)——C#用流