免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 10814 | 回复: 17
打印 上一主题 下一主题

nfq_set_verdict无法修改包的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-30 17:31 |只看该作者 |倒序浏览
是这样的, 在linux上,我用iptables配置了netfilter:    iptables -A OUTPUT - j QUEUE

然后仿照nfqnl_test.c中的代码稍微改了一下:

static int print_pkt (struct nfq_data *tb)
{
        int id = 0;
        struct nfqnl_msg_packet_hdr *ph;
        int ret;
        unsigned char *data;

        ph = nfq_get_msg_packet_hdr(tb);
        id = ntohl(ph->packet_id);

        ret = nfq_get_payload(tb, &data);

        //在这里,我把data中的数据随意改了一下
      //省略不写

      //我保证执行到这里了
        return nfq_set_verdict(qh, id, NF_ACCEPT, ret, data); //改了没效果
}

static int cb(struct nfq_q_handle *qh, struct nfgenmsg *nfmsg,
              struct nfq_data *nfa, void *data)
{
        return print_pkt(nfa);        
}

问题是:无论我怎么改包里面的内容,最后发送出去的数据还是原来的,请高手帮忙指点下,万分感谢

论坛徽章:
0
2 [报告]
发表于 2011-06-30 19:15 |只看该作者
哥哥们啊,来一个帮帮我吧

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
3 [报告]
发表于 2011-07-01 08:36 |只看该作者
回复 1# yzp3646

God兄的一篇关于ipqueue的文章,应该会有帮助
    http://blog.chinaunix.net/space. ... og&cuid=1678213

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
4 [报告]
发表于 2011-07-01 10:16 |只看该作者
NF_QUEUE 是把数据包搞到用户空间,你可以在用户空间修改。
你的修改是在用户空间吗

论坛徽章:
0
5 [报告]
发表于 2011-07-01 10:36 |只看该作者
回复 4# Godbach


    恩,我是在用户空间改的,很奇怪,现在没有那个问题了,可能是和我装的libnetfilter_queue的版本有关,对方能收到我修改的内容了,但是它总是让重传

我用wireshark抓包看到的,错误是 [TCP Retransmission]  [TCP segment of a reassembled PDU] 一直出现

我修改TCP报文中的内容,只是随便修改了TCP头部后面一个字节,没有改变长度,所以就没有修改TCP和IP的校验值,接收方不接受包,估计是收到一看有问题就扔掉了,不知道为什么

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
6 [报告]
发表于 2011-07-01 13:50 |只看该作者
回复 5# yzp3646

只是随便修改了TCP头部后面一个字节,没有改变长度,所以就没有修改TCP和IP的校验值

你修改了 TCP 的内容,TCP 的校验和为什么不该呢?

你知道 TCP 校验和包含哪些内容吗?

论坛徽章:
0
7 [报告]
发表于 2011-08-12 09:12 |只看该作者
自己搞错了,是应该重新计算校验,thanks Godbach

论坛徽章:
0
8 [报告]
发表于 2011-10-19 12:04 |只看该作者
struct iphdr *iph;
struct tcphdr *tcp;
ret = nfq_get_payload(tb, &data);

if (ret >= 0)
        printf("payload_len=%d ", payload_len);
iph = (struct iphdr *)data;
tcp = (struct tcphdr *)(data + (iph->ihl<<2));

addr = iph->saddr; iph->saddr = iph->daddr; iph->daddr = addr;
port = tcp->source; tcp->source = tcp->dest; tcp->dest = port;

payload_offset = ((iph->ihl)<<2) + (tcp->doff<<2);

match = (char *)(data + payload_offset);   
printf("####payload = %s\n\n", match);

return nfq_set_verdict(qh, id, NF_ACCEPT, payload_len, data);


请教可不可以这样修改端口和ip地址?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
9 [报告]
发表于 2011-10-19 13:53 |只看该作者
回复 8# hardie
你这只是想对调源和 目的的 IP+Port 吧

论坛徽章:
0
10 [报告]
发表于 2011-10-19 14:16 |只看该作者
回复 9# Godbach


    就是urlfilter (BLOCK WEBSITE)的功能,原先是直接 return nfq_set_verdict(qh, id, NF_DROP, 0, NULL);,
    用户浏览器一直等待,使用者不知道这个网页是上不去还是被我们阻挡了。
    现在需要 redirect 到一个页面 告知使用者此网页被阻挡,不知道这个能不能在这里实现。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP