Крокодилко

Снимаем дамп сетевого трафика стандартными средствами windows

Метода работает для windows 2008r2 (win7) и старше.
Пример: Моя ip-атс находится по адресу 192.168.0.5.
старт снятия дампа трафика: netsh trace start persistent=yes capture=yes tracefile=c:\trace\trace.etl IPv4.Address=192.168.0.5 Protocol=(TCP,UDP)  maxSize=500

останов снятия дампа трафика: netsh trace stop
Использованы опции:
maxSize - Максимальный размер файла трассировки. "0" - без ограничения, по умолчанию 0.
persistent - Продолжит ли работать команда после рестарта компьютера до “Netsh trace stop”, по умолчанию no
traceFile - Местоположение файлв трассировки. Путь и имя файла по умолчанию: “traceFile=%LOCALAPPDATA%\Temp\NetTraces\NetTrace.etl”
capture - Необходим ли захват пакетов в дополнение к трассировке событий. По умолчанию нет.

Файл etl можем просмотреть в Microsoft Message Analyzer (там же можно сконвертировать в cap для просмотра в wireshark):


подробнее: https://technet.microsoft.com/ru-ru/library/dd878517(v=ws.10).aspx
Крокодилко

Данные для Okboard из служебного сценария oktell

Okboard (https://oktell.ru/utilites/okboard/) позволяет в качестве наиболее гибкого варианта формировать наборы данных для отображения того или иного показателя посредством sql запроса. Однако существуют данные в oktell, например, текущее состояние очередей, текущие статусы операторов, текущее состояние линий и т.д., которые проще и без лишней нагрузки на sql может быть выбрать компонентом «статус объекта».  Так же данные отчёта могут быть сочетанием нескольких разных источников: данных веб-сервиса, запроса к базе данных и т.д. Соответственно, оптимальный вариант передать задачу формирования набора данных на служебный сценарий oktell. Как это сделать.

Пример:
Необходимо показывать текущее состояние пользователей (готов, в перерыве, занят).
Collapse )
Результат:

PS Исходники clr-функции : https://yadi.sk/d/xN9MCKbGheFFE
пример служебного сценария:
https://yadi.sk/d/XB-ptCJxheGFd
Крокодилко

Выяснение периодов отсутствия регистраций от sip-аккаунта

Парсинг SIP_YYYY_MM_DD.log лога oktell на предмет выяснения наличия периодов отсутствия регистрации по конкретному сип-аккаунту:

#входные параметры скрипта
$file = 'C:\OKTELL\_OktellWorkDir\Files\Base\Log\Log\Hardware\SIP\SIP_YYYY_MM_DD.log' # файл сиплога, который парсим
$login = 'tricky_sip_login' # логин, который просматриваем
#-------------------------------------------
$f = select-string -Path $file -pattern $login -context 1,0
$threshold = 120 #порог срабатывания вермя за которое не произошло новой регистрации
for($i1=0;$i1 -lt $f.count; $i1++)
{
  $str = $f[$i1].ToString().Replace($file+':','')
  $str = $str.substring($str.indexof(':')+1,12)
  $curdate = [DateTime]::ParseExact($str,'HH:mm:ss:fff',[System.Globalization.CultureInfo]::InvariantCulture)
  if($i1 -gt 0)
  {
      if($curdate.Subtract($lastdate).TotalSeconds -gt $threshold)
      {
          #$f[$i1].ToString().Replace($file+':','')
          'Текущее время: '+$curdate.ToString('HH:mm:ss:fff')+'; Прошло времения с предыдущей регистрации: ' +$curdate.Subtract($lastdate).TotalSeconds+' c.'
      }
  }
  $lastdate = $curdate;
}

Пример работы:
Текущее время: 02:40:41:301; Прошло времения с предыдущей регистрации: 128.515 c.
Текущее время: 02:44:11:115; Прошло времения с предыдущей регистрации: 209.814 c.
Текущее время: 11:20:47:106; Прошло времения с предыдущей регистрации: 30995.99 c.
Текущее время: 21:11:57:448; Прошло времения с предыдущей регистрации: 154.748 c.
Текущее время: 21:54:09:843; Прошло времения с предыдущей регистрации: 209.909 c.
Текущее время: 22:31:40:813; Прошло времения с предыдущей регистрации: 2250.97 c.

Крокодилко

Узнать пароль к вебморде Yeastar TE100 через SSH

Возникла проблема помню root-пароль на ssh шлюза yeastar TE 100, а пароль к админке вебморды забыл. Звоню в СТП - мне говорят (сегодня сделал контрольный звонок :-) - с марта ничего не поменялось), что, мол "бобик сдох" - узнать нельзя, можно только сбросить устройство. Как же так? Неужели нельзя узнать пароль имея доступ по руту к девайсу.
Вероятнее всего пароли хранятся в какой либо базе. Ищем базу. Поиск mysql в процессах даёт "пусто", а find / -name "*sql*" даёт:
root@TE100:/etc# find / -name '*sql*'
/bin/sqlite3
/lib/libsqlite3.so.0.8.6
/lib/libsqlite3.so
/lib/libsqlite3.so.0
/usr/lib/ocf/resource.d/heartbeat/pgsql
/usr/lib/ocf/resource.d/heartbeat/mysql
/usr/lib/asterisk/modules/cdr_sqlite3_custom.so
/MyPBX.sqlite
/etc/asterisk/cdr.sqlite
/etc/asterisk/cdr_sqlite3_custom.conf
/etc/asterisk/cdr-sqlite3
/tmp/yscdrsqlite31017.fl
/www/MyPBX.sqlite
/persistent/var/log/asterisk/cdr-sqlite3
/persistent/var/lib/asterisk/db/firewall.sqlite
/persistent/var/lib/asterisk/db/autop.sqlite
/persistent/var/lib/asterisk/db/MyPBX.sqlite
Особый интерес вызвало /persistent/var/lib/asterisk/db/MyPBX.sqlite
Качаем:
pscp -P 8022 root@DeviceAddress:/persistent/var/lib/asterisk/db/MyPBX.sqlite c:\LocalFolder
Открываем, изучаем список табличек, находим pwdsettings .
Запрос
select password from pwdsettings
where name='admin'
даёт нам искомый пароль.

Он хранится в открытом виде .
Рискну предположить, что записью в базу и возвратом отредактированного файла базы обратно на железку можно и установить пароль (не пробовал - железка в продакшне).
Крокодилко

Табличный отчёт с итогами

В редакторе отчётов oktell при построении табличного отчёта отсутствует нормальный механизм подсчёта итогов. При работе oktell с ms sql 2008 (наконец то из дистрибутива вырезали древний ms sql 2005) и выше для подсчёта и выдачи итогов можно воспользоваться средством t-sql "groupping sets", при чём это делается одним select-ом
Пример:
Сделать табличный отчёт за период по количеству звонков с выдачей итогов по месяцам, годам и общему итогу:

select isnull(cast(grpyear as nvarchar(50)), 'Общий итог:') grpyear1,
case when grpyear is null then '' else isnull(cast(grpmonth as nvarchar(50)),'Итого по году:') end as grpmonth1, --если общий итог, то не выводим текст-оповещение промежуточного итога
cow
from
(
SELECT year([TimeStart]) as grpyear
,MONTH([TimeStart]) as grpmonth
,COUNT(distinct idchain) cow
, case when MONTH([TimeStart]) is null then 1 else 0 end monthorder --флаг сортировки по месяцу
, case when year([TimeStart]) is null then 1 else 0 end yearorder --флаг сортировки по году
FROM [oktell].[dbo].[A_Stat_Connections_1x1]
where TimeStart between @begin and @end
group by GROUPING sets
(
(year([TimeStart]),MONTH([TimeStart])), --итог по месяцу в году
(year([TimeStart])), --итог по году
() --общий итог
)
) tmp
order by yearorder, grpyear, monthorder, grpmonth

основная проблема в том, что строки с итогами имеют значение поля, по которому идёт группировка (в нашем случае год и месяц коммутации year([TimeStart]),MONTH([TimeStart])) NULL, а при сортировке для выдачи NULL идёт первыми, поэтому введены специальные поля: monthorder, yearorder - предназначенные для того, чтобы итоговые строки шли после строк, по которым собирается итог:
order by yearorder, grpyear, monthorder, grpmonth
Результат:
ИтогиОтчёт
Крокодилко

Ни единого разрыва?

Далее скрипт powershell поиска по канальным логам комутаций с большими задержками голоса. На вход подаются: порог срабатывания мсек, дата за которые просматривать логи, канал с которого и по который просматривать.
Ищет и разбирает записи в канальном логе вида (включена трассировка медиатрафика в конфигурации)
14:14:02:812    1724  bas-strm -- stream rtp-audio-stream : stream statistics:
--OUT------------------
packets sent     : 2763
bytes sent       : 475236
delays           : 0
max delay        : 0
average delays   : 20
--IN-------------------
packets received : 251
bytes received   : 40790
out of order     : 0
invalid          : 0
lost             : 0
delays           : 18
max delay        : 11451
average delays   : 220

Collapse )
Крокодилко

Очумелые ручки + oktell + NAT (ч. 2)

В прошлом году под автонастройку NAT в Oktell было собрано костылище: http://gosnorkokontrol.livejournal.com/56599.html Вполне работоспособное костылище, один минус - для применения настроек необходим был рестарт "аппаратуры", который разрывал все текущие разговоры. С момента появления костыля в oktell была добавлена замечательная "плюшка": "динамическая карта сети" (http://wiki.oktell.ru/%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%B0%D1%80%D1%82%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8) . При чём добавлена в 3 этапа:
1) возможность создавать/изменять/удалять объекты
2) возможность получать ответ "а оно вообзе создалось/удалилось/изменилось" в результате нашей попытки (без этого пункта - пункт 1 был, ИМХА, весьма бестолков)
3) возможность изменять любые свойства сервера "аппаратуры" из "параметров аппаратуры"

Всё это поможет нам сделать деревянную ногу менее деревянной :)
Collapse )