gpt4 book ai didi

linux - 使用netfilter_queue将数据包复制到用户层可以,修改数据包并注入(inject)内核失败

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:12 25 4
gpt4 key购买 nike

我的主机操作系统是ubuntu12.04,我的iptables版本是v1.4.12,libmnl-1.0.3,libnetfilter_queue-1.0.2,libnfnetlink-1.0.1。首先,我执行iptable命令“iptables -A -p tcp --dport 80 -J NFQUEUE”将ip数据包导入到NFQUEUE,然后使用libnetfilter_queue将数据包复制到用户层,然后修改数据包的有效负载,重建ip校验和和tcp校验和。最后,我调用 nfq_set_verdict(qh, id, NF_ACCEPT, 0, NULL) 将数据包注入(inject)内核。但这不起作用。我使用wireshare来捕获数据包,我发现我自己的数据无法设置到数据包中。

最佳答案

这是因为您使用的判决函数:

nfq_set_verdict(qh, id, NF_ACCEPT, 0, NULL) 

签名是:

nfq_set_verdict(struct nfq_q_handle *qh, u_int32_t id, u_int32_t verdict, u_int32_t mark, int set_mark, u_int32_t data_len, const unsigned char *data)

使用0作为长度,使用NULL作为数据指针,您正在根据他的ID号接受数据包,而不是传递修改后的有效负载

你应该尝试这样的事情:

char *pktData;
u_int32_t len=0;

len = nfq_get_payload(nfa, &pktData);

// modify payload

return nfq_set_verdict(qh, id, NF_ACCEPT, len, pktData);

然后您修改后的有效负载将被传输

关于linux - 使用netfilter_queue将数据包复制到用户层可以,修改数据包并注入(inject)内核失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21086129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com