我使用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
变量,则不符合预期结果。
我该如何解决?