繁体   English   中英

使用netfilter以原始形式获取数据包

[英]Get packet in a raw form with netfilter

我想将所有流量封装在UDP中。 我已经可以捕获它并转发。 但是现在我想做封装。 对于此任务,我需要获取原始格式的完整数据包。 但是我该怎么办呢? 我的代码是

while ((rv = recv(fd, buf, sizeof(buf), 0)))
{
        printf("pkt received\n");
        nfq_handle_packet(h, buf, rv);
}

我应该在回调中执行此操作吗? 如果是这样,那又如何? 或者我可以在回调中设置NF_DROP,并使用while循环中的bufrev 我只能从netfilter找到函数来获取有效负载,dst,src等,但不能以原始形式获取数据包。 还是可以将nfq_data重新解释为char *?

您确实希望在回调中执行此操作。 您将要调用nfq_get_payload,它将为您提供一个指向数据包整个内容(包括IP和UDP标头)的指针。 根据封装数据包的方式,可以使用指向新数据包数据的指针调用nfq_set_verdict或使用NF_DROP丢弃数据包,然后通过原始套接字或类似方法重新注入新封装的数据包。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM