通过l7filter捕获数据包

作为我的博士研究的一部分,我编译linux-2.6.28内核以支持内核中的l7filteringfunction。

我使用以下方法向iptables添加单个规则:

iptables -t mangle -A PREROUTING -m layer7 --l7proto http -j NFQUEUE 

我用libipq编写了一个标准的捕获程序来读取队列中的数据包。

为了testing,我发送一个由18个数据包组成的单个http会话,其中包含两个HTTP请求和来自另一台机器的回复数据。

问题是我的捕获程序只接收到两个数据包,第一个是HTTP响应的数据包(被filter匹配),而我希望收到所有18个数据包。

我需要的是能够读取匹配会话的所有数据包(不仅是匹配的数据包)。

例如,如果我只想在所有HTTP会话中捕获和分析Yahoo Email Message Sessions,我可以使用l7filter只传递相关会话(Yahoo Email Message Session)的数据包吗?

谢谢。

如果你所要做的只是过滤你的数据包捕获,只看到某个主机的HTTPstream量,你可以通过查看端口和主机来完成。 使用带有filter的tcpdump或tshark。 就像是:

tcpdump -i eth0 tcp端口80或443

应该只给你HTTPstream量(在标准端口上)。

如果您想将其缩小到某些IP /networking,请将它们添加到filter中:

tcpdump -i eth0'(tcp端口80或443)和networking123.123.123.123/24'