2009-12-08 61 views
0

pcap_compile()將一個字符串以bpf_program結構的形式編譯到過濾器程序中。理論上,我可以保存程序的編譯形式,並在不同的網絡接口或甚至不同的機器上將其提供給pcap_setfilter()pcap_compile的輸出是多麼便攜?

這會工作嗎?表單bpf_program是否可以跨不同接口移植?不同的流程?不同的架構?或者每次我想使用它時編譯表達式最安全?

基於pcap_open_dead()的存在,我認爲它具有一定的便攜性,但是在文檔中的任何位置似乎都沒有明確說明安全和不可靠。

回答

1

不,它一般不便攜。

您可以在同一臺機器上使用它們。

在類似的機器上有點安全。 不同的架構?可能不會。也許如果他們有類似的類型。 不同的操作系統?不,我不推薦任何這些。

如果您確實想要確定,只需在使用時編譯表達式即可。如果你做得很少,它確實需要一點點時間。如果你正在快速切換表達式,你可能想保留一些。

+0

謝謝,這是非常有幫助的。澄清:同一臺機器上的不同接口/設備怎麼樣? – benzado 2009-12-11 22:41:33

+1

我認爲,同一臺機器上的不同接口應該沒問題。儘管如此,我並不完全確定所有的實現。我實際上對不同種類的接口猶豫不決,比如ethernet/loopback/ieee1394。我懷疑可能無法解決問題,儘管它已經過了一年多的時間,因爲我已經對這些代碼進行了黑客攻擊,並且這些代碼正在泄漏。 – McPherrinM 2009-12-12 03:47:19

+0

具有相同鏈接層標題類型的不同接口*可以運行相同的BPF代碼。具有*不同*鏈接層標題類型的不同接口,例如以太網與802.11與PPP相比,可以*不*運行相同的BPF代碼(當然,它們可以運行相同的BPF代碼,但代碼將不能正常工作,作爲接口上的過濾器,使用不同的鏈路層頭類型BPF代碼被編譯的那個)。 – 2012-01-23 23:25:46