2009-12-08 29 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