Featured image of post kamailio sipcapture介绍

kamailio sipcapture介绍

背景

sipcapture用来存储进来和出去的sip消息,还可以存储HEP协议的数据。

相比siptrace,sipcapture只能存储到数据库中,不能发送到第三方存储。

官方文档地址:sipcapture, 本次测试的kamailio版本是:

version: kamailio 5.8.5 (x86_64/linux)

重要参数解析

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 数据库连接地址
modparam("sipcapture", "db_url", DBURL)
# 表名, 多个表使用|隔开
modparam("sipcapture", "table_name", "homer_capture1|homer_capture2");
# 存储数据到多个表的模式, rand:随机; round_robin:轮询; hash:哈希
modparam("sipcapture", "mt_mode", "hash")
# 当mt_mode为hash时, hash_source为hash的key,可以为call_id,to_user,from_user.默认call_id
modparam("sipcapture", "hash_source", "to_user")
# 存储到数据库的模式, 1,INSERT DELAYED; 2,ASYNC INSERT; 0,INSERT
modparam("sipcapture", "db_insert_mode", 1)

# 设置抓包模式
modparam("sipcapture", "capture_mode", "mode1=>db_url=mysql://user:passwd@host/dbname1;table_name=homer_capture1|homer_capture2;mt_mode=hash;hash_source=call_id;")

# 是否开启sipcapture功能
modparam("sipcapture", "capture_on", 1)
# 实时开启抓hep功能
modparam("sipcapture", "hep_capture_on", 1)
# 是否开启抓ipip功能
modparam("sipcapture", "raw_ipip_capture_on", 1)
# 是否开启监控/镜像端口功能
modparam("sipcapture", "raw_moni_capture_on", 1)
# 监听ip地址
modparam("sipcapture", "raw_socket_listen", "10.0.0.1:5060-5090")
# 监听网卡
modparam("sipcapture", "raw_interface", "eth0")
# 监听子进程数量
modparam("sipcapture", "raw_sock_children", 6)
# 是否开启混杂模式
modparam("sipcapture", "promiscuous_on", 1)
# 是否开启bpf过滤
modparam("sipcapture", "raw_moni_bpf_on", 1)
# 设置节点名称
modparam("sipcapture", "capture_node", "homer01")

# 写入数据库失败重试次数
modparam("sipcapture", "insert_retries", 5)
# 写入数据库失败重试间隔
modparam("sipcapture", "insert_retry_timeout", 10)
# 设置为1,当Hep消息到达时,event_route[sipcapture:siprequest]生效.
modparam("sipcapture", "nonsip_hook", 1)

# 是否抓 broken的sip消息
modparam("sipcapture", "capture_bad_msgs", 1)

重要函数

sip_capture([table], [cmode])

存储当前的HEP/IPIP SIP消息到数据库

  • table 表名,可以为"",也可以sip_capture_call_%Y%m%d
  • cmode 和上面的capture_mode参数一样

report_capture([table], [cid], [data])

存储HEP REPORT消息到数据库

  • table 表名
  • cid 关联id
  • data json格式的数据

float2int(fval, ival)

返回乘积,atof(fval)*atoi(ival)

sip_capture_forward(uri)

转发HEP包到到指定的uri,urisip uri格式,主要用在event_route[sipcapture:siprequest]

实战

sip_capture 数据表

sip_capture数据表默认是没有创建的,需要手动创建。

其脚本路径在源码:src/modules/sipcapture/sql/.

  1. create_sipcapture_postgress.sql 是表sip_capture的创建脚本
  2. schema_data.sql其中的report_capturesip_capture_call_20150407可用

sip_capture的mysql脚本为:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
CREATE TABLE sip_capture (
    id INT NOT NULL AUTO_INCREMENT,
    date DATETIME NOT NULL DEFAULT '1900-01-01 00:00:01',
    micro_ts BIGINT NOT NULL DEFAULT 0,
    method VARCHAR(50) NOT NULL DEFAULT '',
    reply_reason VARCHAR(100) NOT NULL,
    ruri VARCHAR(200) NOT NULL DEFAULT '',
    ruri_user VARCHAR(100) NOT NULL DEFAULT '',
    from_user VARCHAR(100) NOT NULL DEFAULT '',
    from_tag VARCHAR(64) NOT NULL DEFAULT '',
    to_user VARCHAR(100) NOT NULL DEFAULT '',
    to_tag VARCHAR(64) NOT NULL DEFAULT '',
    pid_user VARCHAR(100) NOT NULL DEFAULT '',
    contact_user VARCHAR(120) NOT NULL DEFAULT '',
    auth_user VARCHAR(120) NOT NULL DEFAULT '',
    callid VARCHAR(100) NOT NULL DEFAULT '',
    callid_aleg VARCHAR(100) NOT NULL DEFAULT '',
    via_1 VARCHAR(256) NOT NULL DEFAULT '',
    via_1_branch VARCHAR(80) NOT NULL DEFAULT '',
    cseq VARCHAR(25) NOT NULL DEFAULT '',
    diversion VARCHAR(256) NOT NULL DEFAULT '',
    reason VARCHAR(200) NOT NULL DEFAULT '',
    content_type VARCHAR(256) NOT NULL DEFAULT '',
    auth VARCHAR(256) NOT NULL DEFAULT '',
    user_agent VARCHAR(256) NOT NULL DEFAULT '',
    source_ip VARCHAR(60) NOT NULL DEFAULT '',
    source_port INT NOT NULL DEFAULT 0,
    destination_ip VARCHAR(60) NOT NULL DEFAULT '',
    destination_port INT NOT NULL DEFAULT 0,
    contact_ip VARCHAR(60) NOT NULL DEFAULT '',
    contact_port INT NOT NULL DEFAULT 0,
    originator_ip VARCHAR(60) NOT NULL DEFAULT '',
    originator_port INT NOT NULL DEFAULT 0,
    proto INT NOT NULL DEFAULT 0,
    family INT NOT NULL DEFAULT 0,
    rtp_stat VARCHAR(256) NOT NULL DEFAULT '',
    type INT NOT NULL DEFAULT 0,
    node VARCHAR(125) NOT NULL DEFAULT '',
    msg VARCHAR(1500) NOT NULL DEFAULT '',
    PRIMARY KEY (id, date)
) ENGINE=InnoDB;

CREATE INDEX sip_capture_ruri_user_idx ON sip_capture (ruri_user);
CREATE INDEX sip_capture_from_user_idx ON sip_capture (from_user);
CREATE INDEX sip_capture_to_user_idx ON sip_capture (to_user);
CREATE INDEX sip_capture_pid_user_idx ON sip_capture (pid_user);
CREATE INDEX sip_capture_auth_user_idx ON sip_capture (auth_user);
CREATE INDEX sip_capture_callid_aleg_idx ON sip_capture (callid_aleg);
CREATE INDEX sip_capture_date_idx ON sip_capture (date);
CREATE INDEX sip_capture_callid_idx ON sip_capture (callid);

该模块暂时还未配置成功,后续有时间再补上。

本博客已稳定运行
发表了26篇文章 · 总计45.09k字
本站总访问量 次 · 您是本站第 位访问者
粤ICP备2025368587号-1| 使用 Hugo 构建
主题 StackJimmy 设计