Отслеживание клиентских 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%"

Логика сбора данных следующая:

  1. Существует кэш IP, с которых авторизовывался добавочный, длительностью сутки (отсчет от последнего рестарта kamailio). Ключом кэша являтется "имя добавочного + IP"
  2. При каждом авторизованном запросе от добавочного (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). В этом случае адресами медиа будут выступать адреса транков