Курсы по использованию Asterisk

IP-телефония — технология будущего. Обучитесь работе с IP-АТС Asterisk для того чтобы внедрить и профессионально использовать при решении коммуникационных задач.

Работайте с Asterisk профессионально!

Многоуровневая защита IP-АТС Asterisk

Телефонные станции очень часто становятся объектами хакерских атак. Узнайте, каким образом необходимо строить многоуровневую защиту для Вашей IP-АТС.

Не оставьте хакерам шансов. Защитите свой Asterisk от атак.

Используйте Веб-Интерфейс для удобства настройки

Панель управление FreePBX позволяет легко и удобно управлять всей системой. Научитесь эффективно использовать FreePBX для решения своих задач.

Управление станцией и статистика в окне браузера.

Научитесь работать с Asterisk из консоли

Для понимания работы с Asterisk необходимо уметь настраивать его вручную с конфигурационными файлами и командной строкой CLI Asterisk.

Научитесь «тонкой» настройке Asterisk

Цель курсов - максимум практики.

Обучение нацелено на практическую работу с IP-оборудованием: платы потоков E1, VoIP-телефонные аппараты, голосовые шлюзы FXS и прочее.

Обучение на реальном оборудовании — залог успеха.

Скрипты для записи звука на множестве каналов DAHDI

База знаний Настройка Asterisk

В данной статье рассказывается о назначении и применении утилиты dahdi_monitor, которая позволяет записывать звук с одного из каналов DAHDI в файл, что бывает необходимо при диагностике определенных проблем с DAHDI.

В состав набора инструментов dahdi-tools входит утилита dahdi_monitor, которая позволяет записывать звук с одного из каналов DAHDI в файл, что бывает необходимо при диагностике определённых проблем с DAHDI. Если Вы имеете дело с большим количеством аналоговых линий или с потоком E1, или проблема имеет плавающий характер и нужно записывать звук в течение нескольких часов/дней, чтобы поймать проблему, функционала утилиты dahdi_monitor не достаточно. В этой статье будет приведён набор скриптов для удобной записи звука на множестве каналов DAHDI. Для удобства использования можно сохранить все приведённые скрипты в директории /usr/local/bin.

ПРИМЕЧАНИЕ: при использовании данного набора скриптов для постоянной записи рекомендуется следить за количеством свободного места на жёстком диске (либо вести запись в отдельный раздел жёсткого диска). Зависание процессов dahdi_monitor маловероятно, но не исключено, в случае зависания, нужно убить процессы dahdi_monitor вручную, иначе они заполнят раздел жёсткого диска, в который происходит запись.

Скрипт dahdi_massmonitor


Ниже приведён код скрипта dahdi_massmonitor (основной скрипт, используемый для начала и остановки записи звука на каналах DAHDI):

#!/bin/bash
export PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
ALL_CHANS_MIN=1
ALL_CHANS_MAX=120
SCR_PREFIX=dahdi_mon_
CHANS=""
STOP=""
while [ $# -gt 0 ]; do
case $1 in
stop) STOP="stop"; shift ;;
*)
if [[ ! $1 =~ ^[0-9]+$ ]]; then
if [[ $1 =~ ^([0-9]+)-([0-9]+)$ ]]; then
[ ${BASH_REMATCH[1]} -gt ${BASH_REMATCH[2]} ] && echo -e "$USAGE\nChannel (range) \"$1\" is invalid" && exit 1
else
echo -e "$USAGE\nChannel (range) \"$1\" is invalid"
exit 1
fi
fi
CHANS="$CHANS $1"
shift
;;
esac
done
[ ! "$CHANS" ] && [ ! "$STOP" ] && exit 1
SCREENS="$(screen -list)"
if [ "$STOP" ]; then
for (( i=$ALL_CHANS_MIN; i<=$ALL_CHANS_MAX; i++ )); do
(
IND=$i
[ $IND -lt 10 ] && IND="0$IND"
while read scr; do
screen -S "$(echo $scr | awk '{print $1}')" -X quit >/dev/null 2>/dev/null
done <<<"$(grep -E "$SCR_PREFIX${IND}[[:space:]]" <(echo "$SCREENS"))"
) &
done
disown -h 2>/dev/null
exit
fi
BASE_DIR="/var/log/dahdi_mon"
OUT_DIR="$BASE_DIR/$(date +%m).$(date +%d)"
for chan in $CHANS; do
RE='^([0-9]+)(-([0-9]+))?$'
if [[ $chan =~ $RE ]]; then
from=${BASH_REMATCH[1]}
to=${BASH_REMATCH[3]}
[ ! "$to" ] && to=$from
for (( i=$from; i<=$to; i++ )); do
(
IND=$i
[ $IND -lt 10 ] && IND="0$IND"
if grep -q $SCR_PREFIX${IND} <<<"$(screen -list)"; then
while read scr; do
screen -S "$(echo $scr | awk '{print $1}')" -X quit >/dev/null 2>/dev/null
done <<<"$(grep -E "$SCR_PREFIX${IND}[[:space:]]" <(echo "$SCREENS"))"
fi
mkdir -p "$OUT_DIR/$IND"
FNAME_PREFIX="$(date +%H:%M:%S)"
screen -dmS $SCR_PREFIX${IND} dahdi_monitor $IND -f "$OUT_DIR/$IND/${FNAME_PREFIX}_$IND.raw"
) &
done
fi
done
disown -h 2>/dev/null

Скрипт dahdi_massmonitor принимает в качестве параметров номера каналов DAHDI (можно указывать диапазоны каналов) и запускает для каждого указанного канала утилиту dahdi_monitor внутри screen. Если запись на каких либо из указанных каналов уже была ранее включена с помощью скрипта dahdi_massmonitor, то запись звука на этих каналах будет остановлена и начата заново в другой файл (таким образом можно проворачивать файл записи через равные промежутки времени с помощью cron). Если передать в качестве параметра значение «stop», запись будет прекращена на всех каналах.
В директории /var/log/dahdi_mon (переменная BASE_DIR), создаются поддиректории с именами вида <месяц>.<день>, в этих поддиректориях создаются поддиректории, названные номерами каналов, в них сохраняются файлы записей, сделанных на соответствующих каналах.
В переменной ALL_CHANS_MAX в начале скрипта указан наибольший номер канала, на котором может быть включена запись, увеличьте это значение, если требуется.

Примеры использования скрипта:
Включение записи на каналах 5-10, 15 и 17 (если выполнить эту команду снова, файлы записей будут провёрнуты):

dahdi_massmonitor 5-10 15 17

Прекращение записи на всех каналах:

dahdi_massmonitor stop

Для постоянной записи можно добавить следующую строку в crontab (файлы записи будут проворачиваться каждые 15 минут):

*/15 * * * * /usr/local/bin/dahdi_massmonitor 5-10 15 17


Скрипт dahdi_conv_raw


dahdi_monitor надёжно сохраняет звук только в сыром виде (raw-файлы), в случае записи звука сразу в wav, возможно сохранение повреждённых файлов.
Ниже приведён код скрипта dahdi_conv_raw, он конвертирует полученные raw-файлы в wav с помощью утилиты sox (для работы скрипта также требуется утилита lsof, с помощью которой проверяется, завершена ли запись данных в файл).

#!/bin/bash
export PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
BASE_DIR="/var/log/dahdi_mon"
for file_raw in $(find $BASE_DIR/ -name "*.raw" -mmin -30); do
file_wav="$(echo $file_raw | sed 's|\.raw$|.wav|')"
filename="$(echo "$file_raw" | rev | cut -f 1 -d / | rev)"
if [ ! -f "$file_wav" ] && ! grep -q "$filename" <(lsof -c dahdi_mon -c sox); then
sox -r 8000 -b 16 -s -c 1 "$file_raw" "$file_wav"
rm -f "$file_raw"
fi
done

Просто добавьте выполнение этого скрипта в crontab:

*/10 * * * * /usr/local/bin/dahdi_conv_raw

Скрипт del_old_dahdi_raws


При ведении постоянной записи необходимо периодически удалять старые файлы записей. Ниже приведён код скрипта del_old_dahdi_raws, скрипт удаляет из директории /var/log/dahdi_mon (переменная RAW_DIR) файлы старше 8-ми часов (переменная MINS_TO_KEEP, значение в минутах).

#!/bin/bash
MINS_TO_KEEP=480
RAW_DIR=/var/log/dahdi_mon
[ -d "$RAW_DIR" ] && /usr/bin/find $RAW_DIR -type f -mmin +$MINS_TO_KEEP -exec rm -f \{\} \;
[ -d "$RAW_DIR" ] && /usr/bin/find $RAW_DIR -type d -empty -exec rmdir \{\} \; >/dev/null 2>&1

Этот скрипт тоже нужно добавить в crontab:

*/30 * * * * /usr/local/bin/del_old_dahdi_raws




dahdi, for, 1C