Запись на компакт-диск по протоколу SSH
Стандартный метод записи последовательности локальных файлов, используемый в операционных системах UNIX, предусматривает использование двух программ. Сначала одна из них, mkisofs, вызывается для упаковки записываемых файлов в стандартную файловую систему, понятную для CD-ROM. Другим словами, она создает файловую систему в формате IS09660. Затем результат упаковки (файлы в ISO-формате) пересылаются другому приложению, cdrecord, который выполняет запись файлов на CD-ROM (прожиг файлов). Полная процедура описанных действий выглядит следующим образом.
Сначала ищется и обнаруживается устройство записи на компакт-диск SCSI–ID, которое планируется использовать:
bash-2.05a# cdrecord -scanbus
Cdrecord 1.10 (i386-unknown-freebsd4.3) Copyright (C) 1995-
2001 Jorg Schilling
Using libscg version “schily-0.5”
scsibus0:
0,0,0 0) ‘PLEXTOR ’ ‘CD-ROM PX-40TS ’ ‘1.11’
Removable CD-ROM
0,1,0 1) ‘YAMAHA ’ ‘CRW2100S ’ ‘1.0H’
Removable CD-ROM
0,2,0 2) ‘YAMAHA ’ ‘CDR400t ’ ‘1.0q’
Removable CD-ROM
0,3,0 3) *Затем для записи выбирается директория или набор файлов, которые пользователь собирается записать на компакт-диск. Приложение подключает к именам файлов атрибуты Joliet и Rock Ridge. В результате появляется возможность использовать длинные имена файлов, которые стандарт IS09660 поддерживает обычным образом. Часто бывает полезным при использовании программы mkisofs дополнительно указать опцию – f следом за symlinks. В следующем примере будет показано, как задуманное реализовать проще:
bash-2.05a# mkisofs -JR toburn/ > tools.iso
22.21% done, estimate finish Thu Jan 3 19:17:08 2002
44.42% done, estimate finish Thu Jan 3 19:17:08 2002
66.57% done, estimate finish Thu Jan 3 19:17:08 2002
88.78% done, estimate finish Thu Jan 3 19:17:08 2002
Total translation table size: 0
Total rockridge attributes bytes: 726
Total directory bytes: 0
Path table size(bytes): 10
Max brk space used c064
22544 extents written (44 Mb)Как читатель может заметить, после выполненных действий пользователь должен поскучать без дела, ожидая, пока область дискового пространства растрачивается понапрасну. Гораздо более изящное решение заключается в непосредственном перенаправлении вывода программы mkisofs на вход приложения cdrecord. И действительно, именно так в большинстве случаев реализован прожиг данных в операционной системе UNIX:
bash-2.05a # mkisofs -JR toburn/ | cdrecord dev=0,1,0
speed=16 -
Cdrecord 1.10 (i386-unknown-freebsd4.3) Copyright (C) 1995-
2001 Jorg Schilling
scsidev: ‘0,1,0’
scsibus: 0 target: 1 lun: 0
Using libscg version ‘schily-0.5’
Device type : Removable CD-ROM
Version : 2
Response Format: 2
Capabilities : SYNC
Vendor_info : ‘YAMAHA ’
Identifikation : ‘CRW2100S ’
Revision : ‘1.0H’
Device seems to be: Generic mmc CD-RW.
Using generic SCSI-3/mmc CD-R driver (mmc_cdr).
Driver flags : SWABAUDIO
cdrecord: WARNING: Track size unknown. Data may not fit on disk.
Starting to write CD/DVD at speed 16 in write mode for
single session.
Last chance to quit, starting real write in 9 secondsСледует помнить одно важное правило. Оно заключается в том, что почти всегда, когда пользователь пожелает воспользоваться каналом для передачи данных между процессами, SSH позволит ему разместить процессы на разных хостах. Поскольку процессы создания файловой системы и ее записи отделены друг от друга, то можно создать файловую систему на одной машине, а записать ее на другой:
dan@OTHERSHOE ~
$ mkisofs.exe -JR backup/ | ssh dan@10.0.1.11 “cdrecord
dev=0,1,0
speed=8 -”
dan@10.0.1.11’s password:
scsidev: ‘0,1,0’
scsibus: 0 target: 1 lun: 0
Cdrecord 1.10 (i386-unknown-freebsd4.3) Copyright (C) 1995-
2001 Jorg Schilling
Using libscg version ‘schily-0.5’
Device type : Removable CD-ROM
Version : 2
Response Format: 2
Capabilities : SYNC
Vendor_info : ‘YAMAHA ’
Identifikation : ‘CRW2100S ’
Revision : ‘1.0H’
Device seems to be: Generic mmc CD-RW.
Using generic SCSI-3/mmc CD-R driver (mmc_cdr).
Driver flags : SWABAUDIO
cdrecord: WARNING: Track size unknown. Data may not fit on disk.
Starting to write CD/DVD at speed 8 in write mode for single
session.
Last chance to quit, starting real write in 8 secondsБыстродействие и надежность базовой архитектуры сети являются критичными параметрами для поддержки устойчивого процесса записи данных на CD-диск. Слишком большой период времени, в течение которого не производится обновление пересылаемого на диск содержимого, приводит к тому, что вовсе ничего не будет записано. В итоге пространство на диске будет потрачено впустую (если только устройство записи данных на компакт-диск не поддерживает новую и полезную технологию под названием Burn-Proof, которая в большинстве случаев позволяет избежать бесполезной траты дисковой памяти). Если необходимо записать данные на компакт-диск, пересылая их по медленной или ненадежной сети, то следует воспользоваться удобной возможностью протокола SSH удаленно выполнять не одну, а серию команд. В этом случае последовательность команд будет состоять из команд поиска ISO, записи найденных данных на компакт-диск и удаления уже ненужных данных. Используемое при этом форматирование преследует единственную цель: сделать текст команд удобочитаемым. Что действительно необходимо для выполнения многократных команд за одно обращение к SSH, так это использование между командами точки с запятой.
dan@OTHERSHOE ~
$ mkisofs.exe -JR backup/ | ssh dan@10.0.1.11 \
> “cat > /tmp/burn.iso && \
> cdrecord dev=0,1,0 speed=8 /tmp/
> burn.iso && \
> rm /tmp/burn.iso”
dan@10.0.1.11’s password:
Total translation table size: 0
Total rockridge attributes bytes: 2829
Total directory bytes: 0
Path table size(bytes): 10
Max brk space used 9000
3066 extents written (5 Mb)
scsidev: ‘0,1,0’
scsibus: 0 target: 1 lun: 0
Cdrecord 1.10 (i386-unknown-freebsd4.3) Copyright (C) 1995-
2001 Jorg
Schilling
Using libscg version ‘schily-0.5’
Device type : Removable CD-ROM
Version : 2
Response Format: 2
Capabilities : SYNC
Vendor_info : ‘YAMAHA ’
Identifikation : ‘CRW2100S ’
Revision : ‘1.0H’
Device seems to be: Generic mmc CD-RW.
Using generic SCSI-3/mmc CD-R driver (mmc_cdr).
Driver flags : SWABAUDIO
Starting to write CD/DVD at speed 8 in write mode for single
session.
Last chance to quit, starting real write in 8 seconds.
Акустический канал: передача аудиоданных с помощью протоколов TCP и SSH
Иногда приходится что-то делать только потому, что это действительно круто. Хотя копирование файлов со всех сторон полезно, но это не обязательно интересно. Интересно подключиться к стереосистеме читателя, которая соединена с выходом приложения Winamp, выполняющейся на машине с установленной операционной системой FreeBSD в его лаборатории / офисе / жилой комнате. Вот это действительно интересно! Как это может работать? В составе приложения Winamp есть подключаемый модуль (плагин) под названием SHOUTcast DSP, который предназначен для передачи потока выходных данных проигрывателя к работающей в онлайновом режиме радиостанции для перераспределения его среди других проигрывателей. В свою очередь, проигрыватели инкапсулируют поступающие к ним от приложения Winamp данные, преобразуя их в сжатый поток данных формата MP3 с фиксированной скоростью передачи битов. При этом проигрыватели находятся в готовности отослать преобразованные данные на радиосервер. Автору известна универсальная программа инкапсуляции звука приложения Winamp, но по этому поводу у него есть идея получше.
1. Поскольку предпринимается попытка передать поток аудиоданных в формате MP3 из UNIX-окружения непосредственно на динамики персонального компьютера, то потребуется соответствующее программное обеспечение с функциями проигрывателя. Это либо программа mpg123, либо программа madplay. Программа mpg123 де-факто является стандартом проигрывателя аудиоданных в формате MP3 для операционной системы UNIX, хотя у нее есть определенные погрешности в качестве звучания. Программа madplay – гораздо более высококачественный проигрыватель, но, по крайней мере при работе в операционной системе FreeBSD, время от времени она работает нестабильно. Программу mpg123 можно найти по адресу www.mpg123.de, а madplay – загрузить с сайта www.mars.org/home/rob/proj/mpeg/.
2. Стоит задача не только получить поступающий откуда-то поток аудиоданных в формате MP3. Следует хотя бы чуть-чуть реализовать функциональные возможности радиостанции. Не волнуйтесь, нет необходимости в повторной реализации полных протоколов их работы. Необходимо только сымитировать доступ к их паролю, что бы ни скрывалось за ним. Как правило, это означает отправку «OK» в момент подключения, после чего пользователь начнет получать поток данных в формате MP3. Так, вместоmpg123 – # play mp3’s being piped in
используем
sh -c ‘echo OK; exec mpg123 -’ # first say OK, then play MP3s being piped in
3. Выберите порт для shoutcast и увеличьте его на 1. Через выбранный таким образом порт пользователь ссылается на источник, откуда он пожелал прослушать поток аудиоданных. Таким образом, выбранный порт – это не порт, через который проигрыватель читателя будет передавать поток аудиоданных. Подключаемый модуль shoutcast через порт 8000 обслуживает передачу данных пользователем, но получает музыку через порт 8001. Это немного необычно, но позволяет упростить многие вещи. Добавьте выражение Port+1 к /etc/services в качестве сервиса «shout» так, как это показано ниже:
su-2.05a# grep shout /etc/services shout 8001/tcp
(В дальнейшем изложение будет вестись исходя из предположения, что пользователь выбрал порт 8000.) 4. Теперь, после выбора порта для прослушивания и «демона», который знает, что ему делать, можно объединить их в файле inetd.conf и на самом деле проигрывать все, что поступает в ваш адрес:
shout stream tcp nowait root /bin/sh sh -c ‘echo OK; exec mpg123 -’
Почти всегда плохо, если в приложении, подключающем что-либо к сети, рядом с директорией «root» можно увидеть «sh» (гарантируется, что использование возможностей MP3-проигрывателя на всю катушку приведет к переполнению буфера), но в любом случае надо сделать все необходимое для получения доступа к звуковому устройству. Этого можно добиться путем смягчения ограничений на работу звукового устройства при помощи ввода chmod 0666 /dev/dsp или chmod 0666 / dev/dsp0 и выполнении программы mpg123 без каких-либо специальных разрешений, исключая право на создание помех:
shout stream tcp nowait nobody /bin/sh sh -c ‘echo OK; exec mpg123 -’
Пользователям операционной системы Linux, особенно ее версии Red Hat. Вполне возможно, что в состав дистрибутива используемой ими операционной системы включена программа xinetd вместо inetd. Пользователь узнает это по присутствию директории /etc/xinetd.d. В этом случае последовательность действий пользователя вместо уже описанной будет следующей:
a) создайте файл /etc/xinetd.d/shout;
b) запишите в него следующий текст:# default: on
# description: play mp3s
service shout
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = nobody
server = /bin/sh
server_args = -c ‘echo OK; exec mpg123 –’
}c) путем ввода /etc/rc.d/init.d/xinetd restart перезапустите xinetd.
5. Наконец, читателю потребуется модуль SHOUTcast DSP, который можно найти по адресу www.shoutcast.com/download/broadcast.phtml. По различным причинам рассматривается случай, когда пользователь собирается инкапсулировать его внутри превосходного подключаемого модуля SqrSoft Advanced Crossfading Output, написанного Марианом Хернаном Лопезом (Mariano Hernan Lopez). Он доступен по адресу www.winamp.com/plugins/detail.jhtml?componentId=32368. Для начала необходимо установить перекрестный регулятор уровня сигнала (микшер):
а) загрузите Winamp и щелкните правой кнопкой мыши на интерфейсном окне программы. Выберите пункты меню Options I Preferences, затем Plugins-Output. Выберите SqrSoft Advanced Crossfading и щелкните на Configure;
б) щелкните на вкладке Buffer. Проверьте установки на соответствие установкам, показанным на рис. 13.5;
в) щелкните на вкладке Advanced. Активизируйте Fade-On-Seek;
г) щелкните на вкладке DSP. Выберите Nullsoft SHOUTcast Source DSP;
д) щелкните на кнопке OK для фиксации внесенных исправлений и заново запустите программу Winamp.
6. На этом этапе рядом с окном программы Winamp всплывет новое окно. Оно предназначено для управления программой SHOUTcast DSP, и его размеры не могут быть уменьшены, что сильно раздражает. Ниже приведена последовательность действий по настройке программы SHOUTcast DSP:
а) щелкните на вкладке Input. Удостоверьтесь, что устройством ввода данных (Input Device) является Winamp (пользователь может также установить эту систему для разгрузки своей звуковой карты. Это означает, что он может создать канал, передавая выходной сигнал со своих системных микрофонов во внешний мир);
б) щелкните на вкладке Encoder. Удостоверьтесь, что первым кодирующим устройством (Encoder 1) выбрано MP3 Encoder вместе с его установками 256 Кб/с, 44,100 КГц, Stereo;
в) щелкните на вкладке Encoder. Установите в поле IP-адреса Address значение IP-адреса своего сервера и введите в поле номер порта величину 8000. Это на единицу меньше номера порта, который пользователь на самом деле прослушивает с сервера. Удостоверьтесь, что значение кодирующего устройства равно 1;
г) щелкните на кнопках Connect и Play непосредственно на окне программы Winamp. Посмотрите, что получилось! (См. рис. 13.6.)
7. В сказанном был бы элемент незавершенности, если не добавить несколько слов об организации туннеля передачи аудиоданных при помощи протокола SSH. Для этого известны два основных способа. Первый применяется, когда демон существует независимо от туннеля (как, например, в случае, когда поток аудиоданных передается в конце концов на внешний радиосервер). Второй способ характеризуется запуском демона одновременно с туннелем передачи данных. Второй способ предпочтительнее первого, поскольку при его использовании не остается лазеек для внедрения кем-либо шума, который может хорошо прослушиваться и имитировать звук… в течение короткого времени.
• Независимый демон. Предположим, что у читателя достаточно прав для доступа и модификации файла inetd.conf или программы xinetd при помощи выполнения единственного действия: запуска ssh – L8001:127.0.0.1:8001 user@mp3player. Пусть он запустит программу Winamp, используя SocksCap, или, что более вероятно, только изменит выходной IP-адрес сервера на значение 127.0.0.1. Если читатель действительно попытается создать туннель к реальному shoutcast/ icecast серверу, то следует заменить значение 8001 портом, который каждый может прослушать, увеличив его номер на единицу.
• Зависимый демон. Для использования зависимого демона нужна программа netcat, скомпилированная, по крайней мере, на стороне клиента с опцией DGAPING_SECURITY_HOLE. Однако это все еще чрезвычайно полезный метод общего назначения, который нужно знать. Он работает подобно тому, как показано ниже:$ ssh -L18001:127.0.0.1:18001 effugas@10.0.1.11 “nc
-l -p 18001 -e ./plaympg.sh”
effugas@10.0.1.11”s password:(Файл Plaympg – это нечто больше, чем файл, содержащий команды #!/bin/sh -c ‘echo OK; exec mpg123 -’ .)