25 окт. 2013 г.

Полезные команды Asterisk (буду дополнять)


1. Переполнение памяти SMS

Если нужно принять SMS-ку, а в консоли (asterisk -rvv) пишет следующее:

ERROR[15627]: at_response.c:1420 at_response_smmemfull: [dongle0] SMS storage is full

то, логично - нам необходимо почистить память для смс-ок.
Есть два вида памяти: 
  • память SIM
  • память модема
Для очистки памяти SIM применяем в консоли астериска последовательно команды:

dongle cmd <dongle_name> AT+CPMS=\"SM\",\"SM\",\"SM\" 
dongle cmd <dongle_name> AT+CMGD=1,4

Для очистки памяти модема применяем в консоли астериска последовательно команды:

dongle cmd dongle_name AT+CPMS=\"ME\",\"ME\",\"ME\" 
dongle cmd dongle_name AT+CMGD=1,4

Консолька нам выдасть что-то типа:

[dongle_name] 'AT+CMGD=1,4' Command queued for execute
[dongle_name] Got Response for user's command:'OK'
[Oct 25 07:41:57] NOTICE[15627]: at_response.c:1714 at_response: [dongle_name] Got Response for user's command:'OK'

Всё прошло гладко. Теперь можно принимать SMS-ки.

7 окт. 2013 г.

Проверка доступности портов между двумя Linux-машинами (для Solaris тоже работает)

Бывают ситуации, когда нам необходимо проверить видимость TCP портов одной машины для другой. Казалось бы всё просто - telnet. А если на серверной машине еще не установлено или не запущено приложение, слушающее нужный порт? Я уверен, что существует масса способов, но мне было проще написать 2 маленьких скрипта на Python.

Один скрипт - сервер. Слушает заданный порт и пишет в консоль информацию о клиентах. А второй - клиентский скрипт - стучится по заданному IP в заданный порт и возвращает ответ от сервера (если порт доступен).

Серверный скрипт.


#!/usr/bin/env python
import socket, sys
# Server address and buffer size
TCP_IP = '0.0.0.0'
BUFFER_SIZE = 1024 
# Usage string
usage = "server.py PORT"
# Check number of arguments and print usage if not enough arguments
if (len(sys.argv) < 2):
        print(usage)
        sys.exit(0)
TCP_PORT = int(sys.argv[1])
# Create socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
# Listen for client connection until Ctrl+C will be pressed
while 1:
        c = s.accept()
        cli_sock, cli_addr = c
        cli_sock.send("Hello, person from %s"%(str(cli_addr)))
        cli_sock.close()
        print("received data from:", str(cli_addr))

Как сохранить кадр из видео в Linux

В командной строке переходим в нужную папку и выполняем команду:

mplayer -vo png -ss 00:30:00 -frames 1 video-file.mp4

Это даст нам следующее:

-vo png - формат изображения png
-ss 00:25:00 - кадр будет взят из 25й минуты фильма (формат ЧЧ:ММ:СС)
-frames 1 - сохранит только 1 кадр, в текущую директорию.
video-file.mp4 - путь к файлу содержащему видео (кодек видео должен присутствовать в системе)

4 окт. 2013 г.

Использование iperf для тестирования мультикаста

Для того, чтобы проверить, приходит ли на наш сервер/рабочую машину/ПК мультикаст, можно использовать и tcpdump:

tcpdump -i bond0.666 udp -nn port 4444

 но он не делает join к мультикаст группе и, в зависимости от настройки сетевого оборудования, вы можете мультикаст и не увидеть.

Лучше использовать утилиту iperf. Она служит для анализа быстродействия сети, и для наших целей отлично подходит.

Итак, на Debian устанавливаем просто: 

aptitude install iperf

А для RHEL дистрибутивов (RedHat, Oracle Linux, CentOS etc.) нужно или добавить репозиторий RepoForge или посмотреть пакет для своей версии ОС тут http://pkgs.repoforge.org/iperf/ и установить, например:

yum install http://pkgs.repoforge.org/iperf/iperf-2.0.4-1.el6.rf.x86_64.rpm

или

rpm -Uhv http://pkgs.repoforge.org/iperf/iperf-2.0.4-1.el6.rf.x86_64.rpm

Далее, если адрес мультикаст группы 239.200.1.1, а порт 4444, то делаем команду и смотрим результат:

iperf -s -u -B 239.200.1.1 -i 1 -p 4444

здесь

  • -s -режим сервера, 
  • -u - использовать UDP, 
  • -i 1 - выводить информацию каждую секунду, 
  • -B и -p - адрес нашего мультикаста.