c / c ++ libnetfilter_queue和应用程序层数据包选择

时间:2017-01-12 14:43:06

标签: c++ c linux networking netfilter

我使用libnetfilter_queue库获得了一个c ++程序,旨在在Linux系统上运行。

我只需要过滤应用层数据包(因此,数据包包括主机应用层的有效负载)。

我知道在没有重建内核的情况下iptables无法实现。 由于我无法在最终的主机设备上执行此操作,因此我使用的是c ++程序。

我的目标是直接接受非应用层数据包并处理第7层数据包。

我尝试使用nfq_get_payload函数,如果发现错误(因此,我认为没有有效负载),则返回-1

ret = nfq_get_payload(tb, &data);
if (ret < 0) { /* accept packet */ }
else { /* process packet */ }

我知道nfq_get_payload函数取决于&#34;采用的模式&#34; (参见nfq_set_mode函数),但它对我不起作用。

如何区分应用层数据包和&#34;低层&#34;的?

知道ip_src字节位置在data + 12中(另请参阅here),因为TCP层大小为64字节,所以应找到有效负载,如果可用,位置data + 12 + 64

unsigned char* pkt_payload = (buffer + 12 + 64));

然而,如果我尝试打印pkt_payload变量,则不符合预期结果。

我该如何解决?

0 个答案:

没有答案