我正在修改 tcpdump 以动态更改它用来获取输出的过滤器。
目前,tcpdump 使用 pcap_set_filter 实际为用户感兴趣的传入数据包或传出数据包准备过滤器,(pcap_compile 这样做吗?我不太确定),是否可以从 tcpdump 动态换过滤器?从某种意义上说,我想过滤我的 MAC 地址上的数据包,并且由于某些原因我动态更改了 mac,现在我的 mac 改变了,反过来我应该通知 tcpdump 更改新 mac 上的过滤器,我该怎么做?
我正在修改 tcpdump 以动态更改它用来获取输出的过滤器。
目前,tcpdump 使用 pcap_set_filter 实际为用户感兴趣的传入数据包或传出数据包准备过滤器,(pcap_compile 这样做吗?我不太确定),是否可以从 tcpdump 动态换过滤器?从某种意义上说,我想过滤我的 MAC 地址上的数据包,并且由于某些原因我动态更改了 mac,现在我的 mac 改变了,反过来我应该通知 tcpdump 更改新 mac 上的过滤器,我该怎么做?
是否可以从 tcpdump 动态更改过滤器?
是的,它可以pcap_setfilter()
使用新过滤器(由过滤器表达式编译pcap_compile()
)调用pcap_t
它已打开的过滤器,以将过滤器设置为新值。
但是,这将导致已捕获但未被 tcpdump 读取的流量被丢弃。libpcap 中没有防止这种情况发生的机制。
从某种意义上说,我想过滤我的 MAC 地址上的数据包,并且由于某些原因我动态更改了 mac,现在我的 mac 改变了,反过来我应该通知 tcpdump 更改新 mac 上的过滤器,我该怎么做?
您不仅需要修改 tcpdump 来调用pcap_compile()
并且pcap_setfilter()
在它捕获流量时,还必须修改它以接收来自某个来源的消息,告诉它更改过滤器并指定新过滤器应该是什么,并安排有当 MAC 地址更改时,该消息将发送给它。