作为我博士研究的一部分,我编译了 linux-2.6.28 内核以支持内核 l7filtering 功能。
我正在向 iptables 添加一条规则,内容如下:
iptables -t mangle -A PREROUTING -m layer7 --l7proto http -j NFQUEUE
我编写了一个标准捕获程序,使用 libipq 从队列中读取数据包。
为了测试,我正在发送一个由 18 个数据包组成的单个 http 会话,其中包括两个 HTTP 请求和来自另一台机器的回复数据。
问题是我的捕获程序只接收到两个数据包,即 HTTP 回复的第一个数据包(与过滤器匹配),而我希望接收到全部 18 个数据包。
我需要的是能够读取匹配会话的所有数据包(而不仅仅是匹配的数据包)。
例如,如果我只想在所有 HTTP 会话中捕获和分析 Yahoo 电子邮件消息会话,我可以使用 l7filter 仅传递相关会话(Yahoo 电子邮件消息会话)的数据包吗?
谢谢。
答案1
如果您只想过滤数据包捕获以仅查看发往特定主机的 HTTP 流量,那么您可能只需查看端口和主机即可。使用带过滤器的 tcpdump 或 tshark。例如:
tcpdump -i eth0 tcp 端口 80 或 443
应该只给你 HTTP 流量(在标准端口上)。
如果您想要将其缩小到某些 IP/网络,也请将它们添加到过滤器中:
tcpdump -i eth0'(tcp 端口 80 或 443)和网络 123.123.123.123/24'