0
pcap_compile()
將一個字符串以bpf_program
結構的形式編譯到過濾器程序中。理論上,我可以保存程序的編譯形式,並在不同的網絡接口或甚至不同的機器上將其提供給pcap_setfilter()
。pcap_compile的輸出是多麼便攜?
這會工作嗎?表單bpf_program
是否可以跨不同接口移植?不同的流程?不同的架構?或者每次我想使用它時編譯表達式最安全?
基於pcap_open_dead()
的存在,我認爲它具有一定的便攜性,但是在文檔中的任何位置似乎都沒有明確說明安全和不可靠。
謝謝,這是非常有幫助的。澄清:同一臺機器上的不同接口/設備怎麼樣? – benzado 2009-12-11 22:41:33
我認爲,同一臺機器上的不同接口應該沒問題。儘管如此,我並不完全確定所有的實現。我實際上對不同種類的接口猶豫不決,比如ethernet/loopback/ieee1394。我懷疑可能無法解決問題,儘管它已經過了一年多的時間,因爲我已經對這些代碼進行了黑客攻擊,並且這些代碼正在泄漏。 – McPherrinM 2009-12-12 03:47:19
具有相同鏈接層標題類型的不同接口*可以運行相同的BPF代碼。具有*不同*鏈接層標題類型的不同接口,例如以太網與802.11與PPP相比,可以*不*運行相同的BPF代碼(當然,它們可以運行相同的BPF代碼,但代碼將不能正常工作,作爲接口上的過濾器,使用不同的鏈路層頭類型BPF代碼被編譯的那個)。 – 2012-01-23 23:25:46