免费注册 查看新帖 |

Chinaunix

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

SIP跟踪 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-27 10:17 |只看该作者 |倒序浏览
1、模块的注册(ip_conntrack_sip.c)
1.1 init函数
初始化全局变量:
    static struct ip_conntrack_helper sip[MAX_PORTS];
并注册:
    memset(&sip, 0, sizeof(struct ip_conntrack_helper));
    ……
    ret=ip_conntrack_helper_register(&sip);
sip是一个数组,最大允许MAX_PORTS个,并且变量ports_c决定其个数,目前,只注册了一个sip。
sip是一个ip_conntrack_helper类型,初始化函数中,调用ip_conntrack_helper_register函数注册了一个sip的helper模块。
在为sip的成员赋初始值时,对照理解struct ip_conntrack_helper结构的许多重要的成员:
  sip.tuple.dst.protonum = IPPROTO_UDP;       //协议
  sip.tuple.src.u.udp.port = htons(ports); //端口号:SIP_PORT=5060
  sip.mask.src.u.udp.port = htons(0xFFFF);    //源地址掩码
  sip.mask.dst.protonum = 0xFF;
  sip.max_expected = 2;
  sip.timeout = 3 * 60;   //超时时间:3 minutes
  sip.me = THIS_MODULE;
  sip.help = sip_help;    // very important

ip_conntrack_helper_register函数实质上是把该模块添加进以全局变量helpers为首的链表中去:

int ip_conntrack_helper_register(struct ip_conntrack_helper *me)
{
BUG_ON(me->timeout == 0);
WRITE_LOCK(&ip_conntrack_lock);
list_prepend(&helpers, me);
WRITE_UNLOCK(&ip_conntrack_lock);
return 0;
}
至此,sip的helper模块被注册了,它什么时候被调用?以及它有什么用呢??

2、模块的调用
在连接跟踪的初时化时,有注册两个钩子:
/*连接跟踪初始化时,注册helper Hook*/
static struct nf_hook_ops ip_conntrack_helper_out_ops = {
.hook = ip_conntrack_help,
.owner = THIS_MODULE,
.pf = PF_INET,
.hooknum = NF_IP_POST_ROUTING,
.priority = NF_IP_PRI_CONNTRACK_HELPER, /*此优先级比同Hook上的ip_confirm的高*/
};
static struct nf_hook_ops ip_conntrack_helper_in_ops = {
.hook = ip_conntrack_help,
.owner = THIS_MODULE,
.pf = PF_INET,
.hooknum = NF_IP_LOCAL_IN,
.priority = NF_IP_PRI_CONNTRACK_HELPER,
};
数据包经过Hook点时,ip_conntrack_help 函数将被调用。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/103638/showart_2038255.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP