免费注册 查看新帖 |

Chinaunix

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

内核态提取URL [复制链接]

论坛徽章:
0
发表于 2009-12-20 15:02 |显示全部楼层
原帖由 ubuntuer 于 2009-12-17 17:44 发表
dreamice大哥,我在这个的基础上正在写url过滤的...  
发现怎么有的时候GET不起作用?? 刚修改成strstr(,"HTTP/1.1")直接把内核搞挂了^_^


是不是strstr在软中断中休眠引起的

论坛徽章:
0
发表于 2009-12-20 15:34 |显示全部楼层
原帖由 W.Z.T 于 2009-12-20 15:02 发表


是不是strstr在软中断中休眠引起的

为什么 strstr 会休眠呢?

论坛徽章:
0
发表于 2009-12-20 19:16 |显示全部楼层
原帖由 platinum 于 2009-12-20 15:34 发表

为什么 strstr 会休眠呢?


理解错了

论坛徽章:
0
发表于 2009-12-21 20:35 |显示全部楼层
原帖由 Godbach 于 2009-12-18 14:01 发表


这里是提取URL,如果有分段的话,一个GET包或则POST中的URL会跨越两个IP数据包吗


完全有可能出现这种情况的,我就见过,记得当时是访问hotmail网站。

论坛徽章:
0
发表于 2010-01-07 11:21 |显示全部楼层
你好!
    我最近在学习URL过滤,在论坛上看到你的关于URL过滤的帖子,我COPY下来试了一下,我用的环境是ubuntu2.6的,代码能编译加载,但是加载后马上Oops.Oops的地方在hook_func函数中,是一个空指针。请帮我看一下,不知道是不是我环境的问题。下面是Oops信息:
Jan  6 13:08:12 mars-desktop kernel: [  471.197847] BUG: unable to handle kernel NULL pointer dereference at 000000a0
Jan  6 13:08:12 mars-desktop kernel: [  471.197958] IP: [<e0946095>] os_attack_detect+0x5/0x3c [http]
Jan  6 13:08:12 mars-desktop kernel: [  471.198226] *pde = 14bc7067 *pte = 00000000
Jan  6 13:08:12 mars-desktop kernel: [  471.198287] Oops: 0000 [#1] SMP
Jan  6 13:08:12 mars-desktop kernel: [  471.198315] last sysfs file: /sys/devices/LNXSYSTM:00/device:00/ACPI0003:00/power_supply/ACAD/online
Jan  6 13:08:12 mars-desktop kernel: [  471.198417] Modules linked in: http isofs udf crc_itu_t binfmt_misc snd_ens1371 gameport snd_ac97_codec ac97_bus snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_dummy snd_seq_oss snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq ppdev x_tables snd_timer snd_seq_device psmouse serio_raw snd soundcore snd_page_alloc i2c_piix4 parport_pc shpchp lp parport floppy pcnet32 mii intel_agp agpgart mptspi mptscsih mptbase scsi_transport_spi
Jan  6 13:08:12 mars-desktop kernel: [  471.198524]
Jan  6 13:08:12 mars-desktop kernel: [  471.198581] Pid: 1851, comm: wget Not tainted (2.6.31-16-generic #53-Ubuntu) VMware Virtual Platform
Jan  6 13:08:12 mars-desktop kernel: [  471.198593] EIP: 0060:[<e0946095>] EFLAGS: 00210246 CPU: 0
Jan  6 13:08:12 mars-desktop kernel: [  471.198617] EIP is at os_attack_detect+0x5/0x3c [http]
Jan  6 13:08:12 mars-desktop kernel: [  471.198638] EAX: 00000000 EBX: e094661c ECX: 00000000 EDX: d4a8b0c0
Jan  6 13:08:12 mars-desktop kernel: [  471.198648] ESI: d4bdbc40 EDI: 80000000 EBP: d4bdbbf0 ESP: d4bdbbf0
Jan  6 13:08:12 mars-desktop kernel: [  471.198658]  DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
Jan  6 13:08:12 mars-desktop kernel: [  471.198681] Process wget (pid: 1851, ti=d4bda000 task=d4bf8c90 task.ti=d4bda000)
Jan  6 13:08:12 mars-desktop kernel: [  471.198694] Stack:
Jan  6 13:08:12 mars-desktop kernel: [  471.198720]  d4bdbc18 c04bb641 de20a000 c04c4e40 00000003 d4a8b0c0 c078c678 00000003
Jan  6 13:08:12 mars-desktop kernel: [  471.198769] <0> 00000000 de20a000 d4bdbc50 c04bb7d6 00000000 de20a000 d4bdbc40 c04c4e40
Jan  6 13:08:12 mars-desktop kernel: [  471.198780] <0> 80000000 00000002 c078c678 d4a8b0c0 e094661c d5c31814 59505ab7 d5c31810

论坛徽章:
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
发表于 2010-01-07 11:26 |显示全部楼层
IP: [<e0946095>] os_attack_detect+0x5/0x3c [http]

已经定位到函数了

论坛徽章:
0
发表于 2010-01-07 11:58 |显示全部楼层
我知道在os_attack_detect()这个函数中,这个函数就几行代码,我对协议不熟,没看出有什么问题。

unsigned int os_attack_detect(unsigned int hooknum, struct sk_buff** skb,
                 const struct net_device *in,
                 const struct net_device *out,
                 int (*okfn)(struct sk_buff*))
{ struct iphdr *iph = NULL;
    struct tcphdr *tcph = NULL;
    struct tcphdr _otcph;
    unsigned char* haystack;
    int hlen;
    iph = ip_hdr(*skb);
    haystack =(char*)iph+(iph->ihl*4);
    hlen = ntohs(iph->tot_len)-(iph->ihl*4);
    if (iph->protocol == IPPROTO_TCP)
   {   tcph = skb_header_pointer(*skb, ip_hdrlen(*skb), sizeof(_otcph), &_otcph);
        haystack += tcph->doff*4;
        hlen -= tcph->doff*4;
        check_http(haystack, hlen);
    }
    return NF_ACCEPT;
}

论坛徽章:
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
发表于 2010-01-07 12:02 |显示全部楼层
    iph = ip_hdr(*skb);
    haystack =(char*)iph+(iph->ihl*4);

这个地方没有对iph进行检查,就直接解引用了,如果这个包是不IP包呢?

论坛徽章:
0
发表于 2010-01-07 12:04 |显示全部楼层
哦,我看一下,谢谢大大指点

论坛徽章:
0
发表于 2010-01-07 14:44 |显示全部楼层
原帖由 Godbach 于 2010-1-7 12:02 发表

这个地方没有对iph进行检查,就直接解引用了,如果这个包是不IP包呢?

netfilter 里看到的一定都是 IP 包,而且前面好像有合法性检查,具体记不清了……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP