Отслеживание клиентских IP
SIP авторизации
Если есть задача получить IP адреса, с которых наблюдалась активность клиента за определенный промежуток времени, то можно использвать таблицу sip_auth_log.
Например, как получить такие данные для клиента с префиксом "0004*" c первого по девятое апреля включительно в домене sip.domain.com:
select distinct inet_ntoa(ip) from sip_auth_log where date_gmt>='2017-04-01 00:00:00' and date_gmt<'2017-04-10 00:00:00' and ext_name like "0004*%sip.domain.com%"
Логика сбора данных следующая:
- Существует кэш IP, с которых авторизовывался добавочный, длительностью сутки (отсчет от последнего рестарта kamailio). Ключом кэша являтется "имя добавочного + IP"
- При каждом авторизованном запросе от добавочного (REGISTER, INVITE...) данные записываются в базу и кэш, если их нет в кеше и ничего не делается, если они там есть
Таким образом, не более раза в сутки возможны повторные ip адреса для добавочного. (кроме случаев, когда кэш очищается при перезагрузке kamailio)
Адреса медиа
В таблице cdr при вызовах, уходящих на добавочный или приходящих с него, сохраняется IP адрес медиа. Например, для клиента с идентификатором id=2944 (проще всего выяснить из пути url в административном интерфейсе или запросом в таблицу ringme.client )
select distinct( inet_ntoa(device_ip) ) from cdr where init_time_gmt>='2016-01-01' and client_owner_id=2944 and ext_type='phone' and device_ip>0 /* или с одновременным поиском идентификатора клиента */ select distinct( inet_ntoa(device_ip) ) from cdr where init_time_gmt>='2016-01-01' and client_owner_id=(select rc.id from ringme.client rc, ringme.domain rd where rc.domain_id=rd.id and prefix='0004' and rd.name='mydomain') and ext_type='phone' and device_ip>0
Индексы
в запросе обязательно нужно указывать период и id клиента, иначе индексы не будут работать.
Локальные Адреса
Иногда (около 5%) для одного и того же добавочного в адресе медиа кроме внешних адресов оказываются локальные адреса (например, вида 192.168.xxx.xxx). Для их фильтрации можно делать запрос
select distinct( inet_ntoa(device_ip) ) from cdr where init_time_gmt>='2016-01-01' and client_owner_id=2944 and ext_type='phone' and device_ip>0 and not ( device_ip>>24 in (10, 127, 224) or device_ip>>24=192 and (device_ip&0xFF0000)>>16=168 or device_ip>>24=172 and (device_ip&0xFF0000)>>16=16 or device_ip>>24=169 and (device_ip&0xFF0000)>>16=204 )
особенности добавочных
Некоторые услуги могут работать, как добавочные. Например, регистрация внешнего номера или алиасы (FMC). В этом случае адресами медиа будут выступать адреса транков