免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: LYZC11

通过netfilter的钩子函数拦截数据包实现转发的问题????????????????? [复制链接]

论坛徽章:
0
发表于 2011-11-03 10:27 |显示全部楼层
回复 45# 瀚海书香


    版主,借这个贴再想问一个问题.仍然是无线AP的问题

   比如无线AP IP为192.168.1.126, 然后是通过有线上网eth0(IP为 192.168.1.59),
    然后此时笔记本A通过AP接入,然后分配给A地址是192.168.1.223,
    我配置的规则如下:

  1.     iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 61.55.167.115   
  2.     iptables -t nat -A POSTROUTING -s 192.168.1.223 -j SNAT --to 192.168.1.59
  3.    
复制代码
这样配置后理论上不是只有当机器A接入AP后,访问任何网页都会跳转到61.55.167.115(UC主页)吗?
   为什么,我通过笔记本B连上AP,访问外网也都全都跳到61.55.167.115呢?我都没有将
   B的IP添加入iptables表啊。。。
  如果,想实现只有A接入AP后会访问网页都跳转到61.55.167.115(UC主页),而其它机器接入后,
   都正常访问网页,即不会被跳转到UC主页,应该再添加什么规则呢?

   表述有点繁琐,请帮忙看看,谢谢!!!

论坛徽章:
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
发表于 2011-11-03 12:58 |显示全部楼层
回复 51# LYZC11

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 61.55.167.115 


修改为:iptables -t nat -A PREROUTING -p tcp --dport 80  -s 192.168.1.223 -j DNAT --to 61.55.167.115

其中192.168.1.223为想要重定向的笔记本IP。

论坛徽章:
0
发表于 2012-09-04 15:45 |显示全部楼层
回复 3# 瀚海书香


    看到这个帖子我有几点疑问 :
    1:PRE_ROUTING点修改目标地址,如果修改源地址的话是在哪个钩子修改的
    2:修改目标地址校验要修改哪些?是ip的校验吗? 那么如果是tcp的话校验是不是也要重新修改呢?
    3:我如果修改在NF_IP_POST_ROUTING 修改了源ip 要修改哪些校验
1和2困扰了我很久了  希望得到大神的详解!
   

论坛徽章:
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
发表于 2012-09-04 16:11 |显示全部楼层
回复 53# 会当凌绝顶聪

    1:PRE_ROUTING点修改目标地址,如果修改源地址的话是在哪个钩子修改的

可以在是 POSTROUTING 处修改,用 snat

    2:修改目标地址校验要修改哪些?是ip的校验吗? 那么如果是tcp的话校验是不是也要重新修改呢?

看一下协议,哪些校验和的计算用得上 IP 地址的话,都要做相应修改。

修改 IP 地址的话,IP 校验和和 TCP 的校验和都要重新修改。
   

论坛徽章:
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
发表于 2012-09-04 17:06 |显示全部楼层
回复 54# Godbach

BTW: 好久没见God兄了

   

论坛徽章:
0
发表于 2012-09-04 17:09 |显示全部楼层
回复 54# Godbach


    Ip头的校验我这样算的  不知道对不对

static unsigned short cal_chksum(unsigned short *addr, int len)
{
        int nleft = len;
        int sum = 0;
        unsigned short *w = addr;
        unsigned short answer = 0;

        while (nleft > 1) {
                sum += *w++;
                nleft -= 2;
        }

        if (nleft == 1) {
                *(unsigned char *) (&answer) = *(unsigned char *) w;
                sum += answer;
        }
        sum = (sum >> 16) + (sum & 0xffff);
        sum += (sum >> 16);
        answer = ~sum;
        return answer;
}

论坛徽章:
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
发表于 2012-09-04 17:13 |显示全部楼层
回复 55# 瀚海书香

惭愧,这段时间比较忙。

   

论坛徽章:
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
发表于 2012-09-04 17:16 |显示全部楼层
回复 56# 会当凌绝顶聪
IP 头校验和的计算就专门优化的 接口,应该是 ip_fast_csum

自己实现的话,只要按照协议的要求,记得进位也要加到校验和中,还有取反,应该就没问题了,剩下的就是细节。


   

论坛徽章:
0
发表于 2012-09-05 09:22 |显示全部楼层
回复 58# Godbach

我做了一个简单的判断,源ip和协议都符合我的要求的话,我就把目标Ip更改。我现在只是测试的udp包,udp报文的校验不需要吧。
运行结果还是不接收数据,抓包能抓的到
                    if ((sock_buffer->nh.iph->saddr == tmpNode->sAddr) && (sock_buffer->nh.iph->protocol == tmpNode->protocol)) {
                        sock_buffer->nh.iph->daddr = tmpNode->dAddr;
                        sock_buffer->nh.iph->check = 0;
                        sock_buffer->nh.iph->check = ip_fast_csum ( ( char * ) sock_buffer->nh.iph, sock_buffer->nh.iph->ihl );
                }

论坛徽章:
0
发表于 2012-09-05 09:23 |显示全部楼层
回复 55# 瀚海书香


    两位大神都来帮我看下吧  内核方面刚刚入手  不懂的太多了 !!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP