【问题标题】:How portable is the output of pcap_compile?pcap_compile 的输出的可移植性如何?
【发布时间】:2009-12-08 18:47:00
【问题描述】:

pcap_compile() 将字符串编译成bpf_program 结构形式的过滤程序。从理论上讲,我可以保存程序的编译形式并将其提供给不同网络接口甚至不同机器上的pcap_setfilter()

这行得通吗? bpf_program 表单是否可跨不同界面移植?不同的流程?不同的架构?或者每次我想使用它时编译表达式是否最安全?

基于pcap_open_dead() 的存在,我认为它有点可移植,但文档中似乎没有说明什么是安全的,什么不是。

【问题讨论】:

    标签: c portability pcap libpcap


    【解决方案1】:

    不,一般来说它不是便携式的。

    您可以在同一台机器上使用它们。

    在类似的机器上比较安全。 不同的架构?可能不是。也许如果他们有相似的类型。 不同的操作系统?不,我不推荐任何这些。

    如果您真的想确定,只需在使用时编译表达式即可。如果你很少这样做,那真的需要很短的时间。如果您要快速切换表达式,则可能需要保留一些。

    【讨论】:

    • 谢谢,这很有帮助。澄清一下:同一台机器上的不同接口/设备呢?
    • 我认为同一台机器上的不同接口应该没问题。不过,我并不完全确定所有实现。我实际上对不同的/种类/接口犹豫不决,例如以太网/环回/ieee1394。我怀疑可能行不通,尽管自从我破解任何代码以来已经有一年多了,而且事情正在从我的脑海中泄露出来。
    • 不同的接口具有相同的链路层头类型可以运行相同的BPF代码。具有不同链路层标头类型的不同接口,例如以太网与 802.11 与 PPP,可以运行相同的 BPF 代码(好吧,它们可以运行相同的 BPF 代码,但该代码不能作为具有不同链路的接口上的过滤器正常工作-layer 头类型,来自为其编译 BPF 代码的头类型)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    相关资源
    最近更新 更多