Clarion Co. Ltd. это японская компания название которой происходит от древнегреческого духового инструмента кларион. Он похож на современную S-образную трубу, но с меньшим расширением и более толстыми стенками. Такое название компании Clarion указывает на близкую ее связь с музыкой. И действительно, звучание компонентов Clarion весьма «музыкальное».
Clarion – модельный ряд мультимедиа для автомобиля.
Clarion Co. Ltd. это японская компания название которой происходит от древнегреческого духового инструмента кларион. Он похож на современную S-образную трубу, но с меньшим расширением и более толстыми стенками. Такое название компании Clarion указывает на близкую ее связь с музыкой. И действительно, звучание компонентов Clarion весьма «музыкальное».
Эта статья не просто текст это презентация новой линейки техники производимой компанией Clarion. По этому здесь нет оценки достоинств и недостатков конкретных аппаратов.
Первое это концепция нового каталога Clarion. Она включает в себя три ключевых фактора.
• Максимально тесная интеграция функциональных и развлекательных возможностей в один комплекс автомобильной электроники
• Стремление сделать звучание совершенным
• Безопасность вождения за счёт использования различных систем – начиная от hands free (возможность общаться по телефону, не отвлекаясь от дороги) и заканчивая удобным управлением аппаратурой с использованием командных шин и общих центров управления
Специалисты Clarion хорошо потрудились над совершенствованием своей продукции по всем трем направлениям и создали не мало новинок. Насколько они получились удачными, можно узнать сами, опробовав интересующие модели в магазинах или прочитав объективные оценки компетентных специалистов в области Car Audio.
Поскольку новых моделей много и каждая имеет массу особенностей, подробных технических характеристик приводится, не будет (это лишь обзорная статья по ключевым новинкам). Их можно без труда найти на русском сайте Clarion. Навигационные мультимедиакомплексы
Clarion MAX973HD
Превосходный аппарат, объединивший «под одной крышей» все нужные современному автомобилисту функции: подробнейшая навигация, воспроизведение музыки и видео, средства для интеграции мобильного телефона в общую систему, подключение всевозможной периферии – как проводами, так и по беспроводному каналу. И конечно, аппарат готов для совместной работы с плеерами Apple iPod.
Особенности модели
• Сенсорный монитор, 7 дюймов по диагонали
• Встроенный 30-гигабайтный жёсткий диск для хранения дорожных карт и медиаданных
• Встроенный DVD/CD/MP3/WMA-плеер
• AV-входы для подключения дополнительного оборудования, полная совместимость с iPod
• Просмотр карт в масштабе от 25 м до 256 км, различные режимы отображения карт в зависимости от времени суток
• Голосовые подсказки, функция расчёта оптимального маршрута, вычисление времени в пути с учётом дорожной ситуации
• Трёхмерное настраиваемое меню
• Усилитель MOSFET (номинальная мощность 4х31 Вт)
• Bluetooth и возможность подключения внешней камеры обзора
• Работа в двух зонах
Кроме флагманской модели MAX973HD в новом каталоге компании есть два не менее интересных мультимедиакомбайна с DVD-плеером, 7-дюймовым экраном и возможностью подключения блока навигации: MAX678RVD и VRX878RVD. И почти то же самое, только без навигации, – VRX578RUSB.
Наконец – VRX378RUSB. Однодиновое устройство, совмещающее мультиформатный DVD-плеер и медиаресивер. Аппарат обладает обширными возможностями для тесной интеграции всего автомобильного оборудования. Дисплей 3,5 дюйма, присутствуют поддержка iPod, Bluetooth и возможность подключения внешней камеры обзора.
Мониторы
В каталоге Clarion представлены четыре монитора. Два потолочных называются OHM1073 (10,2”) и OHM773 (7”). Монтируемых в подголовники тоже два: 7” и 5,6”.
Все модели имеют формат 16:9.
Потолочные мониторы могут крепиться через «прокладку» – плоский модуль (по сути, это компактный DVD-проигрыватель), который превратит монитор в автономный медиацентр с возможностью воспроизведения DVD, CD и различных «сжатых» аудиоформатов.
Головные устройства.
Clarion предлагает широкий ассортимент головных устройств – от необычных до типичных по возможностям, но добротных аппаратов. В новом модельном ряду «голов» имеется много чего интересного. Например – FB278RBT. В этом устройстве нет CD-привода. В нём вообще нет движущихся частей. Музыка может воспроизводиться с карты памяти SD (слот на торце съёмной панели), с iPod или с любого устройства с протоколом передачи данных BT-Audio (Bluetooth Audio). FB278RBT не боится встрясок – самое то для любителей внедорожного экстрима, у которых частенько заедает музыка во время путешествий по ухабам. Цвет подсветки можно выбрать в настройках.
Не менее интересен 2-диновый 6-дисковый CD/MP3/WMA-ресивер WXZ468RMP в ретродизайне. Большие рукоятки, поддержка iPod, система оптимизации области прослушивания, 9-полосный эквалайзер, цифровой радиоприёмник, усилитель 4х50 Вт и много ещё чего любопытного.
Необычный двухдиновый CD/MP3/WMA-ресивер DUB278RMP привлекает внимание минимумом кнопок. Действительно, это и была одна из главных задач разработчиков – сделать стильный функциональный аппарат, визуально не перегрузив его фасад органами управления. Между тем DUB278RMP имеет на передней панели множество удобных навигационных клавиш, линейный и даже USB-порт для подключения внешних накопителей информации. Все эти прелести скрыты под различными откидными панельками. В аппарат встроены MOSFET-усилитель 4х50 Вт, цифровой тюнер и система динамического усиления баса. Подсветка клавиш и дисплея имеет 728 цветовых оттенков.
Модели DXZ378RMP и DB178RMP похожи по дизайну – у обеих в левой части «звёздное небо» из кнопок, удобные вращающиеся регуляторы и съёмные «мордочки». Обе воспроизводят CD/MP3/WMA, оснащаются цифровым тюнером с RDS и усилителем с пиковой мощностью 4х50 Вт (4х25 Вт по стандарту DIN). Однако старшая модель (DXZ378RMP) имеет также возможность управления по шине CeNET и флуоресцентный дисплей вместо жидкокристаллического у 178-й.
По своим функциональным возможностям и мощности усилителя CD/MP3/WMA-ресивер DB568RUSB практически не отличается от DXZ378RMP, однако вдобавок оснащён USB-портом на передней панели и функцией управления Slidetrack. Передняя панель съёмная.
Ресивер DXZ578RUSB является развитием DB568RUSB, описанного выше. Он имеет более технократичный дизайн, обладает всеми достоинствами 568-го, но встроенный усилитель тут немного мощнее (4х53 Вт в пике), появился 6-канальный линейный выход на внешнее усиление. Список поддерживаемых форматов пополнил ААС наряду с возможностью управления iPod через опциональный переходник.
Флагманом среди однодиновых CD-ресиверов является модель DXZ778RUSB с моторизированной откидной панелью. Аппарат характеризуется ещё более полным управлением звуком: НЧ- и ВЧ-фильтры, 3-точечный параметрический эквалайзер, встроенный активный кроссовер (три полосы), возможность отключения встроенного усилителя. Пользователь может выбрать один из 728 оттенков подсветки, управлять iPod и подключать hands free. USB-порт и другие особенности более простых моделей во флагмане, разумеется, также представлены.
Также Clarion предлагает достойный арсенал периферийных аппаратов и аксессуаров для каждой категории своей продукции, позволяющих обеспечить наилучшее взаимодействие компонентов автомобильной медиасистемы.
Усилители и акустика.
Ассортимент продукции Clarion традиционно не ограничивается мультимедиаустройствами и «головами». В каталоге компании также можно найти усилители мощности, различные сабвуферы и акустику.
Усилитель мощности APA4320 (на фото). Долговременная выходная мощность 4х80 Вт или суммарно 640 Вт в пике. Модель APA2160 имеет не четыре, а два канала, но мощность на каждый канал тут такая же.
Сногсшибательный 30-сантиметровый сабвуфер SRM3093HX с пиковой мощностью 1,2 кВт (номинал 300 Вт), частотным диапазоном от 15 Гц. В серию HX также входят двухполосная акустика и отдельный твитер.
Всего компания представила около трех десятков моделей автоакустики, предназначенной для инсталляций совершенно разных классов и, соответственно, стоимости.
Те, кто хорошо умеет работать с графическим редактором Photoshop, могут сделать анимированный GIF непосредственно в этой программе. Но создания баннера или анимированной кнопки совсем не обязательно каждому изучать Photoshop. Есть множество специализированных программ для создания анимированной графики, которые в свою очередь имеют множество специальных инструментов и шаблонов, благодаря которым создание рекламного объявления или анимированного логотипа для сайта становится делом нескольких минут.
Программы создающие GIF-анимацию.
Те, кто хорошо умеет работать с графическим редактором Photoshop, могут сделать анимированный GIF непосредственно в этой программе. Но создания баннера или анимированной кнопки совсем не обязательно каждому изучать Photoshop. Есть множество специализированных программ для создания анимированной графики, которые в свою очередь имеют множество специальных инструментов и шаблонов, благодаря которым создание рекламного объявления или анимированного логотипа для сайта становится делом нескольких минут.
GIF Construction Set Professional.
На первый взгляд кажется, что эта программа проста но это не так. Возможности ее очень широки, и, в отличие от многих аналогичных программ, она позволяет компилировать анимационные файлы не только в формате GIF. GIF Construction Set Professional может преобразовывать созданную в ней анимацию или уже готовый GIF-файл в формат Macromedia Flash (SWF). Файл Macromedia Flash имеет свои преимущества и недостатки перед GIF. Так, например, степень сжатия изображения в GIF ниже, и файл SWF может включать в себя не только анимацию, но и звук.
При экспорте созданной анимации в файл Macromedia Flash, следует помнить о том, что если в анимированном GIF можно указать время отображения каждого кадра по отдельности, в файле SWF частота смены изображений будет фиксированной. Кроме этого, файлы SWF, в отличие от GIF не поддерживают прозрачности.
Экспортировать в формат Macromedia Flash циклическую анимацию не получится – файл можно проиграть только один раз. Для имитации многократно повторяющейся анимации необходимо вносить дополнительные изменения в HTML-код страницы, на которой будет расположен SWF файл.
Принцип создания анимированного GIF-файла такой же, как и разработка рисованного мультфильма. Создается группа изображений с несколько измененным рисунком, после чего указывается их последовательность, и все они экспортируются в единый файл. Изображения, из которых будет состоять GIF-анимация, в GIF Construction Set Professional отображены в виде столбца кадров. Инструменты для выполнения различных манипуляций с кадрами «спрятаны» в контекстном меню. Они дают возможность вращать, обрезать, выполнять цветокоррекцию, добавлять эффект тени, выполнять объединение и удаление кадров.
Для файлов, которые помещаются на интернет-странице, очень важно, чтобы их размер был как можно меньше. В утилите GIF Construction Set Professional имеется специальная функция «суперсжатия», благодаря которой программа анализирует код GIF файла и делает размер анимации несколько меньше.
Easy GIF Animator Pro
Эта программа сделана, так чтобы любая задача могла быть выполнена в ней буквально за несколько минут. Реализовано это за счет продуманного процесса создания нового анимационного файла. В программе имеется свои мастера настроек - мастер создания нового баннера и мастер создания новой кнопки. Удобство таких предварительных заготовок еще и в том, что в программе уже заложены стандартные основные размеры баннеров, которые не всегда можно запомнить. В программе содержатся небольшой набор шаблонов кнопок с разными текстурами: мраморные, стеклянные, деревянные и пр.
Чтобы несколько разнообразить монотонное «слайд-шоу» сменяющихся кадров на баннере или на другом графическом элементе интернет-страницы, Easy GIF Animator Pro предлагает использовать анимационные эффекты перехода от одного изображения к другому. Вторая картинка может, например, выезжать из угла кадра или медленно проступать поверх предыдущей. Easy GIF Animator Pro имеет скромный набор инструментов для редактирования каждого изображения в анимации. Однако, несмотря на то, что этот «арсенал» напоминает палитру инструментов программы Microsoft Paint, на практике оказывается, что его вполне достаточно даже для того чтобы сделать текстовый баннер «с нуля». Здесь можно создавать геометрические фигуры, выполнять заливку, добавлять текст и делать заливку изображения градиентным цветом или даже выбранной текстурой.
GIF Movie Gear
В этой программе практически полностью отсутствует возможность редактирования изображений. Единственный способ это сделать – изменять рисунок по пикселам, что не далеко не всегда удобно. Из этого можно сделать вывод, что программа GIF Movie Gear позиционируется не как самостоятельный инструмент для работы с форматом GIF, а как вспомогательная утилита, которую будет уместно использовать в паре с каким-нибудь графическим редактором. В программе даже имеется возможность указать путь на диске к утилите, которая будет запускаться всякий раз, когда возникнет необходимость изменить рисунок кадра.
В GIF Movie Gear хорошо реализована оптимизация выходного файла. Во-первых, с ее помощью можно управлять количеством цветов в индексированной палитре GIF-файла, а также вручную подбирать цвета индексированной палитры и сохранять ее в отдельный файл для повторного использования. Во-вторых, в программе есть целая группа настроек для уменьшения размера файла без потери качества изображения. Среди них – максимально возможная обрезка кадров, устранение ненужных кадров (например, повторяющихся), замена дублирующихся точек изображения с прозрачностью. Эффективность выбранных настроек может быть мгновенно просчитана программой и оценена в процентах сжатия от общего размера анимационного файла.
В GIF Movie Gear можно использовать не только для создания GIF анимации. С помощью программы можно также создавать иконки *.ico (вот тут и пригодится возможность точечного рисунка), обычные и анимированные курсоры (*.cur, *.ani). Кроме вышеперечисленных форматов, изображения могут быть сохранены в виде многослойного файла PSD или в виде секвенции изображений в других графических форматах.
Если необходимо особым образом пометить создаваемый файл GIF, в него можно внедрить комментарий. При этом внешне файл останется прежним, лишь слегка увеличится его размер.
Selteco Bannershop GIF Animator
Эта программа нацелена, в основном на создание баннеров. В списке наиболее часто встречаемых разрешений можно найти все популярные сегодня типы баннеров, от стандартного 468x60 до «небоскреба» (skyscraper). Bannershop GIF Animator имеет специальный режим для быстрого создания анимированного изображения. Работая в нем, достаточно составить список графических файлов, задать задержку перед выводом на экран следующего кадра и все, файл можно сохранять в формате GIF. По такому же принципу работает и мастер создания слайд-шоу из отдельных картинок.
В Bannershop GIF Animator можно использовать анимационные эффекты, которые разделены на три группы – Intro Animation, Animation и Outro Animation. В первом случае можно получить эффект появления выделенного кадра, в последнем – его исчезновение. Отчасти, эти эффекты напоминают эффекты перехода, однако их область применения шире. Они также могут использоваться как видеофильтры. Эффекты еще одной группы, Animation, заставляют изображение двигаться особым образом – скользить, дрожать и переливаться светом.
Если составленная цепочка кадров включает в себя изображения разного разрешения, можно воспользоваться функцией Autosizing Frames, которая будет увеличивать рабочее пространство до тех пор, пока его площади не будет достаточно, чтобы отобразить самый большой кадр.
Нередко при создании текстового баннера приходится использовать символьный шрифт. Для того чтобы отыскать нужный значок, приходится тратить довольно много времени или использовать специальные программы-менеджеры установленных в системе шрифтов.
Создавая текст на баннере, отыскать нужный символ в Bannershop GIF Animator очень просто. Команда Inserт Symbol откроет таблицу со всеми элементами выбранного шрифта. Перебирая названия в списке установленных в системе шрифтов и наблюдая за таблицей, можно легко найти то, что нужно.
Готовую анимацию можно сразу сохранять в виде HTML страницы, в коде которой уже указано название графического файла.
Среди прочих особенностей программы стоит отметить возможность экспорта подготовленной анимации в AVI и поддержку векторного формата WMF, изображение которого растрируется при импорте в программу.
Active GIF Creator
Если необходимо сделать большое количество похожих баннеров, анимированных кнопок или логотипов, стоит задуматься о том, как упростить процесс. В Active GIF Creator это можно сделать с помощью специальных скриптов.
Модуль для работы со скриптами Script Editor является главной "изюминкой" программы. Он дает возможность автоматизировать рутинную работу, записав последовательность действий в отдельный скрипт. Анимационные скрипты – это файлы с расширением *.agif, которые сохраняются внутри проекта и могут многократно использоваться во время работы над ним. Таким образом, можно автоматически перемещать объекты, изменять их размер, управлять их отображением.
Active GIF Creator может оптимизировать размер анимационного файла, в зависимости от указанной скорости модема. В программе можно сохранять Gif анимацию сразу с HTML кодом и при этом подбирать в окне предварительного просмотра цвет фона и текста.
Кроме этого, программа умеет создавать GIF-файлы из командной строки в пакетном режиме. Самостоятельно разобраться с этой возможностью достаточно тяжело, но, тем не менее, ответы, на все вопросы, касающиеся работы с командной строкой, можно найти в технической документации Active GIF Creator.
CoffeeCup GIF Animator
CoffeeCup GIF Animator - это отличный выход для тех, у кого нет никакого желания и времени разбираться со сложными настройками Photoshop только ради того, чтобы сделать аватар. Программа несложна в использовании и при этом имеет все необходимые инструменты для решения такой задачи. Так, например, программа поддерживает импорт видео-файлов, может задавать время задержки для всех кадров GIF-анимации сразу или по отдельности, устанавливать для каждого кадра свое время отображения, задавать цвет, который должен быть прозрачным на изображении. Настроек в программе минимум, и все они помещаются в небольшом окне программы, в котором происходит сборка и предварительный просмотр анимации.
Мастер оптимизации также практически не требует от пользователя никакого вмешательства – достаточно следовать его простым инструкциям, и размер файла будет уменьшен настолько, насколько это возможно, без потери качества изображения. Это достигается за счет ограничения индексированной палитры и устранения присутствующих в файле GIF внутренних комментариев. CoffeeCup GIF Animator также сохраняет сделанную анимацию в SWF, и при этом выводит на экран код, который нужно будет вставить, чтобы файл отображался на веб-странице.
Ulead GIF Animator
Компания Ulead известна, прежде всего, своим программным обеспечением для работы с цифровым видео, поэтому неудивительно, что ее утилита GIF Animator унаследовала черты настоящего видеоредактора. Так, например, программа изобилует всевозможными эффектами, большинство которых перекочевали в GIF Animator из стандартного набора эффектов перехода приложений для обработки видео - Video Studio и Media Studio Pro.
Количество встроенных эффектов можно и увеличить. Для этого в настройках Ulead GIF Animator можно указать расположение фильтров Photoshop и дополнительных фильтров, совместимых с графическим редактором от Adobe. Тут, впрочем, следует вспомнить о том, что со времени выхода последней версии GIF Animator, прошло довольно много времени, и новые фильтры программой от Ulead не поддерживаются.
В режиме, предназначенном для оптимизации файла, рабочая область для наглядности разделена на две части – в одной показываются кадры проекта до сжатия в формат GIF, во второй – после. Изменение настроек сжатия мгновенно отображается на конечном результате. Подбирать «золотую середину» в соотношении размер-качество можно используя ограничение цветовой палитры. Кроме этого, досутпно еще два параметра – Dither, определяющий точность передачи градиентного перехода цвета, и Lossy, отвечающий за количество потерь при сжатии изображения. Управлять кадрами анимации можно либо с помощью панели кадров, где они показаны в виде слайдов, либо с панели настроек, где эта же анимация отображена в виде группы слоев, каждый из которых означает отдельный кадр.
Среди различных форматов экспорта присутствует совершенно неожиданная функция – упаковка созданной анимации в исполнительный EXE-файл. В этом случае на выходе вы получаете один файл, при запуске которого происходит примерно следующее – на экран поверх открытых окон программ выплывает созданное в GIF Animator изображение, а затем воспроизводится анимация. Трудно сказать, какое применение можно найти для этой возможности программы, скорее всего, ее можно использовать для необычного оформления презентации, которая будет начинаться таким неожиданным появлением изображения, либо это может быть просто способ пошутить над коллегой по работе.
Программ GIF-анимации обязательно нужно держать под рукой – чтобы в один прекрасный момент проблема создания анимированного баннера не затормозила всю остальную работу. Для тех, кто постоянно создает анимационные баннеры в больших количествах, следует попробовать в работе редактор скриптов Active GIF Creator, для тех, кому нужно быстро сделать свой аватар или оригинальный юзербар лучше подойдет CoffeeCup GIF Animator. Ну, а если нужен просто универсальный и надежный GIF-аниматор, «на все случаи жизни», советуем присмотреться к хорошо зарекомендовавшей себя программе от Ulead.
В наше время почти у каждого есть цифровая камера. Однако не все знают всех возможностей своего аппарата. Найдется мало желающих экспериментировать с настройками выдержки, чувствительности ISO и другими параметрами съемки, пользователи предпочитают делать цифровые фотографии в режиме – автоматической съемки.
2D – графика. Создаем панораму в редакторе PTGui Pro 8.
В наше время почти у каждого есть цифровая камера. Однако не все знают всех возможностей своего аппарата. Найдется мало желающих экспериментировать с настройками выдержки, чувствительности ISO и другими параметрами съемки, пользователи предпочитают делать цифровые фотографии в режиме – автоматической съемки.
Но почти в каждом современном фотоаппарате есть еще один режим, режим создания панорам. Этот режим позволяет избавится от некоторых ограничений фотоаппарата, такие как максимально допустимое разрешение снимка и максимальный угол обзора. Если же в вашем цифровике такого режима нет - не беда. Создать панораму можно и без специальной функции фотокамеры. Даже используя камеру мобильного телефона, можно получить широкоугольный снимок высокого разрешения. Все что нужно сделать – это выполнить несколько снимков в обычном режиме и установить специальную программу, с помощью которой кадры будут сшиваться в один снимок. Об одной из таких программ и пойдет речь в этом обзоре.
Свое название программа PTGui Pro получила в результате сокращения Graphical User Interface for Panorama Tools (Графический интерфейс для Panorama Tools).
Для создания панорамы, предлагается пройти несколько шагов с помощью мастера создания панорам Project Assistant. Наличие пошагового мастера в программе не означает, что PTGui Pro создаст панораму после нескольких щелчков мыши. Напротив, программа имеет огромное количество средств для настройки панорамы, в чем можно убедиться, включив режим Advanced. В этом режиме будет отображены дополнительные вкладки, каждая из которых содержит настройки для того или иного инструмента, например, для обрезки изображения, компенсации искажений, вызванных конструктивными особенностями объектива фотокамеры, для выбора способа проецирования панорамы и пр.
Шаг первый – загрузка изображений для будущей панорамы. Нажимаем кнопку Load images и указываем на диске заранее подготовленные фотографии.
Открытые в программе снимки отобразятся в виде ленты.
Если щелкнуть по этой ленте, откроется дополнительное окно Source Images, в котором можно установить порядок размещения изображений.
Нажав кнопку Correct в этом окне, можно выполнить коррекцию изображения, искаженного в результате паразитной дисперсии света, проходящего через оптическую систему объектива, или вследствие других причин.
Шаг второй – выравнивание кадров относительно друг друга. После нажатия кнопки Align images программа запустит свой алгоритм и определит для каждого изображения свое место в панорамном снимке. После автоматического выравнивания на экране появится окно Panorama Editor, в котором можно изменять ориентацию отдельных частей панорамы или всей панорамы целиком.
Если составляющие элементы панорамы сделаны максимально аккуратно, то есть, из одной точки, и имеют небольшую площадь перекрытия, скорее всего, создание панорамы на этом может быть завершено, и файл можно сохранять, нажав кнопку Create Panorama.
Если же снимки были не совсем удачные, и программа неточно определила места их "сшивания", необходимо вручную выполнить процедуру соединения изображений. Для склейки изображений PTGui Pro использует набор контрольных точек. Эти контрольные точки представляют собой пары отметок на соединяемых изображениях, которые обозначают совпадающие детали на снимках. Чем точнее расположены контрольные точки и чем больше будет их число, тем правильнее будет составлен шов между изображениями.
Для управления контрольными точками фотографий следует перейти на вкладку Control Points. В двух окнах показаны объединяемые снимки, на которых видны пары контрольных точек. Все эти точки пронумерованы и выделены цветом. Ниже, под изображениями показана таблица, в которой представлена подробная информация о координатах правых и левых контрольных точек.
Алгоритм программы несовершенен, поэтому иногда контрольные точки могут определяться недостаточно верно. В этом случае нужно щелкнуть правой кнопкой мыши на проблемной точке и удалить неудачную отметку, выбрав команду Delete. После этого можно вручную проставить контрольные точки, щелкая по изображению. Парную контрольную точку программа создаст сама, останется лишь проследить за правильностью ее расположения и, в случае необходимости, передвинуть ее на правильную позицию.
PTGui Pro может также сохранять результат соединения частей панорамы в файл Photoshop со слоями, что дает возможность редактировать изображение в популярном графическом редакторе. Изображение может также сохраняться в формате Tiff или Jpeg.
Панорамные снимки делают не только для того чтобы хранить память о местах, в которых побывал фотограф, они имеют и другое практическое применение. Круговые панорамы на 360 градусов могут использоваться разработчиками компьютерных игр для имитации естественного окружения. При помощи PTGui Pro можно получить интерактивную панораму в формате QuickTime VR (*.mov). Запустив такой файл, пользователь сможет совершить виртуальный осмотр местности из той точки, откуда производилась съемка панорамы. Панорамы QuickTime VR можно внедрять в веб-страницы. Для конвертирования панорамы в формат QuickTime VR нужно выполнить команду Utilities > Convert to QTVR.
Для 3D-дизайнеров программа PTGui Pro предлагает создание панорамных изображений в формате HDR, то есть с широким динамическим диапазоном. Использование технологии HDR при создании панорам может быть реализовано двумя методами коррекции изображения - True HDR и Exposure Fusion. Первый вариант позволяет создавать HDR-панораму на основе группы фотографий, сделанных с разной выдержкой, а также из HDR-изображений.
Второй вариант следует использовать в тех случаях, когда HDR-панорама не является конечной целью и необходимо лишь получить изображение с правильной экспозицией. В некоторых случаях, подобрать правильную выдержку довольно сложно. В основном это связано с тем, что на момент съемки освещение объектов неудобно для фотографа. В этом случае можно сделать несколько одинаковых снимков с разной выдержкой. Важно, чтобы они были сделаны с одной точки. Объединив информацию из всех этих снимков в формат HDR, можно получить изображение с более выгодным освещением. Затем выполняется преобразование диапазона яркостей HDRI к диапазону яркостей, отображаемых монитором (tone mapping), и на выходе мы имеем улучшенное изображение. Именно это и можно сделать в режиме Exposure Fusion.
Улучшить конечное изображение можно также, поэкспериментировав с настройками алгоритма PTGui Pro. Вызвать окно настроек можно, выполнив команду Tools > Options. Среди параметров, при помощи которых можно управлять тонкой настройкой программы: количество контрольных точек на паре сшиваемых изображений, настройки чувствительности при определении одинаковых фрагментов на частях панорамы и т.д.
Для создания одной панорамы требуется три, четыре и более снимков. А если панорам несколько то снимков получается очень много. Объединение кадров панорамы в один снимок требует много времени. Чтобы упростить задачу, в PTGui Pro предусмотрена пакетная обработка файлов.
Для того чтобы обработать сразу несколько панорамных изображений, необходимо сохранить проекты, которые должны быть обработаны, в формате программы (*.pts). После этого необходимо запустить утилиту Batch Stitcher, которая устанавливается вместе с PTGui Pro и доступна из меню "Пуск", составить в ней список заданий и запустить их выполнение.
Вы можете подумать, а для чего вообще нужна эта программа, ведь есть Photoshop, с прекрасным инструментом Photomerge? Однако его применение далеко не всегда позволяет получить идеальное изображение. Часто, особенно при склеивании ночных панорам, можно получить неприятное сообщение о том, что слои не могут быть корректно выровнены относительно друг друга. И тут PTGui Pro может стать хорошей альтернативой средствам популярного графического редактора.
С одной стороны, PTGui Pro достаточно проста в использовании, с другой – содержит множество настроек для коррекции снимков вручную, благодаря чему можно гибко управлять результатом.
Ниже приведены несколько панорам, которые были созданы при помощи программы.
Триал-версию PTGui Pro для Windows и Mac OS X можно скачать с официального сайта.
Информация в локальных сетях, как правило, передается отдельными порциями, кусками, называемыми в различных источниках пакетами (packets), кадрами (frames) или блоками. Причем предельная длина этих пакетов строго ограничена (обычно величиной в несколько килобайт). Ограничена длина пакета и снизу (как правило, несколькими десятками байт). Выбор пакетной передачи связан с несколькими важными соображениями.
Назначение пакетов и их структура
Информация в локальных сетях, как правило, передается отдельными порциями, кусками, называемыми в различных источниках пакетами (packets), кадрами (frames) или блоками. Причем предельная длина этих пакетов строго ограничена (обычно величиной в несколько килобайт). Ограничена длина пакета и снизу (как правило, несколькими десятками байт). Выбор пакетной передачи связан с несколькими важными соображениями.
Локальная сеть, как уже отмечалось, должна обеспечивать качественную, прозрачную связь всем абонентам (компьютерам) сети. Важнейшим параметром является так называемое время доступа к сети (access time), которое определяется как временной интервал между моментом готовности абонента к передаче (когда ему есть, что передавать) и моментом начала этой передачи. Это время ожидания абонентом начала своей передачи. Естественно, оно не должно быть слишком большим, иначе величина реальной, интегральной скорости передачи информации между приложениями сильно уменьшится даже при высокоскоростной связи.
Ожидание начала передачи связано с тем, что в сети не может происходить несколько передач одновременно (во всяком случае, при топологиях шина и кольцо). Всегда есть только один передатчик и один приемник (реже – несколько приемников). В противном случае информация от разных передатчиков смешивается и искажается. В связи с этим абоненты передают свою информацию по очереди. И каждому абоненту, прежде чем начать передачу, надо дождаться своей очереди. Вот это время ожидания своей очереди и есть время доступа.
Если бы вся требуемая информация передавалась каким-то абонентом сразу, непрерывно, без разделения на пакеты, то это привело бы к монопольному захвату сети этим абонентом на довольно продолжительное время. Все остальные абоненты вынуждены были бы ждать окончания передачи всей информации, что в ряде случаев могло бы потребовать десятков секунд и даже минут (например, при копировании содержимого целого жесткого диска). С тем чтобы уравнять в правах всех абонентов, а также сделать примерно одинаковыми для всех них величину времени доступа к сети и интегральную скорость передачи информации, как раз и применяются пакеты (кадры) ограниченной длины. Важно также и то, что при передаче больших массивов информации вероятность ошибки из-за помех и сбоев довольно высока. Например, при характерной для локальных сетей величине вероятности одиночной ошибки в 10-8пакет длиной 10 Кбит будет искажен с вероятностью 10-4, а массив длиной 10 Мбит – уже с вероятностью 10-1. К тому же выявить ошибку в массиве из нескольких мегабайт намного сложнее, чем в пакете из нескольких килобайт. А при обнаружении ошибки придется повторить передачу всего большого массива. Но и при повторной передаче большого массива снова высока вероятность ошибки, и процесс этот при слишком большом массиве может повторяться до бесконечности.
С другой стороны, сравнительно большие пакеты имеют преимущества перед очень маленькими пакетами, например, перед побайтовой (8 бит) или пословной (16 бит или 32 бита) передачей информации.
Дело в том, что каждый пакет помимо собственно данных, которые требуется передать, должен содержать некоторое количество служебной информации. Прежде всего, это адресная информация, которая определяет, от кого и кому передается данный пакет (как на почтовом конверте – адреса получателя и отправителя). Если порция передаваемых данных будет очень маленькой (например, несколько байт), то доля служебной информации станет непозволительно высокой, что резко снизит интегральную скорость обмена информацией по сети.
Существует некоторая оптимальная длина пакета (или оптимальный диапазон длин пакетов), при которой средняя скорость обмена информацией по сети будет максимальна. Эта длина не является неизменной величиной, она зависит от уровня помех, метода управления обменом, количества абонентов сети, характера передаваемой информации, и от многих других факторов. Имеется диапазон длин, который близок к оптимуму.
Таким образом, процесс информационного обмена в сети представляет собой чередование пакетов, каждый из которых содержит информацию, передаваемую от абонента к абоненту.
Передача пакетов в сети между двумя абонентами
Рис. 4.1. Передача пакетов в сети между двумя абонентами
В частном случае (рис. 4.1) все эти пакеты могут передаваться одним абонентом (когда другие абоненты не хотят передавать). Но обычно в сети чередуются пакеты, посланные разными абонентами (рис. 4.2).
Передача пакетов в сети между несколькими абонентами
Рис. 4.2. Передача пакетов в сети между несколькими абонентами
Структура и размеры пакета в каждой сети жестко определены стандартом на данную сеть и связаны, прежде всего, с аппаратурными особенностями данной сети, выбранной топологией и типом среды передачи информации. Кроме того, эти параметры зависят от используемого протокола (порядка обмена информацией).
Но существуют некоторые общие принципы формирования структуры пакета, которые учитывают характерные особенности обмена информацией по любым локальным сетям.
Чаще всего пакет содержит в себе следующие основные поля или части (рис. 4.3):
Типичная структура пакета
Рис. 4.3. Типичная структура пакета
* Стартовая комбинация битов или преамбула, которая обеспечивает предварительную настройку аппаратуры адаптера или другого сетевого устройства на прием и обработку пакета. Это поле может полностью отсутствовать или же сводиться к единственному стартовому биту.
* Сетевой адрес (идентификатор) принимающего абонента, то есть индивидуальный или групповой номер, присвоенный каждому принимающему абоненту в сети. Этот адрес позволяет приемнику распознать пакет, адресованный ему лично, группе, в которую он входит, или всем абонентам сети одновременно (при широком вещании).
* Сетевой адрес (идентификатор) передающего абонента, то есть индивидуальный номер, присвоенный каждому передающему абоненту. Этот адрес информирует принимающего абонента, откуда пришел данный пакет. Включение в пакет адреса передатчика необходимо в том случае, когда одному приемнику могут попеременно приходить пакеты от разных передатчиков.
* Служебная информация, которая может указывать на тип пакета, его номер, размер, формат, маршрут его доставки, на то, что с ним надо делать приемнику и т.д.
* Данные (поле данных) – это та информация, ради передачи которой используется пакет. В отличие от всех остальных полей пакета поле данных имеет переменную длину, которая, собственно, и определяет полную длину пакета. Существуют специальные управляющие пакеты, которые не имеют поля данных. Их можно рассматривать как сетевые команды. Пакеты, включающие поле данных, называются информационными пакетами. Управляющие пакеты могут выполнять функцию начала и конца сеанса связи, подтверждения приема информационного пакета, запроса информационного пакета и т.д.
* Контрольная сумма пакета – это числовой код, формируемый передатчиком по определенным правилам и содержащий в свернутом виде информацию обо всем пакете. Приемник, повторяя вычисления, сделанные передатчиком, с принятым пакетом, сравнивает их результат с контрольной суммой и делает вывод о правильности или ошибочности передачи пакета. Если пакет ошибочен, то приемник запрашивает его повторную передачу. Обычно используется циклическая контрольная сумма (CRC). Подробнее об этом рассказано в главе 7.
* Стоповая комбинация служит для информирования аппаратуры принимающего абонента об окончании пакета, обеспечивает выход аппаратуры приемника из состояния приема. Это поле может отсутствовать, если используется самосинхронизирующийся код, позволяющий определять момент окончания передачи пакета.
Вложение кадра в пакет
Рис. 4.4. Вложение кадра в пакет
Нередко в структуре пакета выделяют всего три поля:
* Начальное управляющее поле пакета (или заголовок пакета), то есть поле, включающее в себя стартовую комбинацию, сетевые адреса приемника и передатчика, а также служебную информацию.
* Поле данных пакета.
* Конечное управляющее поле пакета (заключение, трейлер), куда входят контрольная сумма и стоповая комбинация, а также, возможно, служебная информация.
Как уже упоминалось, помимо термина "пакет" (packet) в литературе также нередко встречается термин "кадр" (frame). Иногда под этими терминами имеется в виду одно и то же. Но иногда подразумевается, что кадр и пакет различаются. Причем единства в объяснении этих различий не наблюдается.
В некоторых источниках утверждается, что кадр вложен в пакет. В этом случае все перечисленные поля пакета кроме преамбулы и стоповой комбинации относятся к кадру (рис. 4.4). Например, в описаниях сети Ethernet говорится, что в конце преамбулы передается признак начала кадра.
В других, напротив, поддерживается мнение о том, что пакет вложен в кадр. И тогда под пакетом подразумевается только информация, содержащаяся в кадре, который передается по сети и снабжен служебными полями.
Во избежание путаницы, в данной книге термин "пакет" будет использоваться как более понятный и универсальный.
В процессе сеанса обмена информацией по сети между передающим и принимающим абонентами происходит обмен информационными и управляющими пакетами по установленным правилам, называемым протоколом обмена. Это позволяет обеспечить надежную передачу информации при любой интенсивности обмена по сети.
Пример простейшего протокола показан на рис. 4.5.
Пример обмена пакетами при сеансе связи
Рис. 4.5. Пример обмена пакетами при сеансе связи
Сеанс обмена начинается с запроса передатчиком готовности приемника принять данные. Для этого используется управляющий пакет "Запрос". Если приемник не готов, он отказывается от сеанса специальным управляющим пакетом. В случае, когда приемник готов, он посылает в ответ управляющий пакет "Готовность". Затем начинается собственно передача данных. При этом на каждый полученный информационный пакет приемник отвечает управляющим пакетом "Подтверждение". В случае, когда пакет данных передан с ошибками, в ответ на него приемник запрашивает повторную передачу. Заканчивается сеанс управляющим пакетом "Конец", которым передатчик сообщает о разрыве связи. Существует множество стандартных протоколов, которые используют как передачу с подтверждением (с гарантированной доставкой пакета), так и передачу без подтверждения (без гарантии доставки пакета). Подробнее о протоколах обмена будет рассказано в следующей главе.
При реальном обмене по сети применяются многоуровневые протоколы, каждый из уровней которых предполагает свою структуру пакета (адресацию, управляющую информацию, формат данных и т.д.). Ведь протоколы высоких уровней имеют дело с такими понятиями, как файл-сервер или приложение, запрашивающее данные у другого приложения, и вполне могут не иметь представления ни о типе аппаратуры сети, ни о методе управления обменом. Все пакеты более высоких уровней последовательно вкладываются в передаваемый пакет, точнее, в поле данных передаваемого пакета (рис. 4.6). Этот процесс последовательной упаковки данных для передачи называется также инкапсуляцией пакетов.
Многоуровневая система вложения пакетов
Рис. 4.6. Многоуровневая система вложения пакетов
Каждый следующий вкладываемый пакет может содержать собственную служебную информацию, располагающуюся как до данных (заголовок), так и после них (трейлер), причем ее назначение может быть различным. Безусловно, доля вспомогательной информации в пакетах при этом возрастает с каждым следующим уровнем, что снижает эффективную скорость передачи данных. Для увеличения этой скорости предпочтительнее, чтобы протоколы обмена были проще, и уровней этих протоколов было меньше. Иначе никакая скорость передачи битов не поможет, и быстрая сеть может передавать файл дольше, чем медленная сеть, которая пользуется более простым протоколом.
Обратный процесс последовательной распаковки данных приемником называется декапсуляцией пакетов.
Конечно же вы попадали в такую ситуацию, когда приложение, разработанное вами ранее, могло быть снова использовано в рамках другого проекта. Вначале вы конечно же подумали, что это не создаст никаких проблем. Всего-то необходимо скопировать код из одного каталога в другой! Со временем вы осознали, что проекты могут различаться между собой различными параметрами, пусть даже самыми незначительными. Например, это может быть e-mail адрес на который отсылаются сообщения. В таком случае вам ничего не остается, как открыть множество файлов в редакторе и изменить их содержимое, вставляя нужный e-mail при помощи функции найти/заменить. Эта статья расскажет вам о том, как можно избавить себя от подобной работы, а так же порекомендует ряд дополнительных средств для создания и чтения конфигурационных файлов.
Повторное использование кода
Компьютер был изобретен для того, чтобы избавить человека от лишней работы. Развитие компьютерных технологий привело к тому, что человек стал стремиться все меньше времени проводить за компьютером. Допустим, вы программист. Не будь компьютера, вы бы остались без работы. Но в то же время вы стараетесь с помощью компьютера упростить свою ежедневную работы, с этой целью вы используете, например, функцию автозавершения кода в редакторе. Мы хотим подвести вас к той мысли, что код созданный вами, должен быть организован так, чтобы работы по его модификации были сведены к минимуму. Чаще всего это удается, когда вы создаете код, автоматизирующий рутинные операции, такие как создание и прорисовка формы, а так же отправка e-mail. Однако не стоит забывать, что функции для выполнения рутинных операций никогда не бывают на 100% идентичными в различных приложениях. Один формуляр не похож на другой, а сообщения электронной почты предназначены разным адресатам. Однако логика на уровне приложения остается прежней, функции различаются между собой только некоторыми параметрами. Таким образом, вы должны ясно представлять свою цель – разработать код, параметры которого можно было бы определять извне.
Модульная организация
Для решения этой задачи, планируя структуру приложения, вы должны позаботиться о модульности. То есть вам необходимо поместить часто используемые функции или классы в отдельный файл, который будет подключаться через require_once. В этом случае файлы приложения не будут наполнены избыточным кодом. Допустим, вы часто осуществляете запись в лог-файл. В таком случае было бы неплохо код, выполняющий эту операцию, заключить в рамки класса или функции. Будет еще лучше, если вы воспользуетесь уже готовым классом, взятым из какой-нибудь библиотеки исходных кодов, например PEAR.
Параметры процедурального кода
После того, как вы проанализировали код, выделили повторяющиеся фрагменты, распределили их по классам и функциям, необходимо подумать о выделении необходимых параметров, значения которых будут устанавливаться извне. Если речь идет о процедуральном коде, самым простым решением является использование глобальных переменных, которые необходимо определить в отдельном файле. Это позволит в дальнейшем без проблем изменять их значения.
Листинг 1 демонстрирует функцию, которая занимается отправкой e-mail. В ее теле содержится только одна php-функция - mail(). Таким образом, мы избавляемся от необходимости каждый раз указывать получателя при отправке сообщения. Следующая переменная, которую мы определяем, обозначает префикс, предшествующий теме сообщения. Конфигурационный файл, подключаемый через require_once, мог бы выглядеть следующим образом.
Listing 1
Есть способ лучше
Даже если рассмотренный выше способ и является действенным, однако это не самое лучшее решение. По мере того как код вашего приложения будет усложняться, вырастет и число опций, тогда могут возникнуть следующие проблемы:
Глобальные переменные, которые мы используем, могут породить конфликты в пространстве имен.
В том случае, если конфигурационные файлы редактируются не программистом, а дилетантом, в системе могут возникнуть синтаксические ошибки, например из-за незакрытых кавычек.
Для того, чтобы получить доступ к различным переменным, необходимо обращаться к массиву $_GLOBALS.
Вместо php-модулей существуют другие форматы, которые могут быть легко поняты и изменены дилетантами, а так же php-скриптами. Мы имеем в виду два формата: этого широко используемые операционной системой Windows ini-файлы, а так же формат XML.
PHP уже содержит функцию parse_ini_file(), которая без проблем читает ini-файлы. Такой файл имеет очень простую структуру. Каждой опции может быть присвоено только одно значение, а в качестве оператора присваивания используется знак равенства. Конфигурационный файл из предыдущего примера выглядел бы следующим образом в ini-формате.
После считывания ini-файла, имя которого передается в качестве параметра функции parse_ini_file(), мы получаем ассоциативный массив, имеющий вид:
В листинге 2 находится функция отправки почты, основанная на ini-файлах:
Listing 2
Если вы уже прочитали документацию по функции parse_ini_file(), вы кончено же заметили, что она может принимать и второй параметр. Он необходим, если вы хотите разделить ini-файл на несколько разделов или секций. Предположим, вам необходимо сохранить несколько настроек электронной почты. Тогда ini-файл будет выглядеть следующим образом:
"
Если вы при вызове parse_ini_file() передаете true в качестве второго параметра, в этом случае php будет искать в файле секции, а затем вернет многомерный массив, в котором каждой секции (errors и contact) будет соответствовать определенный набор значений:
Особые значения в ini-файлах
При использовании ini-файлов вы должны иметь в виду, что некоторые особые значения могут быть представлены строками. Допустим, вы определяете значение опции как true или yes (без кавычек), в таком случае они автоматически конвертируются в число 1, а false или no – в пустую строку. К сожалению, при этом не генерируется никакой ошибки. Поэтому не пытайтесь использовать no для сокращенного обозначения Норвегии.
Listing 3
Безопасность
Вы должны понимать то, что если конфигурационный файл используется для хранения важных данных, например паролей, необходимо позаботиться о том, чтобы содержимое такого файла не попало в web-браузер. Простейший выход из положения заключается в том, чтобы хранить конфигурационные файлы вне корневой директории сайта, например здесь: /etc/myApp/config
Если этого сделать нельзя, в таком случае можно изменить расширение файла. Для конфигурационного файла в формате модуля php необходимо всегда выбирать расширение .php. В этом случае сервер проанализирует php-файл, а пользователь увидит пустую страницу. С ini-файлами такое не пройдет, однако сервер Apache предоставляет возможность защитить данные. Просто поместите в каталог, где хранятся ini файл с именем .htaccess В него нужно поместить следующие строки:
Теперь сервер перестанет выдавать файлы с расширением ini, а опции приложения будут скрыты от пользователей.
Другие средства
Кончено же вы не являетесь единственным разработчиком, который сталкивается с проблемой обеспечения гибкости настроек веб-приложения. Поэтому некоторые программисты уже разработали библиотеки классов, которые переводят работу с конфигурационными файлами на абстрактный уровень, а так же упрощают запись и чтение различных форматов конфигурационных файлов.
PEAR::Config
Одним из классов, который может пригодится при чтении и записи конфигурационных файлов является PEAR::Config [3]. Как и все классы PEAR, PEAR::Config инсталлируется при помощи PEAR-Installer по команде
Этот класс является многоформатным, поскольку работает с конфигурационными файлами в форматах XMIL, ini, Apach-Style (гибрид XML и ini), а также php-массивами. Достоинством данного класса является то, что API для взаимодействия со всеми форматами одинаков. Т.е. логика работы с конфигурационными файлами в формате XML ничем не отличается от логики работы с ini-файлами. Вследствие этого необходимо, чтобы все форматы имели одинаковую структуру. Конфигурационные файлы, с которыми работает PEAR::Config, состоят, как и ini-файлы из секций.
Изменим снова наш пример. Сначала мы создаем объект Config, а затем вызываем его метод parseConfig(). Поскольку метод позволяет считывать различные форматы файлов, при вызове его необходимо передавать параметр, уточняющий формат. Для конфигурационных файлов в формате ini в качестве такого параметра используется строка iniFile. После считывания файла, мы не получаем опции в виде массива, вместо этого создается объект-контейнер, который дает доступ ко всем настройкам. Хотя во многих случаях бывает желательно получить опции в форме массива. Для этого используется метод toArray(). Листинг 4 демонстрирует считывание ini-файла:
Listing 4
С первого взгляда это может показаться несколько запутанным. Однако преимущество данного подхода заключается в том, что один и тот же метод используется для чтения всех форматов файлов, поддерживаемых PEAR::Config. Измененные опции могут быть также сохранены в любом формате:
Листинг 5 содержит код, где серия опций помещается в массив, который затем сохраняется в формате XML. Если вы хотите побольше узнать о PEAR::Config необходимую информацию вы сможете найти в документации по PEAR[5] или в DevShed-Tutorial [6].
Listing 5
patConfiguration
Альтернативным классом для работы с конфигурационными файлами является patConfiguration[7], однако он предназначен исключительно для работы с файлами в формате XML. После скачивания архива, его необходимо распаковать. Сам класс находится в директории include. patConfiguration предварительно определяет Tag-Set, который затем наполняется данными. К тому же этот класс предоставляет возможность указать тип опции: целое число, число с плавающей точкой, булевское значение. Типичный конфигурационный файл, созданный patConfiguration, имеет следующую структуру:
После создания объекта класса, может быть вызван метод parseConfigFile(). Доступ к опциям осуществляется через getConfigValue(). В качестве параметра этот метод может принимать путь к нужной опции. Вернемся к нашему примеру. Допустим, мы хотим получить e-mail адрес, на который высылается сообщение об ошибке. В этом случае используется путь errors.email. Если путь не указан, тогда все параметры передаются в массив. Листинг 6 демонстрирует код, который можно использовать для считывания файлов.
patConfiguration 2.0.0
В данный момент многоформатная версия patConfiguration находится в стадии разработки. Возможно, при публикации статьи эта версия уже станет доступной. Впрочем, самую новую версию для разработчиков вы можете скачать с сайта snaps.php-tools.net/downloaden.
В этом примере вы уже заметили, что внутри тега указывается тип значения. Названия типов идентичны тем, что используются в php-функции settype(). Если тип не указан, тогда значение интерпретируется как строка. Для часто используемых опций можно определить отдельный тег.
Наряду с функцией getConfigValue, существует функция setConfigValue(), с помощью которой можно изменить значение опции. Затем конфигурационный файл может быть заново записан с помощью writeConfigFile() (см листинг 7).
patConfiguration предлагает также серию дополнительных возможностей. Например, наряду с тегами, существует возможность определять атрибуты и пространства имен (Namespace), а к тегу можно привязать внешний файл, таким образом, опции будут распределены по нескольким файлам. Кроме этого patConfiguration включает систему кэширования, благодаря которой пропадает необходимость в многократном считывании конфигурационного файла.
Дополнительную информацию вы сможете найти на PHP Application Tools-Homepage и в patConfiguration-Tutorial на DevShed [8].
Listing 7
Заключение
Забота о гибкости настроек приложения может сберечь много времени, особенно если его компоненты предполагается использовать в других проектах. Вы потратите еще меньше времени, если доверите работу с конфигурационными файлами одному из готовых классов. Выбор между PEAR::Config и patConfiguration зависит от задачи. Преимуществом PEAR::Config является поддержка различных форматов конфигурационных файлов, в то время как patConfiguration прекрасно работает с XML, так же предоставляет ряд дополнительных возможностей. Однако с появлением версии 2.0.0 этот пакет будет иметь одинаковый API для считывания ini и wddx файлов. PHP-массив поддерживаются уже в текущей версии.
Всё что вы когда-либо хотели знать про mysql, php и кодировки, но боялись спросить! Почему кириллица на сайте отображается вопросами? Как правильно настроить сервер mysql для работы с кириллицей? Как поменять кодировку в mysql? Как изменить кодировку в скриптах php? Какую выбрать кодировку? Как сконвертировать базу данных из одной кодировки в другую? Эти и многие подобные вопросы с завидным упорством снова и снова поднимаются на различных форумах уже который год. В этом посте я постарался рассказать что нужно делать чтобы такие проблемы не возникали и дать наиболее эффективные советы на тот случай если они все-таки возникнут.
Mysql, php и кодировки. Источник проблем.
Проблемы с кодировками в Mysql обусловлены историей создания этой программы. Так как разрабатывали mysql - европейцы - для них было естественно выбрать в качестве основной кодировки более удобную для себя latin1. Странно, но и по сей день большинство инсталляций Mysql по умолчанию работают с этой кодировкой что и создает для пользователей кириллицы проблемы с добавлением в базу данных строк на русском и украинском языках - в latin1 эти символы просто отсутствуют.
Поэтому первое что нужно сделать при возникновении проблем с кодировками в mysql - нужно проверить какая кодировка является для данной инсталляции mysql основной. Проверить это можно несколькими способами.
Настройка сервера mysql для нужной кодировки.
* Если вы админ сервера или вы самостоятельно настраиваете собственную mysql на рабочей машине.
Откройте файл конфигурации mysql.ini (/etc/mysql.cnf для os linux) и найдите такие строки.
Вместо “название_кодировки” нужно подставить название той кодировки, которую вы будете использовать. Для текстов на русском и украинском языках можно использовать utf8 или cp1251 (обратите внимание - названия кодировок в mysql пишутся без обычного дефиса!!!). Но я советовал бы использовать только utf8 - так вы себе сэкономите в будущем немало нервов.
Если такие строки в файле конфигурации отсутствуют, то это означает что база данных использует по умолчанию ту кодировку, которая была задана при компиляции. Добавьте в конфиг нужные вам настройки кодировок (примеры ниже) и перезапустите mysql.
Если у вас возникли проблемы с кодировкой на хостинге, где вы не имеете прав администратора, то проверить настройки кодировки для mysql вы сможете другим способом: установите соединение с mysql (при помощи консольной команды mysql или phpmyadmin - как вам удобнее) и выполните такой sql-запрос: show variables like ‘char%’. Этот запрос покажет вам значения переменных mysql, которые имеют отношение к кодировкам. Скорее всего, вы увидите что-то вроде такого
Я специально привел выше пример НЕПРАВИЛЬНО НАСТРОЕННОГО СЕРВЕРА!!! Обратите внимание - в нем используются в разных случаях три(!) разные кодировки. Начинающему веб-программисту в такой ситуации будет сложно добиться корректной работы скрипта. Старайтесь чтобы все переменные были настроены на работу с одной и той же кодировкой. Тогда 99% проблем которые обсуждаются на форумах у вас просто не возникнут. Тут даже не столь важно какую именно кодировку вы выберете - главное чтобы она была везде одинаковой. Но все-таки старайтесь указывать в настройках ту кодировку, которую действительно будете использовать для хранения данных.
Итак, удачный вариант - это если команда show variables like ‘char%’ из абзаца выше покажет вам список одинаковых кодировок для каждой из переменных и еще лучше будет если эта кодировка совпадет с той которую используете вы.
Если же кодировка mysql отличается от вашей - не спешите расстраиваться. Изменить любую из этих переменных вы можете либо глобально, для всех правкой конфигов (если вы администратор сервера), либо только для себя - sql-запросом set character_set_database=utf8 (если вы пользователь). Такой запрос должен будет выполняться из вашего php скрипта сразу после установки соединения с сервером mysql. Ниже пример для установки кодировки utf8 из php скрипта.
Что касается character_set_database - постарайтесь сразу создать базу данных в нужной кодировке (как вариант - отправьте такую просьбу в техподдержку хостинга), тогда вы избежите по крайней мере одного лишнего запроса к mysql во время работы скрипта. Если удастся,то строчку с ‘character_set_database’ из приведенного выше кода можно будет удалить.
Примеры настроек сервера mysql для правильной работы с кодировками.
При правильно настроенном сервере делать запросы из скрипта для установки правильной кодировки уже будет не нужно.
Настройки для utf8
Проверка реальной кодировки в которой хранятся базы данных mysql.
В случае если вы все (и сервер, и php скрипт) настроили правильно, по инструкции выше, но русские буквы все равно не отображаются - проверьте действительно ли ваши строки сохранены в той кодировке, которую вы указали в настройках!!!
Простой способ проверки - сделайте дамп базы данных в sql-формате и откройте его в текстовом редакторе. Sql-формат - это обычный текст. Если ваша база данных mysql в кодировке cp1251 - открывайте в Блокноте. Если utf8 - в любом редакторе с поддержкой Юникода. Пролистайте файл и убедитесь что все надписи с кириллицей нормально читаются и что sql-команды create table и create database, которые встречаются в дампе содержат правильные названия кодировки mysql (той кодировки, которая вами была указана в настройках сервера или в запросах из php-скриптов.
Если кодировка не подходит - сделайте бекап базы на всякий случай, перекодируйте sql-дамп в любом текстовом перекодировщике, замените названия кодировок в файле на правильные и заливайте полученный файл на сервер mysql. Теперь с кодировками все должно быть в порядке.
В этой статье я попытаюсь дать оценку быстродействию файловых систем, используемых в операционных системах WindowsNT/2000. Статья не содержит графиков и результатов тестирований, так как эти результаты слишком сильно зависят от случая, методик тестирования и конкретных систем, и не имеют почти никакой связи с реальным положением дел. В этом материале я вместо этого постараюсь описать общие тенденции и соображения, связанные с производительностью файловых систем. Прочитав данный материал, вы получите информацию для размышлений и сможете сами сделать выводы, понять, какая система будет быстрее в ваших условиях, и почему. Возможно, некоторые факты помогут вам также оптимизировать быстродействие своей машины с точки зрения файловых систем, подскажут какие-то решения, которые приведут к повышению скорости работы всего компьютера.
В данном обзоре упоминаются три системы - FAT (далее FAT16), FAT32 и NTFS, так как основной вопрос, стоящий перед пользователями Windows2000 - это выбор между этими вариантами. Я приношу извинение пользователям других файловых систем, но проблема выбора между двумя, внешне совершенно равнозначными, вариантами со всей остротой стоит сейчас только в среде Windows2000. Я надеюсь, всё же, что изложенные соображения покажутся вам любопытными, и вы сможете сделать какие-то выводы и о тех системах, с которыми вам приходится работать.
Данная статья состоит из множества разделов, каждый из которых посвящен какому-то одному вопросу быстродействия. Многие из этих разделов в определенных местах тесно переплетаются между собой. Тем не менее, чтобы не превращать статью в кашу, в соответствующем разделе я буду писать только о том, что имеет отношение к обсуждаемый в данный момент теме, и ни о чем более. Если вы не нашли каких-то важных фактов в тексте - не спешите удивляться: скорее всего, вы встретите их позже. Прошу вас также не делать никаких поспешных выводов о недостатках и преимуществах той или иной системы, так как противоречий и подводных камней в этих рассуждениях очень и очень много. В конце я попытаюсь собрать воедино всё, что можно сказать о быстродействии систем в реальных условиях.
Теория
Самое фундаментальное свойство любой файловой системы, влияющее на быстродействие всех дисковых операций - структура организации и хранения информации, т.е. то, как, собственно, устроена сама файловая система. Первый раздел - попытка анализа именно этого аспекта работы, т.е. физической работы со структурами и данными файловой системы. Теоретические рассуждения, в принципе, могут быть пропущены - те, кто интересуется лишь чисто практическими аспектами быстродействия файловых систем, могут обратиться сразу ко второй части статьи.
Для начала хотелось бы заметить, что любая файловая система так или иначе хранит файлы. Доступ к данным файлов - основная и неотъемлемая часть работы с файловой системой, и поэтому прежде всего нужно сказать пару слов об этом. Любая файловая система хранит данные файлов в неких объемах - секторах, которые используются аппаратурой и драйвером как самая маленькая единица полезной информации диска. Размер сектора в подавляющем числе современных систем составляет 512 байт, и все файловые системы просто читают эту информацию и передают её без какой либо обработки приложениям. Есть ли тут какие-то исключения? Практически нет. Если файл хранится в сжатом или закодированном виде - как это возможно, к примеру, в системе NTFS - то, конечно, на восстановление или расшифровку информации тратится время и ресурсы процессора. В остальных случаях чтение и запись самих данных файла осуществляется с одинаковой скоростью, какую файловую систему вы не использовали бы.
Обратим внимание на основные процессы, осуществляемые системой для доступа к файлам:
Поиск данных файла
Выяснение того, в каких областях диска хранится тот или иной фрагмент файла - процесс, который имеет принципиально разное воплощение в различных файловых системах. Имейте в виду, что это лишь поиск информации о местоположении файла - доступ к самим данным, фрагментированы они или нет, здесь уже не рассматривается, так как этот процесс совершенно одинаков для всех систем. Речь идет о тех "лишних" действиях, которые приходится выполнять системе перед доступом к реальным данным файлов.
На что влияет этот параметр: на скорость навигации по файлу (доступ к произвольному фрагменту файла). Любая работа с большими файлами данных и документов, если их размер - несколько мегабайт и более. Этот параметр показывает, насколько сильно сама файловая система страдает от фрагментации файлов.
NTFS способна обеспечить быстрый поиск фрагментов, поскольку вся информация хранится в нескольких очень компактных записях (типичный размер - несколько килобайт). Если файл очень сильно фрагментирован (содержит большое число фрагментов) - NTFS придется использовать много записей, что часто заставит хранить их в разных местах. Лишние движения головок при поиске этих данных, в таком случае, приведут к сильному замедлению процесса поиска данных о местоположении файла.
FAT32, из-за большой области самой таблицы размещения будет испытывать огромные трудности, если фрагменты файла разбросаны по всему диску. Дело в том, что FAT (File Allocation Table, таблица размещения файлов) представляет собой мини-образ диска, куда включен каждый его кластер. Для доступа к фрагменту файла в системе FAT16 и FAT32 приходится обращаться к соответствующей частичке FAT. Если файл, к примеру, расположен в трех фрагментах - в начале диска, в середине, и в конце - то в системе FAT нам придется обратиться к фрагменту FAT также в его начале, в середине и в конце. В системе FAT16, где максимальный размер области FAT составляет 128 Кбайт, это не составит проблемы - вся область FAT просто хранится в памяти, или же считывается с диска целиком за один проход и буферизируется. FAT32 же, напротив, имеет типичный размер области FAT порядка сотен килобайт, а на больших дисках - даже несколько мегабайт. Если файл расположен в разных частях диска - это вынуждает систему совершать движения головок винчестера столько раз, сколько групп фрагментов в разных областях имеет файл, а это очень и очень сильно замедляет процесс поиска фрагментов файла.
Вывод: Абсолютный лидер - FAT16, он никогда не заставит систему делать лишние дисковые операции для данной цели. Затем идет NTFS - эта система также не требует чтения лишней информации, по крайней мере, до того момента, пока файл имеет разумное число фрагментов. FAT32 испытывает огромные трудности, вплоть до чтения лишних сотен килобайт из области FAT, если файл разбросан разным областям диска. Работа с внушительными по размеру файлами на FAT32 в любом случае сопряжена с огромными трудностями - понять, в каком месте на диске расположен тот или иной фрагмент файла, можно лишь изучив всю последовательность кластеров файла с самого начала, обрабатывая за один раз один кластер (через каждые 4 Кбайт файла в типичной системе). Стоит отметить, что если файл фрагментирован, но лежит компактной кучей фрагментов - FAT32 всё же не испытывает больших трудностей, так как физический доступ к области FAT будет также компактен и буферизован.
Поиск свободного места
Данная операция производится в том случае, если файл нужно создать с нуля или скопировать на диск. Поиск места под физические данные файла зависит от того, как хранится информация о занятых участках диска.
На что влияет этот параметр: на скорость создания файлов, особенно больших. Сохранение или создание в реальном времени больших мультимедийных файлов (.wav, к примеру), копирование больших объемов информации, т.д. Этот параметр показывает, насколько быстро система сможет найти место для записи на диск новых данных, и какие операции ей придется для этого проделать.
Для определения того, свободен ли данный кластер или нет, системы на основе FAT должны просмотреть одну запись FAT, соответствующую этому кластеру. Размер одной записи FAT16 составляет 16 бит, одной записи FAT32 - 32 бита. Для поиска свободного места на диске может потребоваться просмотреть почти всего FAT - это 128 Кбайт (максимум) для FAT16 и до нескольких мегабайт (!) - в FAT32. Для того, чтобы не превращать поиск свободного места в катастрофу (для FAT32), операционной системе приходится идти на различные ухищрения.
NTFS имеет битовую карту свободного места, одному кластеру соответствует 1 бит. Для поиска свободного места на диске приходится оценивать объемы в десятки раз меньшие, чем в системах FAT и FAT32.
Вывод: NTFS имеет наиболее эффективную систему нахождения свободного места. Стоит отметить, что действовать "в лоб" на FAT16 или FAT32 очень медленно, поэтому для нахождения свободного места в этих системах применяются различные методы оптимизации, в результате чего и там достигается приемлемая скорость. (Одно можно сказать наверняка - поиск свободного места при работе в DOS на FAT32 - катастрофический по скорости процесс, поскольку никакая оптимизация невозможна без поддержки хоть сколь серьезной операционной системы).
Работа с каталогами и файлами
Каждая файловая система выполняет элементарные операции с файлами - доступ, удаление, создание, перемещение и т.д. Скорость работы этих операций зависит от принципов организации хранения данных об отдельных файлах и от устройства структур каталогов.
На что влияет этот параметр: на скорость осуществления любых операций с файлом, в том числе - на скорость любой операции доступа к файлу, особенно - в каталогах с большим числом файлов (тысячи).
FAT16 и FAT32 имеют очень компактные каталоги, размер каждой записи которых предельно мал. Более того, из-за сложившейся исторически системы хранения длинных имен файлов (более 11 символов), в каталогах систем FAT используется не очень эффективная и на первый взгляд неудачная, но зато очень экономная структура хранения этих самих длинных имен файлов. Работа с каталогами FAT производится достаточно быстро, так как в подавляющем числе случаев каталог (файл данных каталога) не фрагментирован и находится на диске в одном месте.
Единственная проблема, которая может существенно понизить скорость работы каталогов FAT - большое количество файлов в одном каталоге (порядка тысячи или более). Система хранения данных - линейный массив - не позволяет организовать эффективный поиск файлов в таком каталоге, и для нахождения данного файла приходится перебирать большой объем данных (в среднем - половину файла каталога).
NTFS использует гораздо более эффективный способ адресации - бинарное дерево, о принципе работы которого можно прочесть в другой статье (Файловая система NTFS). Эта организация позволяет эффективно работать с каталогами любого размера - каталогам NTFS не страшно увеличение количества файлов в одном каталоге и до десятков тысяч.
Стоит заметить, однако, что сам каталог NTFS представляет собой гораздо менее компактную структуру, нежели каталог FAT - это связано с гораздо большим (в несколько раз) размером одной записи каталога. Данное обстоятельство приводит к тому, что каталоги на томе NTFS в подавляющем числе случаев сильно фрагментированы. Размер типичного каталога на FAT-е укладывается в один кластер, тогда как сотня файлов (и даже меньше) в каталоге на NTFS уже приводит к размеру файла каталога, превышающему типичный размер одного кластера. Это, в свою очередь, почти гарантирует фрагментацию файла каталога, что, к сожалению, довольно часто сводит на нет все преимущества гораздо более эффективной организации самих данных.
Вывод: структура каталогов на NTFS теоретически гораздо эффективнее, но при размере каталога в несколько сотен файлов это практически не имеет значения. Фрагментация каталогов NTFS, однако, уверенно наступает уже при таком размере каталога. Для малых и средних каталогов NTFS, как это не печально, имеет на практике меньшее быстродействие.
Преимущества каталогов NTFS становятся реальными и неоспоримыми только в том случае, если в одно каталоге присутствуют тысячи файлов - в этом случае быстродействие компенсирует фрагментированность самого каталога и трудности с физическим обращением к данным (в первый раз - далее каталог кэшируется). Напряженная работа с каталогами, содержащими порядка тысячи и более файлов, проходит на NTFS буквально в несколько раз быстрее, а иногда выигрыш в скорости по сравнению с FAT и FAT32 достигает десятков раз.
Практика
К сожалению, как это часто бывает во всевозможных компьютерных вопросах, практика не очень хорошо согласуется с теорией. NTFS, имеющая, казалось бы, очевидные преимущества в структуре, показывает не настолько уж фантастические результаты, как можно было бы ожидать. Какие еще соображения влияют на быстродействие файловой системы? Каждый из рассматриваемых далее вопросов вносит свой вклад в итоговое быстродействие. Помните, однако, что реальное быстродействие - результат действия сразу всех факторов, поэтому и в этой части статьи не стоит делать поспешных выводов.
Объем оперативной памяти (кэширование)
Очень многие данные современных файловых систем кэшируются или буферизируются в памяти компьютера, что позволяет избежать лишних операций физического чтения данных с диска. Для нормальной (высокопроизводительной) работы системы в кэше приходится хранить следующие типы информации:
Данные о физическом местоположении всех открытых файлов. Это, прежде всего, позволит обращаться к системным файлам и библиотекам, доступ к которым идет буквально постоянно, без чтения служебной (не относящейся к самим файлам) информации с диска. Это же относится к тем файлам, которые исполняются в данный момент - т.е. к выполняемым модулям (.exe и .dll) активных процессов в системе. В эту категорию попадают также файлы системы, с которыми производится работа (прежде всего реестр и виртуальная память, различные .ini файлы, а также файлы документов и приложений).
Наиболее часто используемые каталоги. К таковым можно отнести рабочий стол, меню "пуск", системные каталоги, каталоги кэша интернета, и т.п.
Данные о свободном месте диска - т.е. та информация, которая позволит найти место для сохранения на диск новых данных.
В случае, если этот базовый объем информации не будет доступен прямо в оперативной памяти, системе придется совершать множество ненужных операций еще до того, как она начнет работу с реальными данными. Что входит в эти объемы в разных файловых системах? Или, вопрос в более практической плоскости - каким объемом свободной оперативной памяти надо располагать, чтобы эффективно работать с той или иной файловой системой?
FAT16 имеет очень мало данных, отвечающих за организацию файловой системы. Из служебных областей можно выделить только саму область FAT, которая не может превышать 128 Кбайт (!) - эта область отвечает и за поиск фрагментов файлов, и за поиск свободного места на томе. Каталоги системы FAT также очень компактны. Общий объем памяти, необходимый для предельно эффективной работы с FAT-ом, может колебаться от сотни килобайт и до мегабайта-другого - при условии огромного числа и размера каталогов, с которыми ведется работа.
FAT32 отличается от FAT16 лишь тем, что сама область FAT может иметь более внушительные размеры. На томах порядка 5 - 10 Гбайт область FAT может занимать объем в несколько Мбайт, и это уже очень внушительный объем, надежно кэшировать который не представляется возможным. Тем не менее, область FAT, а вернее те фрагменты, которые отвечают за местоположение рабочих файлов, в подавляющем большинстве систем находятся в памяти машины - на это расходуется порядка нескольких Мбайт оперативной памяти.
NTFS, к сожалению, имеет гораздо большие требования к памяти, необходимой для работы системы. Прежде всего, кэширование сильно затрудняет большие размеры каталогов. Размер одних только каталогов, с которыми активно ведет работу система, может запросто доходить до нескольких Мбайт и даже десятков Мбайт! Добавьте к этому необходимость кэшировать карту свободного места тома (сотни Кбайт) и записи MFT для файлов, с которыми осуществляется работа (в типичной системе - по 1 Кбайт на каждый файл). К счастью, NTFS имеет удачную систему хранения данных, которая не приводит к увеличению каких-либо фиксированных областей при увеличении объема диска. Количество данных, с которым оперирует система на основе NTFS, практически не зависит от объема тома, и основной вклад в объемы данных, которые необходимо кэшировать, вносят каталоги. Тем не менее, уже этого вполне достаточно для того, чтобы только минимальный объем данных, необходимых для кэширования базовых областей NTFS, доходил до 5 - 8 Мбайт.
[pagebreak]
К сожалению, можно с уверенностью сказать: NTFS теряет огромное количество своего теоретического быстродействия из-за недостаточного кэширования. На системах, имеющих менее 64 Мбайт памяти, NTFS просто не может оказаться быстрее FAT16 или FAT32. Единственное исключение из этого правила - диски FAT32, имеющие объем десятки Гбайт (я бы лично серьезно опасался дисков FAT32 объемом свыше, скажем, 30 Гбайт). В остальных же случаях - системы с менее чем 64 мегабайтами памяти просто обязаны работать с FAT32 быстрее.
Типичный в настоящее время объем памяти в 64 Мбайта, к сожалению, также не дает возможности организовать эффективную работу с NTFS. На малых и средних дисках (до 10 Гбайт) в типичных системах FAT32 будет работать, пожалуй, немного быстрее. Единственное, что можно сказать по поводу быстродействия систем с таким объемом оперативной памяти - системы, работающие с FAT32, будут гораздо сильнее страдать от фрагментации, чем системы на NTFS. Но если хотя бы изредка дефрагментировать диски, то FAT32, с точки зрения быстродействия, является предпочтительным вариантом. Многие люди, тем не менее, выбирают в таких системах NTFS - просто из-за того, что это даст некоторые довольно важные преимущества, тогда как типичная потеря быстродействия не очень велика.
Системы с более чем 64 Мбайтами, а особенно - со 128 Мбайт и более памяти, смогут уверенно кэшировать абсолютно всё, что необходимо для работы систем, и вот на таких компьютерах NTFS, скорее всего, покажет более высокое быстродействие из-за более продуманной организации данных. В наше время этим показателям соответствует практически любой компьютер.
Быстродействие накопителя
Влияют ли физические параметры жесткого диска на быстродействие файловой системы? Да, хоть и не сильно, но влияют. Можно выделить следующие параметры физической дисковой системы, которые по-разному влияют на разные типы файловых систем:
Время случайного доступа (random seek time). К сожалению, для доступа к системным областям на типичном диске более сложной файловой системы (NTFS) приходится совершать, в среднем, больше движений головками диска, чем в более простых системах (FAT16 и FAT32). Гораздо большая фрагментация каталогов, возможность фрагментации системных областей - всё это делает диски NTFS гораздо более чувствительными к скорости считывания произвольных (случайных) областей диска. По этой причине использовать NTFS на медленных (старых) дисках не рекомендуется, так как высокое (худшее) время поиска дорожки дает еще один плюс в пользу систем FAT.
Наличие Bus Mastering. Bus Mastering - специальный режим работы драйвера и контроллера, при использовании которого обмен с диском производится без участия процессора. Стоит отметить, что система запаздывающего кэширования NTFS сможет действовать гораздо более эффективно при наличии Bus Mastering, т.к. NTFS производит отложенную запись гораздо большего числа данных. Системы без Bus Mastering в настоящее время встречаются достаточно редко (обычно это накопители или контроллеры, работающие в режиме PIO3 или PIO4), и если вы работаете с таким диском - то, скорее всего, NTFS потеряет еще пару очков быстродействия, особенно при операциях модификации каталогов (например, активная работа в интернете - работа с кэшем интернета).
Кэширование как чтения, так и записи на уровне жестких дисков (объем буфера HDD - от 128 Кбайт до 1-2 Мбайт в современных дорогих дисках) - фактор, который будет более полезен системам на основе FAT. NTFS из соображений надежности хранения информации осуществляет модификацию системных областей с флагом "не кэшировать запись", поэтому быстродействие системы NTFS слабо зависит от возможности кэширования самого HDD. Системы FAT, напротив, получат некоторый плюс от кэширования записи на физическом уровне. Стоит отметить, что, вообще говоря, всерьез принимать в расчет размер буфера HDD при оценке быстродействия тех или иных файловых систем не стоит.
Подводя краткий итог влиянию быстродействия диска и контроллера на быстродействия системы в целом, можно сказать так: NTFS страдает от медленных дисков гораздо сильнее, чем FAT.
Размер кластера
Хотелось бы сказать пару слов о размере кластера - тот параметр, который в файловых системах FAT32 и NTFS можно задавать при форматировании практически произвольно. Прежде всего, надо сказать, что больший размер кластера - это практически всегда большее быстродействие. Размер кластера на томе NTFS, однако, имеет меньшее влияние на быстродействие, чем размер кластера для системы FAT32.
Типичный размер кластера для NTFS - 4 Кбайта. Стоит отметить, что при большем размере кластера отключается встроенная в файловую систему возможность сжатия индивидуальных файлов, а также перестает работать стандартный API дефрагментации - т.е. подавляющее число дефрагментаторов, в том числе встроенный в Windows 2000, будут неспособны дефрагментировать этот диск. SpeedDisk, впрочем, сможет - он работает без использования данного API. Оптимальным с точки зрения быстродействия, по крайней мере, для средних и больших файлов, считается (самой Microsoft) размер 16 Кбайт. Увеличивать размер далее неразумно из-за слишком больших расходов на неэффективность хранения данных и из-за мизерного дальнейшего увеличения быстродействия. Если вы хотите повысить быстродействие NTFS ценой потери возможности сжатия - задумайтесь о форматировании диска с размером кластера, большим чем 4 Кбайта. Но имейте в виду, что это даст довольно скромный прирост быстродействия, который часто не стоит даже уменьшения эффективности размещения файлов на диске.
Быстродействие системы FAT32, напротив, можно довольно существенно повысить, увеличив размер кластера. Если в NTFS размер кластера почти не влияет на размер и характер данных системных областей, то в системе FAT увеличивая кластер в два раза, мы сокращаем область FAT в те же два раза. Вспомните, что в типичной системе FAT32 эта очень важная для быстродействия область занимает несколько Мбайт. Сокращение области FAT в несколько раз даст заметное увеличение быстродействия, так как объем системных данных файловой системы сильно сократиться - уменьшается и время, затрачиваемое на чтение данных о расположении файлов, и объем оперативной памяти, необходимый для буферизирования этой информации. Типичный объем кластера для систем FAT32 составляет тоже 4 Кбайт, и увеличение его до 8 или даже до 16 Кбайт - особенно для больших (десяток и более гигабайт) дисков - достаточно разумный шаг.
Другие соображения
NTFS является достаточно сложной системой, поэтому, в отличие от FAT16 и FAT32, имеются и другие факторы, которые могут привести к существенному замедлению работы NTFS:
Диск NTFS был получен преобразованием раздела FAT16 или FAT32 (команда convert). Данная процедура в большинстве случаев представляет собой тяжелый случай для быстродействия, так как структура служебных областей NTFS, скорее всего, получится очень фрагментированной. Если есть возможность - избегайте преобразования других систем в NTFS, так как это приведет к созданию очень неудачного диска, которому не поможет даже типичный (неспециализированный) дефрагментатор, типа Diskeeper-а или встроенного в Windows 2000.
Активная работа с диском, заполненным более чем на 80% - 90%, представляет собой катастрофический для быстродействия NTFS случай, так как фрагментация файлов и, самое главное, служебных областей, будет расти фантастически быстро. Если ваш диск используется в таком режиме - FAT32 будет более удачным выбором при любых других условиях.
Выводы
В данной заключительной части "одной строчкой" собраны ключевые особенности быстродействия этих трех файловых систем.
FAT - плюсы:
Для эффективной работы требуется немного оперативной памяти.
Быстрая работа с малыми и средними каталогами.
Диск совершает в среднем меньшее количество движений головок (в сравнении с NTFS).
Эффективная работа на медленных дисках.
FAT - минусы:
Катастрофическая потеря быстродействия с увеличением фрагментации, особенно для больших дисков (только FAT32).
Сложности с произвольным доступом к большим (скажем, 10% и более от размера диска) файлам.
Очень медленная работа с каталогами, содержащими большое количество файлов.
NTFS - плюсы:
Фрагментация файлов не имеет практически никаких последствий для самой файловой системы - работа фрагментированной системы ухудшается только с точки зрения доступа к самим данным файлов.
Сложность структуры каталогов и число файлов в одном каталоге также не чинит особых препятствий быстродействию.
Быстрый доступ к произвольному фрагменту файла (например, редактирование больших .wav файлов).
Очень быстрый доступ к маленьким файлам (несколько сотен байт) - весь файл находится в том же месте, где и системные данные (запись MFT).
NTFS - минусы:
Существенные требования к памяти системы (64 Мбайт - абсолютный минимум, лучше - больше).
Медленные диски и контроллеры без Bus Mastering сильно снижают быстродействие NTFS.
Работа с каталогами средних размеров затруднена тем, что они почти всегда фрагментированы.
Диск, долго работающий в заполненном на 80% - 90% состоянии, будет показывать крайне низкое быстродействие.
Хотелось бы еще раз подчеркнуть, что на практике основной фактор, от которого зависит быстродействие файловой системы - это, как ни странно, объем памяти машины. Системы с памятью 64-96 Мбайт - некий рубеж, на котором быстродействие NTFS и FAT32 примерно эквивалентно. Обратите внимание также на сложность организации данных на вашей машине. Если вы не используете ничего, кроме простейших приложений и самой операционной системы - может случиться так, что FAT32 сможет показать более высокое быстродействие и на машинах с большим количеством памяти.
NTFS - система, которая закладывалась на будущее, и это будущее для большинства реальных применений сегодняшнего дня еще, к сожалению, видимо не наступило. На данный момент NTFS обеспечивает стабильное и равнодушное к целому ряду факторов, но, пожалуй, всё же невысокое - на типичной "игровой" домашней системе - быстродействие. Основное преимущество NTFS с точки зрения быстродействия заключается в том, что этой системе безразличны такие параметры, как сложность каталогов (число файлов в одном каталоге), размер диска, фрагментация и т.д. В системах FAT же, напротив, каждый из этих факторов приведет к существенному снижению скорости работы.
Только в сложных высокопроизводительных системах - например, на графических станциях или просто на серьезных офисных компьютерах с тысячами документов, или, тем более, на файл-серверах - преимущества структуры NTFS смогут дать реальный выигрыш быстродействия, который порой заметен невооруженным глазом. Пользователям, не имеющим большие диски, забитые информацией, и не пользующимся сложными программами, не стоит ждать от NTFS чудес скорости - с точки зрения быстродействия на простых домашних системах гораздо лучше покажет себя FAT32.
Жесткие диски (винчестеры), как электромеханические устройства, являются одним из самых ненадежных компонентов современного компьютера. Несмотря на то, что в большинстве случаев срок службы последних соизмерим, и даже превосходит время их эксплуатации до момента морального устаревания и замены более новыми моделями, все же отдельные экземпляры выходят из строя в течение первых месяцев эксплуатации. Выход жесткого диска из строя - самое худшее, что может случиться с вашим компьютером, так как при этом часто необратимо теряются накопленные на нем данные. Если резервная копия по какой-то причине отсутствует, то суммарный ущерб от поломки заметно превышает номинальную стоимость современных винчестеров.
Многие фирмы, пользуясь ситуацией, предлагают свои услуги по восстановлению информации с вышедшего из строя накопителя. Очевидно, это обходится недешево и целесообразно только тогда, когда на диске находилось что-то действительно ценное. В противном случае легче просто смириться с потерей.
Ремонт жестких дисков требует специального оборудования и практически невозможен в домашних условиях. Так, например, для вскрытия контейнера необходима особо чистая от пыли комната. Казалось бы, положение безнадежно и нечего даже помышлять о восстановлении поломанного диска в домашних условиях. Но, к счастью, не все поломки настолько серьезны, и во многих случаях можно обойтись для ремонта подручными (а иногда чисто программными) средствами.
Один из самых частых отказов винчестеров фирмы western digital (а также и некоторых других) выглядит следующим образом: жесткий диск не опознается bios, а головки при этом отчетливо стучат. Скорее всего, по какой-то причине не работает блок термокалибровки, и устройство не может обеспечить нужный зазор между головкой и рабочей поверхностью "блина". Обычно это происходит при отклонении от нормального температурного режима эксплуатации, например, в зимнее время, когда жесткие диски в плохо отапливаемых помещениях "выстывают" за ночь (при температуре 18...210С жесткий диск часто может исправно функционировать и с испорченным механизмом термокалибровки). Попробуйте дать поработать винчестеру в течение нескольких часов, чтобы он прогрелся, при этом рано или поздно винчестер попадает в необходимый диапазон температур и работоспособность (возможно, временно) восстанавливается. Разумеется, первым делом нужно скопировать всю информацию, поскольку работоспособность такого диска уже не гарантируется. То же можно рекомендовать и в отношении устаревших моделей без термокалибровки; часто они оказываются зависимыми от температурного режима, и с ростом износа винчестера эта зависимость проявляется все сильнее.
Вторым по распространенности отказом является выход из строя модуля диагностики при полной исправности остальных компонентов. Как это ни покажется парадоксальным, но полностью рабочий винчестер не проходит диагностику. При этом в регистре ошибок (порт ox1f1 для первого жесткого диска) могут содержаться значения, приведенные ниже:
Диагностические ошибки
Бит Содержимое Источник ошибки
7 0 Ошибка master диска
1 Ошибка slave диска
2-0 011 Ошибка секторного буфера
100 Ошибка контрогльной суммы, не устранимая избыточным кодированием
101 Ошибка микроконтроллера
Разные biosы могут различно реагировать на такую ситуацию, но все варианты сводятся к одному - жесткий диск не определяется и не "чувствуется". Однако на уровне портов ввода/вывода устройство функционирует отлично. Заметим, что существуют такие материнские платы (особенно среди новых моделей), которые, обнаружив ошибку микроконтроллера винчестера, просто отключают питание жесткого диска. Несложно написать для испорченного таким образом винчестера драйвер, который обеспечит работу с диском через высокоуровневый интерфейс int 0x13. Например, следующая процедура обеспечивает посекторное чтение и запись через порты ввода/вывода для первого жесткого диска в chs режиме.
lba mode для упрощения понимания не поддерживается. Необходимую техническую информацию обычно можно найти на сайте производителя вашего жесткого диска.
Этот фрагмент может служить вполне работоспособным ядром для драйвера 16-ти разрядного режима. Для упрощения понимания не включена задержка после каждого обращения к порту. В зависимости от соотношений скорости вашего процессора и контроллера диска эта задержка может и не потребоваться (в противном случае рекомендуется читать регистр статуса ox1f7, дожидаясь готовности контроллера). При этом не следует спешить с заменой такого жесткого диска на новый, с подобной неисправностью можно успешно работать не год и не два. Последнее, правда, лишь при условии, что все используемое программное обеспечение не будет конфликтовать с нестандартным драйвером. Писать драйвер, скорее всего, придется вам самому, поскольку не известно ни одной коммерческой разработки в этом направлении, а все любительские разработки выполнены в основном "под себя". Так, например, драйвер от kpnc hddfix3a поддерживает только винчестеры primary master до пятисот мегабайт и не работает в среде windows 95 (разработан на год раньше ее появления).
Более легкий, но не всегда осуществимый путь - запретить тестирование жестких дисков biosом или, по крайней мере, игнорировать результаты такового. Как это осуществить, можно прочесть в руководстве на материнскую плату (или обратиться за помощью к службе технической поддержки фирмы-производителя, поскольку в руководствах пользователя такие тонкости нередко опускают). Например, попробуйте установить "halt on" в "never" или перезаписать flach bios, модифицировав его так, чтобы тот не выполнял подобную проверку. Если Вам повезет, жесткий диск заработает! Однако иногда все же происходят и аппаратные отказы. Например, у винчестеров фирм samsung и conner отмечены случаи отказа модуля трансляции мультисекторного чтения/записи. Если это не будет обнаружено внутренним тестом устройства, то такой жесткий диск вызовет зависание операционной системы на стадии ее загрузки. Для предотвращения этого достаточно добавить в config.sys ключ multi-track=off и отключить аналогичные опции в blose. При этом, проиграв в скорости, все же можно заставить жесткий диск сносно работать. Понятно, что эксплуатировать восстановленный таким образом диск длительное время нерационально по причине потери быстродействия. Лучше приобрести новый, на который и скопировать всю информацию. С другой стороны, такой жесткий диск все же остается полностью рабочим и успешно может служить, например, в качестве резервного.
На том же connere эпизодически выходит из строя блок управления позиционированием головок, так что последние уже не могут удержаться на дорожке и при обращении к следующему сектору немного "уползают". При этом считывание на выходе дает ошибочную информацию, а запись необратимо затирает соседние сектора. Бороться с этим можно позиционированием головки перед каждой операцией записи/чтения, обрабатывая за один проход не более сектора. Понятно, что для этого необходимо вновь садиться за написание собственного драйвера. К счастью, он достаточно простой (можно использовать аппаратное прерывание от жесткого диска int 0x76 irq14, вставив в тело обработчика команду сброса контроллера. В данном случае подразумевается, что контроллер используемого жесткого диска проводит рекалибровку головки во время операции сброса. Некоторые модели этого не делают. В этом случае придется прибегнуть к операции позиционирования головки (функция ОхС дискового сервиса 0x13). Первые модели от вторых можно отличить временем, требуемым на сброс контроллера. Понятно, что электроника "сбрасывается" мгновенно, а позиционирование головки требует хоть и не большого, но все же заметного времени. Современные модели с поддержкой кэширования этого часто не делают или "откладывают" операции с головкой до первого к ней обращения. Разумеется, в этом случае кэширование придется выключить. Большинство bios позволяет это делать без труда, и нет нужды программировать контроллер самостоятельно. В другом случае вышедший из строя блок позиционирования (трансляции) подводит головки вовсе не к тому сектору, который запрашивался. Например, головки могли физически сместиться с оси, "уползая" в сторону. Разумеется, этот дефект можно скорректировать программно, достаточно проанализировать ситуацию и логику искажения трансляции. Многие модели позиционируют головку, используя разметку диска, что страхует от подобных поломок (к сожалению, сейчас от такого подхода большинство фирм отказались, выигрывая в скорости).
Конечно, все описанные программные подходы в действительности не устраняют неисправность, а только позволяют скопировать с казалось бы уже нерабочего винчестера ценные и еще не сохраненные данные. При этом ни к чему писать универсальный драйвер для win32 и защищенного режима. Вполне можно ограничиться dos-режимом. Для копирования файлов последнего должно оказаться вполне достаточно, конечно за исключением тех случаев, когда диск был отформатирован под ntsf или другую, не поддерживаемую ms-dos, систему. К счастью, для многих из них есть драйверы, которые позволяют "видеть" подобные разделы даже из "голой" ms-dos. В крайнем случае, можно ограничиться посекторным копированием на винчестер точно такой же топологии. При этом совершенно не имеет значения используемая файловая система и установленная операционная система.
Посекторно скопировать диск на винчестер с иной топологией трудно, но возможно. Дело в том, что многие современные контроллеры жестких дисков позволяют пользователю менять трансляцию произвольным образом. Для этого необходимо приобрести винчестер, поддерживающий lba-режим (а какой из современных жестких дисков его не поддерживает?). При этом он может быть даже большего объема, нежели исходный, но это никак не помешает копированию. Другой вопрос, что без переразбиения скопированный таким образом диск не "почувствует" дополнительных дорожек и следует запустить norton disk doctor, который устранит эту проблему.
Достаточно часто нарушается вычисление зон предком-пенсации. Дело в том, что плотность записи на разных цилиндрах не одинакова, так как линейная скорость растет от центра диска к периферии. Разумеется, гораздо легче постепенно уплотнять записи, нежели искать некий усредненный компромисс. На всех существующих моделях плотность записи изменяется скачкообразно и на последних моделях программно доступна через соответствующие регистры контроллера. При этом значения, выставленные в bios, практически любой жесткий диск (с интерфейсом ide) просто игнорирует. Предыдущие модели не имели с этим проблем, и только винчестеры, выпущенные в течение последних двух лет, склонны к подобным поломкам. Скорее, даже не к поломкам, а к сбоям, в результате которых искажается хранимая где-то в недрах жесткого диска информация. Если контроллер позволяет ее программно корректировать, то считайте, что ваш жесткий диск спасен. Конечно, придется пройти сквозь мучительные попытки угадать оригинальные значения, однако это можно делать и автоматическим перебором до тех пор, пока винчестер не начнет без ошибок читать очередную зону. Помните, что любая запись на диск способна нарушить низкоуровневую разметку винчестера, после чего последний восстановлению не подлежит и его останется только выкинуть. Производите только чтение секторов!
Если же контроллер не позволяет программно управлять предкомпенсацией, то еще не все потеряно. Попробуйте перед каждым обращением делать сброс контроллера, а точнее, его рекалибровку (команда ixh). В некоторых случаях это срабатывает, поскольку с целью оптимизации скорости обмена предкомпенсацией обычно управляет не один блок. И, кроме того, иногда контроллер кэша не учитывает предкомпенсацию, а его сброс реализует последнюю аппаратно. К сожалению, это по большей части догадки и результаты экспериментов автора, так как техническая документация фирм-производителей по этому поводу не отличается полнотой, а местами содержит противоречия. Можно испытать и другой способ - попробовать перезаписать микрокод контроллера (команда 92h). Конечно, это доступно только для специалистов очень высокого класса, но ведь доступно! Заметим, что не все контроллеры поддерживают такую операцию. С другой стороны, это и хорошо, так как уменьшает вероятность сбоя и не дает некорректно работающим программам (вирусам в том числе) испортить дорогое устройство. Жесткие диски от samsung обладают еще одной неприятной особенностью - часто при подключении шлейфа "на лету", при включенном питании, они перестают работать. Внешне это выглядит так: индикатор обращения к диску постоянно горит, но диск даже не определяется biosom, или определяется, но все равно не работает. Близкое рассмотрение показывает, что на шине пропадает сигнал готовности устройства. В остальном контроллер остается неповрежденным. Разумеется, если не обращать внимание на отсутствие сигнала готовности, то с устройством можно общаться, делая вручную необходимые задержки (поскольку физическую готовность устройства уже узнать не представляется возможным, приходится делать задержки с изрядным запасом времени). При этом, к сожалению, придется отказаться от dma-mode (а уж тем более ultra-dma) и ограничиться pio 1 (с небольшим риском - pio 2) режимом. Конечно, писать соответствующий драйвер вам придется опять самостоятельно. Разумеется, скорость обмена в режиме pio 1 по сегодняшним меркам совершенно неудовлетворительна и не годится ни для чего другого, кроме как копирования информации со старого на новый винчестер, но некоторые "нечистоплотные" продавцы компьютерной техники как-то ухитряются устанавливать подобные экземпляры на продаваемые машины. Будьте осторожны! Учитывая, что написание подобных драйверов для win32 - трудоемкое занятие, большинство ограничивается поддержкой одной лишь ms-dos, и вовсе не факт, что компьютер, демонстрирующий загрузку win95, содержит исправный, а не реанимированный подобным образом жесткий диск.
У жестких дисков фирмы samsung при подключении "налету" может появляться другой неприятный дефект - при запросах на чтение контроллер периодически "повисает" и не завершает операцию. В результате "замирает" вся операционная система (впрочем, windows nt с этим справляется, но, вероятно, не всегда). На первый взгляд может показаться, что с этого винчестера несложно скопировать ценные файлы, но при попытке выполнить это выясняется, что диск "зависает" все чаще и чаще и копирование растягивается до бесконечности. Однако если выполнить сброс контроллера, то можно будет повторить операцию. Это можно сделать аппарат -но, подпаяв одну кнопку на линию сброса и статуса. Последнее нужно для указания на ошибочную ситуацию, чтобы операционная система повторила незавершенную операцию. Если этого не сделать, то часть секторов не будет реально прочитана (записана). Или можно выполнять сброс автоматически, например, по таймеру. Чтобы не сталкиваться с подобной ситуацией, никогда не следует подсоединять/отсоединять винчестер при включенном питании. Очень часто это приводит к подобным ошибкам, хотя производители других фирм, по-видимому, как-то от этого все же защищаются, ибо аналогичной ситуации у них практически не встречается. Все же не стоит искушать судьбу... От аппаратных ошибок теперь перейдем к дефектам поверхности. Заметим сразу, что последнее встречается гораздо чаще и проявляется намного коварнее. Обычно это ситуация, в которой мало что можно предпринять. Но достичь главной цели - спасти как можно больше уцелевших данных - довольно часто удается. Возьмем такую типичную ситуацию как ошибка чтения сектора. Маловероятно, чтобы сектор был разрушен целиком. Чаще всего "сыплется" только какая-то его часть, а все остальные данные остаются неискаженными. Существуют контроллеры двух типов. Первые, обнаружив расхождение контрольной суммы считанного сектора, все же оставляют прочитанные данные в буфере и позволяют их извлечь оттуда, проигнорировав ошибку чтения. Вторые либо очищают буфер, либо просто не сбрасывают внутренний кэш, в результате чего все равно прочитать буфер невозможно. На практике обычно встречаются последние. При этом сброс кэша можно инициировать серией запросов без считывания полученных данных. Кэш при этом переполняется, и наиболее старые данные будут вытолкнуты в буфер. Остается их только прочесть. Конечно,-это крайне медленно, но, к сожалению, универсальной команды сброса кэша не существует. Разные разработчики реализуют это по-своему (впрочем, иногда это можно найти в документации на чипы, используемые в контроллере). western digital сообщает в техническом руководстве что при длинном чтении сектора без повтора контроль сектора не выполняется и он будет-таки целиком помещен в буфер. Кстати, так и должно быть по стандарту. Увы, остальные фирмы от него часто отклоняются по разным соображениям. Остается определить, какие же из прочитанных данных достоверные, а какие нет (если этого не видно "визуально" - например, в случае текстового или графического файлов)? Разумеется, в подобных рамках задача кажется неразрешимой, но это не совсем так. Дело в том, что можно произвести не только короткое, но и длинное чтение (ox22h req ploin long with retry), для чего можно использовать следующую процедуру. При этом кроме собственно данных читаются также и корректирующие коды. Автоматическая коррекция не выполняется (хотя некоторые контроллеры это реализуют аппаратно и не могут отключить автокоррекцию; в документации этот момент, кстати, не уточняется). Как правило, используются корректирующие коды Рида-Соломона, хотя последнее не обязательно. Математические законы позволяют не только определить место возникновения сбоя, но и даже восстановить несколько бит. При больших разрушениях можно определить только место сбоя, но достоверно восстановить информацию не удается.
Модуляция при записи такова, что все биты, стоящие справа от сбойного, уже не достоверны. Точнее, не все, а только в пределах одного пакета. Обычно за один раз записывается от 3 до 9 бит (необходимо уточнить у конкретного производителя) и содержимое остальных пакетов, как правило, остается достоверным. Самое интересное, что зачастую сбойный пакет можно восстановить методом перебора! При этом можно даже рассчитать, сколько вариантов должно получиться. Учитывая хорошую степень "рассеяния" корректирующих кодов можно сказать, что не очень много. И таким образом можно восстановить казалось бы безнадежно испорченные сектора, а вместе с ними и файлы, расположенные "поверх" последних.
Выше были перечислены наиболее типичные случаи отказов жестких дисков, которые поддавались чисто программному восстановлению если уж не винчестера, то хотя бы хранимых на нем данных. Разумеется, что иногда жесткий диск выходит из строя полностью (например, при неправильно подключенном питании, скачках напряжения) от вибрации или ударов, а то и просто из-за откровенного заводского брака. Есть один старый проверенный способ - найти жесткий диск такой же точно модели и заменить электронную плату. К сожалению, последнее из-за ряда конструктивных особенностей все реже и реже бывает возможно, а уж дефекты поверхности этот способ и вовсе бессилен вылечить. Поэтому, берегите свой жесткий диск и почаще проводите резервное копирование. Помните, что самое дорогое это не компьютер, а хранимая на нем информация!
В этом разделе вы создадите два новых приложения OLE. Первое - простая программа-сервер OLE, второе - пример простого контейнера OLE. Эти программы предназначены для демонстрации минимальных затрат программирования, необходимых для создания приложений OLE 2.
В любом случае, для создания оболочки программы следует воспользоваться приложением AppExpert. Сначала необходимо сгенерировать основу приложения в AppExpert, затем модифицировать созданные файлы для создания законченного рабочего примера.
При написании своих версий этих программ необходимо иметь в виду несколько моментов. Во-первых, в этой главе приводятся листинги только исходных, немодифицированных файлов.
Во-вторых, CLSID этих программ будет отличаться от CLSID программ, которые вы сгенерируете с помощью AppExpert. Это нормально и даже необходимо, поскольку с помощью CLSID одни серверные приложения в Windows отличаются от других.
В-третьих, эти примеры содержат минимум необходимых средств для того, чтобы начать программировать с OLE. Вы можете использовать эти примеры в качестве начального кода для создания своего действительно полезного сервера или контейнера. В этой главе просто не хватает места для описания реализации функциональных сервера и контейнера - в этом случае вам понадобился бы грузоподъемник, чтобы положить эту книгу на стол.
Создание сервера OLE
Первое приложение OLE в этой главе - сервер. В этом примере вы построите полный сервер - сервер, который может использоваться и как автономное приложение, и как сервер. Создавая автономный сервер (т.е. в виде исполняемой программы .ЕХЕ, а не в виде динамически подключаемой библиотеки DLL), вы упрощаете процесс регистрации сервера в Windows.
Начальный процесс разработки сервера прост. Сначала из интегрированной среды Borland C++ версии 4.5 запустите AppExpert. Задайте каталог и имя вашего проекта. Я поместил свой проект в каталог \BC45\SOURCE\OLESVR. Проект я назвал OLESVR (я всегда называю проекты и каталоги проектов одним и тем же именем, это облегчает запоминание). Ниже приводится последовательность действий, в результате которых был создан проект OLESVR.
Запустите AppExpert. В первом диалоговом окне следует задать имя и каталог проекта. Как уже отмечалось, я использовал OLESVR для задания обоих.
После выбора ОК в диалоговом окне имени и каталога проекта следующий раздел АррЕхреrt - диалоговое окно Application General Options (основные опции приложения). Это диалоговое окно позволяет задать конфигурацию приложения, генерируемого AppExpert. Вам придется модифицировать несколько опций для проекта OLESVR.
Первая опция, которую необходимо изменить, находится в блоке Application: Summary. Замените параметр по умолчанию Multiple document interface на Single document interface. Это изменение согласуется с призывом Microsoft делать ставку на однодокументные приложения для Windows. На рис. 21.1 демонстрируется модифицированный блок Application: Summary.
Второе изменение, которое необходимо внести, - указать AppExpert, что ваша программа будет сервером OLE. Это изменение вносится в пункт Application: OLE 2 Options, имеющий ряд опций OLE 2, которые можно задавать. Поскольку вы создаете сервер OLE, вы будете оперировать только элементами блока группы OLE 2 Server: (поищите его в правой верхней части диалога). Выберите кнопку ячейки пометки Server EXE. На рис. 21.2 демонстрируются изменения, проведенные в пункте Application:OLE 2 Options.
При желании вы можете заполнить элементы пункта Application: Admin Options блока диалога AppExpert. С его помощью вы можете задать в приложении заметку об авторском праве, имя и информацию о версии. Все элементы в Application: Admin Options необязательны, и вы можете их не задавать.
Подпункты пункта Main Window не нуждаются в модификациях, их следует оставить заданными значениями по умолчанию. Для данного приложения нет необходимости менять что-либо в этих подпунктах. Пункт MDI Child/View неприменим для этого проекта, поэтому нет нужды в нем что-нибудь менять.
После задания всех необходимых модификаций следует выбрать кнопку Generate в нижней части блока диалога AppExpert Application General Options. AppExpert запросит у вас подтверждение, действительно ли вы собираетесь создать проект; после принятия подтверждения AppExpert сгенерирует приложение. На рис. 21.3 приводится конечный проект, загруженный в интегрированную среду Borland C++ версии 4.5.
Теперь, когда программа сгенерирована, в нее следует добавить код, задающий функциональность сервера OLE. Необходимо включить код, рисующий изображение, а также провести другие незначительные изменения.
К счастью, помимо Borland C++ версии 4.5 можно воспользоваться программой ClassExpert, что облегчит внесение большей части изменений. Предположим, вы хотите сперва заняться вопросами отображения. Как и в любой созданной с помощью AppExpert программе, основная часть рисования выполняется классом отображения, производным от класса OWL TOleView. Файл, в котором содержится реализация отображения, имеет имя LSVROLVW.CPP. В листинге 21.1 приводится первоначальный файл OSROLVW.CPP.
Листинг (файл реализации класса отображения OLESVR, OSVROLVW.CPP)
Все началось до банального просто - любимый директор сказал "Хочу!". Аргументация была следующей:
* Переводится много бумаги для печати и отправки по факсу (клиентов много, потому отправленные счета сразу выбрасываются: найти нужный документ даже через день - нереально)
* Электронная почта "есть в наши дни у всех и каждого" (то, что сам директор ею не пользуется - другой вопрос :-) )
* Тратится меньше времени персонала (не нужно сидеть и ждать перед факсом, стартовать, "прошло"/"не прошло", ...)
* Легче вести учет когда и что было отправлено.
Сначала ставился вопрос отправки документов вообще - что может быть проще? Сохранить таблицу как файл MS-Excel, вызвать внешнюю программу отправки с параметрами - и все. Потом возникли сомнения:
* А вот клиенты отредактируют файл - и будут доказывать что мы такой и отправили,
* В файле передается рисунок печати - они его смогут использовать с какой-нибудь темной целью.
Сразу же было предложено отправить как рисунок, благо я знал, что это можно сделать, но как - еще не представлял. Согласие получено, и вот начались поиски соответствующих программ...
Подбор нужного инструментария
Некоторое время я стараюсь использовать бесплатные программы, а не ломать те, за которые нужно платить деньги. Так что одним из условий (не главным, но в результате выполненным почти на 100%) была бесплатность инструментария.
Понятно, что для получения рисунка на выходе нужен виртуальный принтер, на который можно печатать любой документ. Выходным форматом был выбран tiff как достаточно распространенный, предполагая что его можно будет конвертировать в любой формат, если возникнет необходимость. Были испробованы многие принтеры, встреченные в просторах Internet`а, как бесплатные, так и нет. Большинство из них умеют печатать кроме искомого tiff еще и pdf документы, но не один не удовлетворял условиям передачи в них внешних параметров (важно было указать место сохранения и возможно имя файла для уменьшения коллизий, поскольку работа происходит на сервере терминалов). В конечном итоге выбор пал на AFPL Ghostscript 8.14 for Win32 и драйвер переадресации порта принтера RedMon.
Ghost Script умеет конвертировать данные из ps, eps, pdf в разные форматы (те же ps, eps, pdf, языки принтеров вроде PCL6 от HP, и рисунки). Получать данные он может как из файла, так и из входящего потока (stdin для посвященных). RedMon умеет данные, полученные от драйвера принтера, передавать как входной поток выбранной программе. Кроме того устанавливает несколько системных переменных, одну из которых (%REDMON_USER% - имя пользователя, печатающего документ) мы будем использовать.
Итак - используемый режим связки: установка PS принтера в системе, указание ему виртуального порта RedMon, пересылка исходящего PS потока от принтера на Ghost Script, формирование tif по указанным настройкам.
Настройки для режима работы Ghost Script хранятся в файле одном для всех, потому в схему добавим еще одно звено: RedMon передает данные не Ghost Script, а скрипту WSH, а уже он откорректировав настройки под пользователя, передает дальше поток для Ghost Script. Потому еще одна программа, которая нам нужна: Windows Script 5.6 for Windows. Нужна именно версия 5.6, поскольку во встроенной в Windows 2000 версии 5.1 отсутствует необходимый метод Exec().
Еще возможно нам понадобится компонент для вывода рисунков с прозрачным фоном. Пока приходится использовать Active_BMP, упоминаемый на безвременно почившем hare.ru. Этот компонент умеет отображать прозрачными только 2-х цветные bmp (по крайней мере только с ними у меня получилось добиться прозрачности), но за неимением лучшего... :-) (Если кто знает бесплатный ActiveX компонент для отображения gif с прозрачным слоем - скажите в форум или мыло)
Собственно для отправки почты из командной строки я уже полгода пользуюсь Postie, потому искать ничего нового не пришлось.
Приступим (установка и регистрация программ)
Установка WSH проблем не вызывает (конечно, если вы не попытаетесь установить версию для 9X/NT4 на 2000/XP, как я это сделал, причем осознал это только взявшись за статью - уже месяц сервер живет в этом режиме :-) ): запуск scripten.exe (scr56en.exe), ответы на все вопросы, перезагрузка.
Установка Ghost Script не требует даже перезагрузки. Единственный момент - от пытается по умолчанию установится в каталог %SystemDrive%\gs - я его устанавливал в %SystemDrive%\Tools\gs - так мне удобнее. (ниже в скобках я буду писать свои настройки, с которыми у меня работает живая система).
Для установки RedMon нужно его распаковать в некий каталог (%SystemDrive%\Tools\RedMon) и запустить setup.exe из него. В файлах readme.txt и redmon.hlp находится подробная информация по установке и стандартной настройке redmon.
Регистрация Active_BMP осуществляется распаковкой файлов в каталог (%SystemDrive%\Tools\OLE\ActiveBMP) и запуском из этого каталога "regsvr32 Bmp_1c.ocx".
В дальнейшем каталоги с RedMon и Active_BMP нам не понадобятся, так что про них смело можно забыть (но не удалять совсем с диска :-) ).
Postie устанавливается простым извлечение его в нужный каталог (%SystemDrive%\Tools\Postie).
Теперь нам необходимо настроить принтер. Для этого из папки принтеры выбираем "Добавить". Тип принтера - локальный, отказываемся от автоматического поиска и добавляем порт: тип порта: Redirect Port, имя: RPT1. На следующем шаге выбираем модель PS-принтера (в RedMon рекомендуется Apple LaserWriter II NT или Apple Color LaserWriter 12/600 если вы хотите цветное изображение). Я использовал Apple LaserWriter II NT, т.к. мне нужно было черно-белое изображение. Сразу после этого я переименовал принтер в более соответствующее его функциям название: "Send EMail". Теперь нам необходимо настроить порт. Для этого открываем настройки принтера, ищем страницу "Порты" и жмем кнопку "Конфигурировать порт".
Дальнейшие настройки отличаются от стандартных, описанных в redmon.hlp:
* "Redirect this port to the program:"="cscript.exe" (без кавычек, естественно),
* "Arguments for this programs are:"="Наш\Скрипт\С\Полным\Путем.js" (%SystemDrive%\Tools\gs\PrnUser.js) (в кавычках, если путь содержит пробелы),
* "Output:"="Program handles output"
* "Run:"="Hidden"
* "Run as user" снята (у меня вызывало ошибку, если установлено)
* "Shut down delay:"="300"
Кнопка "Log file" нужна во время отладки всей системы отправки почты, хотя можно оставить запись лога и в рабочем режиме - все равно он перезаписывается, а не накапливается.
Соглашения о настройках
Скрипт, который мы указали в настройках порта, принимает данные с принтера и согласно настройкам, сохраненным из внешней программы (1С или другой), отправляет его по почте как рисунок (в скрипте предусмотрены проверки на корректность значений). Поскольку единственное, что мы можем получить из печатного задания - это имя пользователя (%REDMON_USER%), то с каждым пользователем мы будем работать в его каталоге, при этом одновременная печать 2-х заданий от одного пользователя невозможна. (Если вам удастся передать в скрипт другую информацию из 1С, например: уникальный идентификатор задания или имя файла - сообщите мне). У меня используется самописный компонент SysTools для получения профиля пользователя по его имени. Поскольку он еще только в альфа-версии выкладывать не буду, если кому нужен - вышлю по почте. Итак, предположим, у нас есть каталог, в котором хранятся данные пользователей (%MyProfiles%\User1, %MyProfiles%\User2, ...). К личном каталоге пользователя мы будем создавать подкаталог SendMail для отправки почты.
Временные файлы для работы мы будем хранить во временном каталоге (переменная %TEMP% для системы, поскольку запускаться скрипт будет от имени Local service).
Все остальные настройки и пути к файлам заданы в переменных вначале скрипта - их можно (и нужно) изменить для себя.
Файл, в котором 1С сохраняет настройки называется %UserProfile%\SendMail\mail.ini и имеет следующую структуру: каждая строка - поле=значение, кроме поля BODY, которое обязательно идет последним и может быть растянуто на несколько строк.
Пишем программу
В этом разделе будут показаны и пояснены тексты нескольких модулей, входящих в демонстрационную конфигурацию. Скрипт на языке JavaScript здесь описан не будет, поскольку несоответствует тематике раздела. Надеюсь - комментариев внутри скрипта будет достаточно для пожелавших разобраться в его работе.
Поскольку в 1С не предусмотрена модульная организация программ, то сложные вещи я обычно строю по такой схеме: законченная функциональность - во внешней обработке, параметры в которую передаются через СписокЗначений, и вспомагательная процедура/функция в глобальном модуле, которая этот список заполняет из параметров. Так было сделано и здесь.
Функция запроса параметров отправки почты (кому, от кого, тема и пр.) в глобальном модуле выглядит так:
[pagebreak]
В этой функции переданные параметры записываются в список значений, который передается внешней обработке ПараметрыОтправкиПочты.ert в подкаталоге ExtForms каталога базы данных. Запрос параметров имеет вид:
Возвращенные значения записываются в файл, параметры которого (путь, имя, и т.п.) заданы в конце глобального модуля.
В самой обработке ничего интересного нет: чтение параметров из списка, отображение и проверка параметров при нажатии кнопки Отправить. Если не заданы необходимые параметры (ОтКого, Кому) или адреса E-Mail указаны не правильно - будет выдано сообщение и форма не закроется.
Рассмотрим параметры вызова даной функции:
* Заголовок - заголовок формы, на рисунке - синяя надпись "Тестовый документ №3 от 30.04.04";
* Кому, ОтКого, Копия - E-mail или список E-Mail`ов (через ",");
* Тема, Сообщение - соответствующие параметры письма;
* Запретить - какие поля запрещены для редактирования (на рисунке - поле Тема);
* БезФормы - если 1: форма не отображается и при правильных параметрах письмо отправится автоматически.
Следующая функция вызывает эту и если все прошло успешно - вызывает внешнюю обработку для небольшой предподготовки таблицы при печати и отправки ее:
Здесь уже большая функциональность перенесена на обработку. Она (обработка) вообще не открывается, только выполняет некоторые действия. Рассмортим параметры:
* Таб - Значение типа "Таблица", которую и будем печатать;
* Заголовок, Кому, ОтКого, Копия, Тема, Сообщение, Запретить, БезФормы - просто передаются в функцию глПараметрыОтправкиПочты и подробно рассмотрены в ней;
* Масштаб - масштаб печати таблицы. Если не задан - автомасштаб по ширине.
В обработке всего 2 процедуры: ПроверитьПараметр для проверки корректности переданных значений и ПриОткрытии, в которой подготавливается и печатается таблица. Выглядит весь модуль обработки так:
Код: (1c)
Вот практически и все, что касается программы в 1С. Некоторые сервисные функции, которые не были описаны здесь, можно посмотреть в примере конфигурации. Таким образом ничего сложного здесь нет. Больше сложностей вызывает настройка системы для правильной работы. Выглядит отправленный документ приблизительно так:
Замечания в процессе эксплуатации
Сразу скажу - в боевом режиме система работает недолго (с 15.04.2004), но даже за это время были замечены некоторые "особенности" работы:
* Формат tiff оказался не таким уж стандартным. Потому пришлось его заменить на png. Сделать это нужно в двух местах: в суффиксе исходящего файла в скрипте (чтобы Postie правильно поставил его Content-Type:) и в настройках GS (параметр -sDEVICE=pngmono собственно и задает выходной формат файла). Можно заменить и на еще более стандартный jpeg, но при этом сильно вырастет размер файла. К сожалению gif уже не поддерживается в текущей версии GS (как я понял из документации - из-за возможных проблем с лицензированием этого формата). Можно добится поддержки gif, выдрав ее из исходников предыдущих версий и перекомпилировав текущую, но я пока этого не делал. Возникла мысль передавать в настроечном файле (%UserProfile%\SendMail\mail.ini) параметры, как отправлять изображения (jpeg, tif, png; color/mono; ...) и в скрипте динамически менять.
* PostScript шрифты, идущие в поставке GS, не так хорошо "вылизаны", как TrueType. Потому русские буквы выглядят жирнее англиских. Пока жалоб на это не было :-)
* В новой версии Postie у меня почему-то не работает ключ -bcc (ошибки не выдает, но и не отправляет по указанным адресам). Так и не разобрался - пришлось откатится на старую версию (POSTIE Version 4)
* Хотя ломать ничего и не пришлось, но все-таки мы нарушаем лицензию Postie, который "free for personal use". Может кто знает другую программу отправки почты из коммандной строки?
Благодарности
Моему любимому директору - за неуемный ум и новые интересные задания.
Вадиму Ханасюку - за неопубликованную здесь, но полезную компоненту SysInfo (получение каталога профиля пользователя по имени) и помощь в поиске нужного софта.
Всем сотрудникам, которые не мешали работать.
Для программирования расширенных хранимых процедур Microsoft предоставляет ODS (Open Data Service) API набор макросов и функций, используемых для построения серверных приложений позволяющих расширить функциональность MS SQL Server 2000.
Расширенные хранимые процедуры - это обычные функции написанные на С/C++ с применением ODS API и WIN32 API, оформленные в виде библиотеки динамической компоновки (dll) и призванные, как я уже говорил, расширять функциональность SQL сервера. ODS API предоставляет разработчику богатый набор функций позволяющих передавать данные клиенту, полученные от любых внешних источников данных (data source) в виде обычных наборов записей (record set). Так же, extended stored procedure может возвращать значения через переданный ей параметр (OUTPUT parametr).
Как работают расширенные хранимые процедуры.
* Когда клиентское приложение вызывает расширенную хранимую процедуру, запрос передаётся в TDS формате через сетевую библиотеку Net-Libraries и Open Data Service ядру MS SQL SERVER.
* SQL Sever находит dll библиотеку ассоциированную с именем расширенной хранимой процедуры и загружает её в свой контекст, если она не была загружена туда ранее, и вызывает расширенную хранимую процедуру, реализованную как функцию внутри dll.
* Расширенная хранимая процедура выполняет на сервере необходимые ей действия и передаёт набор результатов клиентскому приложению, используя сервис предоставляемый ODS API.
Особенности расширенных хранимых процедур.
* Расширенные хранимые процедуры - это функции выполняющиеся в адресном пространстве MS SQL Server и в контексте безопасности учётной записи под которой запущена служба MS SQL Server;
* После того, как dll библиотека с расширенными хранимыми процедурами была загружена в память, она остаётся там до тех пор, пока SQL Server не будет остановлен, или пока администратор не выгрузит её принудительно, используя команду :
DBCC DLL_name (FREE).
* Расширенная хранимая процедура запускается на выполнение так же, как и обычная хранимая процедура:
EXECUTE xp_extendedProcName @param1, @param2 OUTPUT
@param1 входной параметр
@param2 входной/выходной параметр
Внимание!
Так как расширенные хранимые процедуры выполняются в адресном пространстве процесса службы MS SQL Server, любые критические ошибки, возникающие в их работе, могут вывести из строя ядро сервера, поэтому рекомендуется тщательно протестировать Вашу DLL перед установкой на рабочий сервер.
Создание расширенных хранимых процедур.
Расширенная хранимая процедура эта функция имеющая следующий прототип:
Параметр pSrvProc указатель на SRVPROC структуру, которая является описателем (handle) каждого конкретного клиентского подключения. Поля этой структуры недокументированны и содеражат информацию, которую библиотека ODS использует для управления коммуникацией и данными между серверным приложением (Open Data Services server application) и клиентом. В любом случае, Вам не потребуется обращаться к этой структуре и тем более нельзя модифицоравать её. Этот параметр требуется указывать при вызове любой функции ODS API, поэтому в дальнейшем я небуду останавливаться на его описании.
Использование префикса xp_ необязательно, однако существует соглашение начинать имя расширенной хранимой процедуры именно так, чтобы подчеркнуть отличие от обычной хранимой процедуры, имена которых, как Вы знаете, принято начинать с префикса sp_.
Так же следует помнить, что имена расширенных хранимых процедур чувствительны к регистру. Не забывайте об этом, когда будете вызвать расширенную хранимую процедуру, иначе вместо ожидаемого результата, Вы получите сообщение об ошибке.
Если Вам необходимо написать код инициализации/деинициализации dll, используйте для этого стандартную функцию DllMain(). Если у Вас нет такой необходимости, и вы не хотите писать DLLMain(), то компилятор соберёт свою версию функции DLLMain(), которая ничего не делает, а просто возвращает TRUE. Все функции, вызываемые из dll (т.е. расширенные хранимые процедуры) должны быть объявлены, как экспортируемые. Если Вы пишете на MS Visual C++ используйте директиву __declspec(dllexport). Если Ваш компилятор не поддерживает эту директиву, опишите экспортируемую функцию в секции EXPORTS в DEF файле.
Итак, для создания проекта, нам понадобятся следующие файлы:
* Srv.h заголовочный файл, содержит описание функций и макросов ODS API;
* Opends60.lib файл импорта библиотеки Opends60.dll, которая и реализует весь сервис предоставляемый ODS API.
Microsoft настоятельно рекомендует, чтобы все DLL библиотеки реализующие расширенные хранимые процедуры экспортировали функцию:
Когда MS SQL Server загружает DLL c extended stored procedure, он первым делом вызывает эту функцию, чтобы получить информацию о версии используемой библиотеки.
Для написания своей первой extended stored procedure, Вам понадобится установить на свой компьютер:
- MS SQL Server 2000 любой редакции (у меня стоит Personal Edition). В процесе инсталляции обязательно выберите опцию source sample
- MS Visual C++ (я использовал версию 7.0 ), но точно знаю подойдёт и 6.0
Установка SQL Server -a нужна для тестирования и отладки Вашей DLL. Возможна и отладка по сети, но я этого никогда не делал, и поэтому установил всё на свой локальный диск. В поставку Microsoft Visual C++ 7.0 редакции Interprise Edition входит мастер Extended Stored Procedure DLL Wizard. В принципе, ничего сверх естественного он не делает, а только генерирует заготовку шаблон расширенной хранимой процедуры. Если Вам нравятся мастера, можете использовать его. Я же предпочитаю делать всё ручками, и поэтому не буду рассматривать этот случай.
Теперь к делу:
- Запустите Visual C++ и создайте новый проект - Win32 Dynamic Link Library.
- Включите в проект заголовочный файл - #include <srv.h>;
- Зайдите в меню Tools => Options и добавьте пути поиска include и library файлов. Если , при установке MS SQL Server, Вы ничего не меняли, то задайте:
- C:Program FilesMicrosoft SQL Server80ToolsDevToolsInclude для заголовочных файлов;
- C:Program FilesMicrosoft SQL Server80ToolsDevToolsLib для библиотечных файлов.
- Укажите имя библиотечного файла opends60.lib в опциях линкера.
На этом подготовительный этап закончен, можно приступать к написанию своей первой extended stored procedure.
Постановка задачи.
Прежде чем приступать к программированию, необходимо чётко представлять с чего начать, какой должен быть конечный результат, и каким способом его добиться. Итак, вот нам техническое задание:
Разработать расширенную хранимую процедуру для MS SQL Server 2000, которая получает полный список пользователей зарегистрированных в домене, и возвращает его клиенту в виде стандартного набора записей (record set). В качестве первого входного параметра функция получает имя сервера содержащего базу данных каталога (Active Directory), т.е имя контролера домена. Если этот параметр равен NULL, тогда необходимо передать клиенту список локальных групп. Второй параметр будет использоваться extended stored procedure для возварата значения результата успешной/неуспешной работы (OUTPUT параметр). Если, расширенная хранимая процедура выполнена успешно, тогда необходимо передать количество записей возвращённых в клиентский record set , если в процессе работы не удалось получить требуемую информацию, значение второго параметра необходимо установить в -1, как признак неуспешного завершения.
.
А вот шаблон расширенной хранимой процедуры, который нам предстоит наполнить содержанием:
Работа с входными параметрами
В этой главе я не хочу рассеивать Ваше внимание на посторонних вещах, а хочу сосредоточить его на работе с переданными в расширенную хранимую процедуру параметрами. Поэтуму мы несколько упростим наше техническое задание и разработаем тольку ту его часть, которая работает с входными параметрами. Но сначал не много теории
Первое действие, которое должна выполнить наша exteneded stored procedure , - получить параметры, которые были переданы ей при вызове. Следуя приведённому выше алгоритму нам необходимо выполнить следующие действия:
- Определить кол-во переданных параметров;
- Убедится, что переданные параметры имеют верный тип данных;
- Убедиться, что указанный OUTPUT параметр имеет достаточную длину, для сохранения в нём значения возвращаемого нашей extended stored procedure.
- Получить переданные параметры;
- Установить значения выходного параметра как результат успешного/неуспешного завершения работы extended stored procedure .
Теперь рассмотрим подробно каждый пункт:
Определение количества переданных в расширенную хранимую процедуру параметров
Для получения количества переданных параметров необходимо использовать функцию:
.
При успешном завершении функция возвращает количество переданных в расширенную хранимую процедуру параметров. Если extended stored procedure была вызвана без параметров - srv_rpcparams ввернёт -1. Параметры могут быть переданы по имени или по позиции (unnamed). В любом случае, нельзя смешивать эти два способа. Попытка передачи в функцию входных параметров по имени и по позиции одновременно - приведёт к возникновению ошибки, и srv_rpcparams вернёт 0 .
[pagebreak]
Определение типа данных и длины переданых параметров
Для получения информации о типе и длине переданных параметров Microsoft рекомендует использовать функцию srv_paramifo. Эта универсальная функция заменяет вызовы srv_paramtype, srv_paramlen, srv_parammaxlen, которые теперь считаются устаревшими. Вот её прототип:
.
.
.
.
.
.
.
.
.
.
pByte - указатель на переменную получающую информацию о типе входного параметра;
pbType задаёт порядковый номер параметра. Номер первого параметра начинается с 1.
pcbMaxLen - указатель на переменную, в которую функция заносит максимальное значение длины параметра. Это значение обусловлено конкретным типом данных переданного параметра, его мы и будем использовать, чтобы убедиться втом, что OUTPUT параметр имеет достаточную длину для сохранения передаваемых данных.
pcbActualLen указатель на реальную длину параметра переданного в расширенную хранимую процедуру при вызове. Если передаваемый параметр имеет нулевую длину, а флаг pfNull устанавлен в FALSE то (* pcbActualLen) ==0.
pbData - указатель на буфер, память для которого должна быть выделена перед вызовом srv_paraminfo. В этом буфере функция размещает полученные от extended stored procedure входные параметры. Размер буфера в байтах равен значению pcbMaxLen. Если этот параметр установлен в NULL, данные в буфер не записываются, но функция корректно возвращает значения *pbType, *pcbMaxLen, *pcbActualLen, *pfNull. Поэтому вызывать srv_paraminfo нужно дважды: сначала с pbData=NULL, потом, выделив необходимый размер памяти под буфер равный pcbActualLen, вызвать srv_paraminfo второй раз, передав в pbData указатель на выделенный блок памяти.
pfNull указатель на NULL-флаг. srv_paraminfo устанавливает его в TRUE, если значение входного параметра равно NULL.
Проверка, является ли второй параметр OUTPUT параметром.
Функция srv_paramstatus() предназначена для определения статуса переданного параметра:
.
.
.
.
.
n - номер параметра переданного в расширенную хранимую процедуру при вызове. Напомню: параметры всегда нумеруются с 1.
Для возврата значения, srv_paramstatus использует нулевой бит. Если он установлен в 1 переданный параметр является OUTPUT параметром, если в 0 обычным параметром, переданным по значению. Если, exteneded stored procedure была вызвана без параметров, функция вернёт -1.
Установка значения выходного параметра.
Выходному параметру, переданному в расширеную хранимую можно передать значение используя функцию srv_paramsetoutput. Эта новая функция заменяет вызов функции srv_paramset, которая теперь считается устаревашай, т.к. не поддерживает новые типы данных введённые в ODS API и данные нулевой длины.
.
.
.
.
.
.
.
.
n - порядковый номер параметра, которому будет присвоено новое значение. Это должен быть OUTPUT параметр.
pbData указатель на буфер с данными, которые будут посланы клиенту для установки значения выходного параметра.
cbLen длина буфера посылаемых данных. Если тип данных переданного OUTPUT параметра определяет данные постоянной длины и не разрешает хранение значения NULL (например SRVBIT или SRVINT1), то функция игнорирует параметр cbLen. Значение cbLen=0 указывает на данные нулевой длины, при этом парметр fNull должен быть установлен в FALSE.
fNull установите этот его в TRUE, если возвращаемому параметру необходимо присвоить значение NULL, при этом значение cbLen должно быть равно 0, иначе функция завершится с ошибкой. Во всех остальных случаях fNull=FALSE.
В случае успешного завершения функция возвращает SUCCEED. Если возвращаемое значение равно FAIL, значит вызов был неудачным. Всё просто и понятно
Теперь мы достаточно знаем, для того чтобы написать свою первую расширенную хранимую процедуру, которая будет возвращать значение через переданный ей параметр.Пусть, по сложившейся традиции, это будет строка Hello world! Отладочну версию примера можно скачать здесь.
. Не рассмотренными остались функции srv_sendmsg и srv_senddone. Функция srv_sendmsg используется для посылки сообщений клиенту. Вот её прототип:
msgtype определяет тип посылаемого клиенту сообщения. Константа SRV_MSG_INFO обозначает информационное сообщение, а SRV_MSG_ERROR сообщение об ошибке;
msgnum номер сообщения;
class - степень тяжести возникшей ошибки. Информационные сообщения имеют значение степени тяжести меньшее или равное 10;
state номер состояния ошибки для текущего сообщения. Этот параметр предоставляет информацию о контексте возникшей ошибки. Допустимые значения лежат в диапазоне от 0 до 127;
rpcname в настоящее время не используется;
rpcnamelen - в настоящее время не используется;
linenum здесь можно указать номер строки исходного кода. По этому значению, в последствие будет легко установить в каком месте возникла ошибка. Если Вы не хотите использовать эту возможность, тогда установите linenum в 0;
message указатель на строку посылаемую клиенту;
msglen определяет длину в байтах строки сообщения. Если это строка заканчивается нулевым символом, то значение этого параметра можно установить равным SRV_NULLTERM.
Возвращаемыме значения:
- в случае успеха SUCCEED
- при неудаче FAIL.
В процессе работы расширенная хранимая процедура должна регулярно сообщать клиентскому приложению свой статус, т.е. посылать сообщения о выполненных действиях. Для этого и предназначена функция srv_senddone:
status - статус флаг. Значение этого параметра можно задавать использую логические операторы AND и OR для комбинирования констант приведённых в таблице:
Status flag Описание
SRV_DONE_FINAL Текущий набор результатов является окончательным;
SRV_DONE_MORE Текущий набор результатов не является окончательным следует ожидать очердную порцию данных;
SRV_DONE_COUNT Параметр count содержит верное значение
SRV_DONE_ERROR Используется для уведомления о возникновении ошибок и немедленном завершении.
into зарезервирован, необходимо установить в 0.
count количество результирующих наборов данных посылаемых клиенту. Если флаг status установлен в SRV_DONE_COUNT, то count должен содержать правильное количество посылаемый клиенту наборв записей.
Возвращаемыме значения:
- в случае успеха SUCCEED
- при неудаче FAIL.
Установка расширенных хранимых процедур на MS SQL Server 2000
1.Скопируйте dll библиотеку с расширенной хранимой процедурой в каталог binn на машине с установленным MS SQL Server. У меня этот путь следующий: C:Program FilesMicrosoft SQL ServerMSSQLBinn;
2.Зарегистрирйте расширенную хранимую процедуру на серверt выполнив следующий скрипт:
Заключение
На этом первая часть моей статьи закончена. Теперь я уверен Вы готовы справиться с нашим техническим заданием на все 100%. В следующей статье Вы узнаете:
- Типы данных определённые в ODS API;
- Особенности отладки расширенных хранимых процдур;
- Как формировать recordset-ы и передавать их клиентскому приложению;
- Чстично мы рассмотрим функции Active Directory Network Manegment API необходимые для получения списка доменных пользователей;
- Создадим готовый проект (реализуем наше техническое задание)
Надеюсь - до скорой встречи!
В состав версий Windows Server 2003 Service Pack 1 (SP1) и Windows XP SP2 входит размещаемый в системе брандмауэр Windows Firewall, гораздо более эффективный, чем его предшественник, Internet Connection Firewall (ICF). В отличие от ICF, который поставлялся с Windows 2003 и XP, Windows Firewall подходит для развертывания в масштабах предприятия благодаря возможности управлять политиками брандмауэра из единого центра, нескольким интерфейсам настройки и множеству новых функций безопасности. В этой статье я расскажу о том, как лучше подойти к планированию, настройке конфигурации и применению брандмауэра на предприятии.
Подготовительный этап
Важно помнить о выбираемом по умолчанию режиме Windows Firewall. В XP SP2 брандмауэр Windows Firewall активен по умолчанию, а в Windows 2003 SP1 его стандартное состояние — выключенное, если только SP1 не развертывается на системе с запущенным ICF. В этом случае режим брандмауэра не изменяется. Если пакет SP1 размещен на установочном компакт-диске с операционной системой, то Windows Firewall всегда активизируется в режиме включения по умолчанию, когда в процессе установки происходит соединение со службой Windows Update для получения последних обновлений. Поэтому, если развернуть XP SP2, не уделяя должного внимания настройке Windows Firewall, и опрометчиво принять стандартные параметры, можно лишиться доступа к инструментарию для дистанционного управления настольными компьютером. Если администратор не готов использовать Windows Firewall или работает с брандмауэром независимого поставщика, то можно спокойно отключить Windows Firewall и развернуть SP2 без него.
Если для аутентификации пользователей применяется Active Directory (AD), а настольные компьютеры являются членами домена с соответствующими учетными записями, то самый простой способ настроить Windows Firewall — задействовать объекты групповой политики Group Policy Object (GPO). После установки XP SP2 на настольных компьютерах параметры брандмауэра настраиваются при перезагрузке машин и каждый раз при обновлении политики. Если используется продукт управления каталогами независимого поставщика или на предприятии имеются не управляемые администратором компьютеры, которые не входят в состав домена AD, то для настройки Windows Firewall вместо объектов GPO можно использовать пакетные файлы или сценарии. Настроить конфигурацию брандмауэра можно и в ходе автоматизированных или интерактивных процедур установки XP SP2.
Настройка Windows Firewall
Приступая к настройке конфигурации Windows Firewall, следует помнить об основных характеристиках брандмауэра:
* Windows Firewall не выполняет фильтрации исходящего трафика, то есть не ограничивает его. Если предприятие нуждается в фильтрации исходящего трафика, следует использовать брандмауэр независимого поставщика.
* Возможности Windows Firewall шире, чем у ICF: в Windows Firewall можно настраивать исключения, чтобы разрешить входящий трафик с учетом не только транспортного протокола (TCP или UDP) и номера порта, но и приложения (например, одноранговой программы обмена файлами).
* Можно уточнить исключения по области действия, то есть разрешить соединения от всех компьютеров, от компьютеров в указанных подсетях, только из локальной подсети или от компьютеров с определенными IP-адресами.
* Windows Firewall активизируется по умолчанию для всех сетевых соединений, но для каждого сетевого интерфейса можно настроить разные правила брандмауэра.
* Настраивать Windows Firewall может только администратор. Если управление брандмауэром централизованное (через AD или GPO), то можно лишить локальных администраторов права изменять параметры.
* С помощью Windows Firewall можно ограничить трафик IPv4 и IPv6.
* Windows Firewall располагает двумя профилями, Domain и Standard. Профиль Domain активизируется, если компьютер подключен к сети с контроллерами домена (DC), членом которого он является. Профиль Standard применяется, если компьютер подключен к другой сети, например общедоступной беспроводной сети или скоростному соединению в номере отеля. Рекомендуется настроить профили Domain и Standard для серверов и настольных компьютеров, а также для ноутбуков.
Прежде чем настраивать конфигурацию Windows Firewall, следует провести инвентаризацию приложений на рабочих станциях и серверах, которые могут организовать оконечные точки соединений; портов, используемых приложениями и операционной системой; источников трафика для каждой хост-машины с Windows Firewall. Для мобильных систем, таких как ноутбуки, в ходе инвентаризации следует учитывать различную природу сетевого трафика при подключении системы к корпоративной сети с контроллерами домена и активным профилем Domain брандмауэра Windows Firewall, в отличие от системы, подключенной к общедоступной сети с активным профилем Standard. Нужно всегда выбирать профиль Standard и разрешать только необходимый входящий трафик через брандмауэр, чтобы свести к минимуму угрозу для подключенных к сети мобильных машин.
В Windows Firewall определены четыре встроенные административные службы, представляющие типовые исключения для любой политики брандмауэра: File and Print, Remote Administration, Remote Desktop и Universal Plug and Play (UpnP). Remote Administration обеспечивает управление системой через типовые административные интерфейсы и подсистемы, такие как Windows Management Instrumentation (WMI) и вызов удаленных процедур (remote procedure call — RPC). Remote Desktop позволяет подключиться к одной системе с другой через RDP и используется при запросе на поддержку Remote Assistance. Администраторы часто применяют Remote Desktop для подключения к удаленным серверам, которыми они управляют. Протокол UpnP обеспечивает корректную работу устройств, которые обнаруживают и динамически настраивают друг друга с учетом активных приложений и служб. Типовой пример использования UpnP — взаимодействие XP с UPnP-совместимым широкополосным маршрутизатором при запуске MSN Messenger, в результате которого аудио и видеосоединения устанавливаются через встроенный брандмауэр маршрутизатора.
При настройке профилей Domain и Standard брандмауэра Windows Firewall рекомендуется задать исключения для конкретных приложений. Благодаря исключению приложение сможет установить любые нужные оконечные точки и принимать через них трафик. Существуют две веские причины, чтобы назначать исключения для приложений. Во-первых, проще определить и описать приложения, нежели отдельные используемые ими порты, особенно потому, что порты, используемые многими приложениями, документированы не полностью или назначаются динамически. Во-вторых, многие приложения, в том числе несанкционированные, используют те же порты, что и легальные приложения; указав приложения вместо портов, можно лишить неутвержденные приложения возможности установить оконечные точки соединения. Всегда, когда возможно, рекомендуется не делать исключений для профиля Standard и отклонять все входящие соединения.
Windows Firewall для серверов
Microsoft не дает специальных рекомендаций по настройке Windows Firewall для серверов. По умолчанию брандмауэр блокирован, если только пакет Windows Server 2003 SP1 не устанавливается на системе с активным ICF, однако брандмауэром можно воспользоваться для укрепления безопасности сервера Windows 2003. Применяя брандмауэр на сервере, следует помнить, что серверы по своей природе служат для размещения приложений и служб, с которыми устанавливают соединения приложения и службы на других серверах, настольных компьютерах и ноутбуках. Прежде чем активизировать Windows Firewall на сервере, следует продумать его конфигурацию.
Для некоторых серверов настроить Windows Firewall не составляет труда. Например, неуправляемому автономному Web-серверу в демилитаризованной зоне (DMZ) требуется принимать только входящие соединения через порт 80/TCP (HTTP) или 443/TCP (HTTP Secure-HTTPS), если установлен сертификат и активизирована защита SSL (Secure Sockets Layer).
На сервере с двумя или несколькими интерфейсами, из которых один интерфейс подключен к Internet, а другие — к корпоративным сетям, можно активизировать Windows Firewall, а затем отключить его на всех интерфейсах, кроме Internet, и настроить брандмауэр, разрешив только необходимые входящие соединения на интерфейсе Internet.
В простых файл- и принт-серверах корпоративной сети, входящих в состав домена, можно активизировать Windows Firewall и задействовать встроенную службу File and Printer Sharing для подключения пользователей к этим серверам. Можно также использовать Windows Firewall для защиты сервера, службы которого прослушивают известные порты, например сервера базы данных Microsoft SQL Server 2000. Для этого следует разрешить в брандмауэре трафик через соответствующие порты.
Настроить Windows Firewall на сервере можно с помощью мастера Security Configuration Wizard (SCW). SCW, факультативный компонент Windows 2003 SP1, уменьшает поверхность атаки сервера, задавая роль или роли для сервера. SCW содержит ролевую информацию для DC и других серверов инфраструктуры; он блокирует необязательные службы и ограничивает входящий трафик через Windows Firewall.
Windows Firewall не следует размещать на некоторых серверах, в том числе контроллерах домена AD и некоторых серверах приложений, которые прослушивают большой диапазон портов или используют динамические порты, таких как серверы Exchange Server 2003. В последнем случае можно развернуть Windows Firewall, если серверы и клиенты, подключенные к серверам Exchange, входят в состав домена. Брандмауэр настраивается на передачу аутентифицированного трафика IPsec в обход Windows Firewall (этот прием будет рассмотрен ниже), а клиенты настраиваются на использование IPsec.
На многих серверах, в том числе таких, на которых выполняется множество приложений и служб, необходима выборочная настройка Windows Firewall. Требуется указать порты, прослушиваемые приложениями и службами, отбросить необязательные порты и настроить Windows Firewall для необходимых портов. Определить открытые порты и прослушивающие их приложения и службы можно с помощью команды Netstat (netstat.exe), усовершенствованной в последних пакетах обновлений. Указав в командной строке
netstat -a -b
можно увидеть все открытые порты TCP (независимо от состояния) и порты UDP в системе, идентификатор процесса (PID) для каждого активного соединения (образец выходной информации приведен на экране 1). Как уже упоминалось, Windows Firewall можно настроить на разрешение входящего трафика для поименованных приложений, независимо от прослушиваемых ими портов. Единственный недостаток Netstat заключается в том, что команда выдает лишь «моментальный снимок» системы. С ее помощью нельзя идентифицировать приложения, службы и их порты, если эти приложения неактивны в момент запуска Netstat. Чтобы получить достоверную картину, можно сделать несколько снимков в разное время.
Более простая альтернатива Netstat — инструмент Port Reporter, который можно получить по адресу http://support.microsoft.com/?kbid=837243. Программа устанавливается как служба и регистрирует сетевую активность, в том числе подробные сведения об активных программах и службах, и даже учетную запись пользователя, с которой работает приложение или служба. С помощью сопутствующего инструмента Port Reporter Parser (http://www.support.microsoft.com/?kbid=884289) можно извлечь данные из журналов, генерируемых Port Reporter. Правильно настроив и запуская Port Reporter в течение определенного промежутка времени, можно идентифицировать приложения, которые открывают порты сервера и должны быть настроены в Windows Firewall по приложениям или отдельным портам. Длительность применения Port Reporter зависит от приложений и особенностей работы пользователей. Предостережение: Port Reporter может слегка снизить производительность системы, а журналы очень велики. Файлы журналов следует записывать на быстрый диск с достаточным количеством свободного места.
Рекомендуется активизировать функции протоколирования Windows Firewall после завершения настройки серверов. Можно записывать сведения об успешных и неудачных соединениях. Если после настройки и активизации Windows Firewall возникают проблемы при выполнении некоторых приложений, то с помощью информации из журналов можно определить дополнительные порты, которые следует открыть. Для настройки функций протоколирования следует открыть панель управления, запустить утилиту Windows Firewall, щелкнуть на вкладке Advanced, а затем на кнопке Settings в разделе Security Logging. Откроется диалоговое окно Log Settings (экран 2). Журнал Windows Firewall следует сохранять на быстром диске, а максимальный размер журнала должен быть достаточным для записи необходимой информации в течение длительного времени. Проверив корректность настройки Windows Firewall, можно отключить протоколирование.
Экран 2. Настройка протоколирования в Windows Firewall
Windows Firewall можно настроить и таким образом, чтобы передавать аутентифицированный трафик IPsec от доверенных машин в обход брандмауэра. В этот режим можно перевести серверы и рабочие станции, чтобы они пропускали только необходимый клиентский трафик, одновременно обеспечивая неограниченный доступ для администрирования рабочих станций и серверов.
Полная готовность
После завершения подготовки к развертыванию Windows Firewall рекомендуется активизировать брандмауэр сначала для пилотной группы пользователей. Если в процессе пробного развертывания возникнут трудности, следует активизировать режим протоколирования; в журналах содержится информация, которая поможет определить причину проблем. После устранения неполадок и успешного развертывания Windows Firewall брандмауэр станет неоценимым компонентом системы безопасности предприятия.
Очевидно, что администрирование работы сетевых служб подразумевает выполнение некоторых дополнительных процедур, направленных на обеспечение корректной работы всей системы. Вовсе не обязательно, чтобы эти функции выполнял один человек. Во многих организациях работа распределяется между несколькими администраторами. В любом случае необходим хотя бы один человек, который понимал бы все поставленные задачи и обеспечивал их выполнение другими людьми.
1. Введение
Идея создания сетей для передачи данных на большие и не очень большие расcтояния витала в воздухе с той самой поры, как человек впервые задумался над созданием телекоммуникационных устройств. В разное время и в различных ситуациях в качестве «устройств передачи информации» использовались почтовые голуби, бутылки с сообщениями «SOS» и наконец, люди — гонцы и нарочные.
Конечно, с тех пор прошло немало лет. В наши дни для того, чтобы передать от одного человека к другому приглашение на субботний футбольный матч, множество компьютеров обмениваются электронными сообщениями, используя для передачи информации массу проводов, оптических кабелей, микроволновых передатчиков и прочего.
Компьютерные сети сегодня представляют собой форму сотрудничества людей и компьютеров, обеспечивающего ускорение доставки и обработки информации.
Сеть обеспечивает обмен информацией и ее совместное использование (разделение). Компьютерные сети делятся на локальные (ЛВС, Local Area Network, LAN), представляющие собой группу близко расположенных, связанных между собой компьютеров, и распределенные (глобальные, Wide Area Networks, WAN)
Соединенные в сеть компьютеры обмениваются информацией и совместно используют периферийное оборудование и устройства хранения информации.
Очевидно, что администрирование работы сетевых служб подразумевает выполнение некоторых дополнительных процедур, направленных на обеспечение корректной работы всей системы. Вовсе не обязательно, чтобы эти функции выполнял один человек. Во многих организациях работа распределяется между несколькими администраторами. В любом случае необходим хотя бы один человек, который понимал бы все поставленные задачи и обеспечивал их выполнение другими людьми.
Основные задачи системного администратора
2.1. Подключение и удаление аппаратных средств
Любая компьютерная сеть состоит из трех основных компонентов:
1. Активное оборудование (концентраторы, коммутаторы, сетевые адаптеры и др.).
2. Коммуникационные каналы (кабели, разъемы).
3. Сетевая операционная система.
Естественно, все эти компоненты должны работать согласованно. Для корректной работы устройств в сети требуется их правильно инсталлировать и установить рабочие параметры.
В случае приобретения новых аппаратных средств или подключения уже имеющихся аппаратных средств к другой машине систему нужно сконфигурировать таким образом, чтобы она распознала и использовала эти средства. Изменение конфигурации может быть как простой задачей (например, подключение принтера), так и более сложной (подключение нового диска).
Для того чтобы принять правильное решение о модернизации системы, как системному администратору необходимо проанализировать производительность системы. Конечными узлами сети являются компьютеры, и от их производительности и надежности во многом зависят характеристики всей сети в целом. Именно компьютеры являются теми устройствами в сети, которые реализуют протоколы всех уровней, начиная от физического и канального (сетевой адаптер и драйвер) и заканчивая прикладным уровнем (приложения и сетевые службы операционной системы). Следовательно, оптимизация компьютера включает две достаточно независимые задачи:
* Во-первых, выбор таких параметров конфигурации программного и аппаратного обеспечения, которые обеспечивали бы оптимальные показатели производительности и надежности этого компьютера как отдельного элемента сети. Такими параметрами являются, например, тип используемого сетевого адаптера, размер файлового кэша, влияющий на скорость доступа к данным на сервере, производительность дисков и дискового контроллера, быстродействие центрального процессора и т.п.
* Во-вторых, выбор таких параметров протоколов, установленных в данном компьютере, которые гарантировали бы эффективную и надежную работу коммуникационных средств сети. Поскольку компьютеры порождают большую часть кадров и пакетов, циркулирующих в сети, то многие важные параметры протоколов формируются программным обеспечением компьютеров, например начальное значение поля TTL (Time-to-Live) протокола IP, размер окна неподтвержденных пакетов, размеры используемых кадров.
Тем не менее выполнение вычислительной задачи может потребовать участия в работе нескольких устройств. Каждое устройство использует определенные ресурсы для выполнения своей части работы. Плохая производительность обычно является следствием того, что одно из устройств требует намного больше ресурсов, чем остальные. Чтобы исправить положение, вы должны выявить устройство, которое расходует максимальную часть времени при выполнении задачи. Такое устройство называется узким местом (bottleneck). Например, если на выполнение задачи требуется 3 секунды и 1 секунда тратится на выполнение программы процессором, а 2 секунды — на чтение данных с диска, то диск является узким местом.
Определение узкого места — критический этап в процессе улучшения производительности. Замена процессора в предыдущем примере на другой, в два раза более быстродействующий процессор, уменьшит общее время выполнения задачи только до 2,5 секунд, но принципиально исправить ситуацию не сможет, поскольку узкое место устранено не будет. Если же мы приобретем диск и контроллер диска, которые будут в два раза быстрее прежних, то общее время уменьшится до 2 секунд.
Если вы всерьез недовольны быстродействием системы, исправить положение можно следующими способами:
* обеспечив систему достаточным ресурсом памяти. Объем памяти — один из основных факторов, влияющих на производительность;
* устранив некоторые проблемы, созданные как пользователями (одновременный запуск слишком большого количества заданий, неэффективные методы программирования, выполнение заданий с избыточным приоритетом, а также объемных заданий в часы пик), так и самой системой (квоты, учет времени центрального процессора);
* организовав жесткие диски и файловые системы так, чтобы сбалансировать нагрузку на них и таким образом максимально повысить пропускную способность средств ввода-вывода;
* осуществляя текущий контроль сети, чтобы избежать ее перегрузки и добиться низкого коэффициента ошибок. Сети UNIX/Linux можно контролировать с помощью программы netstat. Если речь идет об сетевых операционных системах семейства Windows, то вам поможет утилита PerformanceMonitor.
* откорректировав методику компоновки файловых систем в расчете на отдельные диски;
* выявив ситуации, когда система совершенно не соответствует предъявляемым к ней требованиям.
Эти меры перечислены в порядке убывания эффективности.
2.2. Резервное копирование
Процедура резервного копирования довольно утомительна и отнимает много времени, но выполнять ее необходимо. Ее можно автоматизировать, но системный администратор обязан убедиться в том, что резервное копирование выполнено правильно и в соответствии с графиком. Практически любая сетевая операционная система содержит механизмы для создания резервных копий или зеркального ведения дисков. Например, в UNIX-системах самое распространенное средство создания резервных копий и восстановления данных — команды dump и restore. В большинстве случаев информация, хранящаяся в компьютерах, стоит дороже самих компьютеров. Кроме того, ее гораздо труднее восстановить.
Существуют сотни весьма изобретательных способов потерять информацию. Ошибки в программном обеспечении зачастую портят файлы данных. Пользователи случайно удаляют то, над чем работали всю жизнь. Хакеры и раздраженные служащие стирают данные целыми дисками. Проблемы c аппаратными средствами и стихийные бедствия выводят их строя целые машинные залы. Поэтому ни одну систему нельзя эксплуатировать без резервных копий.
При правильном подходе создание резервных копий данных позволяет администратору восстанавливать файловую систему (или любую ее часть) в том состоянии, в котором она находилась на момент последнего снятия резервных копий. Резервное копирование должно производиться тщательно и строго по графику.
[pagebreak]
Поскольку многие виды неисправностей способны одновременно выводить из строя сразу несколько аппаратных средств, резервные копии следует записывать на съемные носители, CD-диски, ZIP-дискеты и т.д. Например, копирование содержимого одного диска на другой, конечно, лучше, чем ничего, но оно обеспечивает весьма незначительный уровень защиты от отказа контроллера.
2.3. Инсталляция новых программных средств
После приобретения нового программного обеспечения его нужно инсталлировать и протестировать. Если программы работают нормально, необходимо сообщить пользователям об их наличии и местонахождении.
Как правило, самой ответственной и самой сложной задачей системного администратора являются инсталляция и конфигурирование операционной системы. От правильности ваших действий зависит, будете ли вы играть в Quake и просматривать любимые сайты или вам придется бегать между пользователями системы и заниматься рутинной работой.
Во многих современных операционных системах разработчики идут по пути исключения многих непродуктивных параметров системы, с помощью которых администраторы способны влиять на производительность ОС. Вместо этого в операционную систему встраиваются адаптивные алгоритмы, которые определяют рациональные параметры системы во время ее работы. С помощью этих алгоритмов ОС может динамически оптимизировать свои параметры в отношении многих известных сетевых проблем, автоматически перераспределяя свои ресурсы и не привлекая к решению администратора.
Существуют различные критерии оптимизации производительности операционной системы. К числу наиболее распространенных критериев относятся:
* Наибольшая скорость выполнения определенного процесса.
* Максимальное число задач, выполняемых процессором за единицу времени. Эта характеристика также называется пропускной способностью компьютера. Она определяет качество разделения ресурсов между несколькими одновременно выполняемыми процессами.
* Освобождение максимального количества оперативной памяти для самых приоритетных процессов, например процесса, выполняющего функции файлового сервера, или же для увеличения размера файлового кэша.
* Освобождение наибольшего количества дисковой памяти.
Обычно при оптимизации производительности ОС администратор начинает этот процесс при заданном наборе ресурсов. В общем случае одновременно улучшить все критерии производительности невозможно. Например, если целью является увеличение доступной оперативной памяти, то администратор может увеличить размер страничного файла, но это приведет к уменьшению доступного дискового пространства.
После инсталляции и оптимальной настройки операционной системы начинается практически бесконечный процесс установки программного обеспечения. И здесь на первый план выходят проблемы совместимости различных программ, а если вы устанавливаете серверное программное обеспечение, — то еще и о безопасности.
Если вы начинающий системный администратор — устанавливайте на свой сервер более простые программы — в них меньше ошибок. В UNIX — избавьтесь от sendmail, поставьте другой SMTP-демон, внимательно анализируйте исходный код всех устанавливаемых на сервер программ, особенно если имя производителя вам ничего не говорит. В Windows NT не стоит использовать монстры типа Microsoft Exchange Server, и желательно избегать установки на сервер всевозможных freeware-программок.
2.4. Мониторинг системы
Существует великое множество обязательных для исполнения ежедневных операций. Например, проверка правильности функционирования электронной почты и телеконференций, просмотр регистрационных файлов на предмет наличия ранних признаков неисправностей, контроль за подключением локальных сетей и за наличием системных ресурсов.
Все многообразие средств, применяемых для мониторинга и анализа вычислительных сетей, можно разделить на несколько крупных классов:
Системы управления сетью (NetworkManagementSystems) — централизованные программные системы, которые собирают данные о состоянии узлов и коммуникационных устройств сети, а также данные о трафике, циркулирующем в сети. Эти системы не только осуществляют мониторинг и анализ сети, но и выполняют в автоматическом или полуавтоматическом режиме действия по управлению сетью — включение и отключение портов устройств, изменение параметров мостов адресных таблиц мостов, коммутаторов и маршрутизаторов и т.п. Примерами систем управления могут служить популярные системы HPOpenView, SunNetManager, IBMNetView.
Средства управления системой (SystemManagement). Средства управления системой часто выполняют функции, аналогичные функциям систем управления, но по отношению к другим объектам. В первом случае объектами управления являются программное и аппаратное обеспечение компьютеров сети, а во втором — коммуникационное оборудование. Вместе с тем некоторые функции этих двух видов систем управления могут дублироваться, например средства управления системой могут выполнять простейший анализ сетевого трафика.
Встроенные системы диагностики и управления (Embeddedsystems). Эти системы выполняются в виде программно-аппаратных модулей, устанавливаемых в коммуникационное оборудование, а также в виде программных модулей, встроенных в операционные системы. Они выполняют функции диагностики и управления единственным устройством, и в этом их основное отличие от централизованных систем управления. Примером средств этого класса может служить модуль управления концентратором Distrebuted 5000, реализующий функции автосегментации портов при обнаружении неисправностей, приписывания портов внутренним сегментам концентратора, и ряд других. Как правило, встроенные модули управления «по совместительству» выполняют роль SNMP-агентов, поставляющих данные о состоянии устройства для систем управления.
Анализаторы протоколов (Protocolanalyzers). Представляют собой программные или аппаратно-программные системы, которые ограничиваются, в отличие от систем управления, лишь функциями мониторинга и анализа трафика в сетях. Хороший анализатор протоколов может захватывать и декодировать пакеты большого количества протоколов, применяемых в сетях, — обычно несколько десятков. Анализаторы протоколов позволяют установить некоторые логические условия для захвата отдельных пакетов и выполняют полное декодирование захваченных пакетов, то есть показывают в удобной для специалиста форме вложенность друг в друга пакетов протоколов разных уровней с расшифровкой содержания отдельных полей каждого пакета.
Оборудование для диагностики и сертификации кабельных систем. Условно это оборудование можно поделить на четыре основные группы: сетевые мониторы, приборы для сертификации кабельных систем, кабельные сканеры и тестеры (мультиметры).
Экспертные системы. Этот вид систем аккумулирует человеческие знания о выявлении причин аномальной работы сетей и возможных способах приведения сети в работоспособное состояние. Экспертные системы часто реализуются в виде отдельных подсистем различных средств мониторинга и анализа сетей: систем управления сетями, анализаторов протоколов, сетевых анализаторов. Простейшим вариантом экспертной системы является контекстно-зависимая help-система. Более сложные экспертные системы представляют собой так называемые базы знаний, обладающие элементами искусственного интеллекта. Примером такой системы является экспертная система, встроенная в систему управления Spectrum компании Cabletron.
Многофункциональные устройства анализа и диагностики. В последние годы в связи с повсеместным распространением локальных сетей возникла необходимость разработки недорогих портативных приборов, совмещающих функции нескольких устройств: анализаторов протоколов, кабельных сканеров и даже ряд возможностей ПО сетевого управления.
Однако в отдельной сети Ethernet формальные процедуры управления сетью внедрять, как правило, не стоит. Достаточно провести тщательное тестирование сети после инсталляции и время от времени проверять уровень нагрузки. Сломается — почините.
Если у вас задействованы глобальная сеть или сложные ЛВС, рассмотрите вопрос приобретения выделенных станций управления сетью со специальным программным обеспечением.
2.5. Поиск неисправностей
Операционные системы и аппаратные средства, на которых они работают, время от времени выходят из строя. Задача администратора — диагностировать сбои в системе и в случае необходимости вызвать специалистов. Как правило, найти неисправность бывает намного сложнее, чем устранить ее.
Если вы обнаружили, что какой-то из узлов сети работает некорректно или вовсе отказывается работать, вам стоит обратить внимание на светодиодные индикаторы при включенном концентраторе и компьютерах, соединенных кабелями. Если они не горят, то очень вероятно, что причина заключается в следующем:
* Адаптеры некорректно сконфигурированы. Чаще всего при инсталляции сети проблем не возникает до тех пор, пока не будут подключены кабели, а иногда и до попытки получить доступ к сетевым ресурсам. Обычно источником проблемы является конфликт IRQ (два устройства используют одно прерывание). Такие ситуации не всегда легко обнаружить программными средствами, поэтому внимательно проверьте установки прерываний для всех устройств компьютера (звуковые платы, параллельные и последовательные порты, приводы CD-ROM, другие сетевые адаптеры и т.п). Иногда в определении доступного прерывания может помочь программа конфигурирования и/или диагностики адаптера. В некоторых случаях проблемы возникают при использовании на современных компьютерах с шиной PCI для сетевого адаптера IRQ 15, даже если это прерывание не используется.
* Адаптер не отвечает на запросы. Если после включения компьютера программа диагностики не может обнаружить адаптер или детектирует сбой при внутреннем тесте, попробуйте заменить адаптер или обратитесь к его производителям.
* Если проверка адаптеров и кабелей доказала их работоспособность, причиной возникновения проблем могут быть некорректные параметры драйвера сетевого адаптера. Проверьте корректность параметров и сам драйвер (он должен быть предназначен для используемого вами адаптера). Дополнительную информацию можно найти в описании адаптера.
* Концентраторы редко являются источником проблем, однако одной из наиболее распространенных проблем такого рода является отсутствие питания. Иногда неисправный сетевой адаптер может нарушить работу порта в концентраторе. Для проверки адаптера пользуйтесь диагностическими программами из комплекта адаптера.
[pagebreak]
2.6. Ведение локальной документации
Настраивая конфигурацию под конкретные требования, вы вскоре обнаружите, что она значительно отличается от той, что описана в документации (базовой конфигурации). Скорее всего, вы не вечно будете занимать место системного администратора и рано или поздно на ваше место придет другой человек. Известно, что бывших супругов и бывших системных администраторов редко вспоминают добрым словом. Но, чтобы уменьшить количество «камней в ваш огород» и, что важнее, оградить себя от звонков и вопросов с места бывшей работы, системный администратор должен документировать все инсталлируемые программные средства, не входящие в стандартный пакет поставки, документировать разводку кабелей, вести записи по обслуживанию всех аппаратных средств, регистрировать состояние резервных копий и документировать правила работы с системой.
Также следует учитывать, что система учета, ядро, различные утилиты — все эти программы выдают данные, которые регистрируются и в конце концов попадают на ваши диски. Эти данные тоже являются локальной документацией, характеризующей работу конкретной системы. Однако срок полезной службы большинства данных ограничен, поэтому их нужно обобщать, упаковывать и наконец, выбрасывать.
Процедура ведения файлов регистрации в любой операционной системе представляет собой набор процедур, которые повторяются через определенное время в одном и том же порядке. Следовательно, ее необходимо автоматизировать.
В UNIX-системах для этой цели используется процесс cron. А программа syslog может удачно применяется в качестве полной системы регистрации. Она отличается высокой гибкостью и позволяет сортировать сообщения системы по источникам и степени важности, а затем направлять их в разные пункты назначения: в файлы регистрации, на терминалы пользователей и даже на другие машины. Одной из самых ценных особенностей этой системы является ее способность централизовать регистрацию для сети.
Администраторы Windows NT могут для тех же целей использовать утилиту PerformanceMonitor, разработанную для фиксации активности компьютера в реальном масштабе времени. С ее помощью можно определить большую часть узких мест, снижающих производительность. Эта утилита включена в Windows NT Server и Windows NT Workstation.
PerformanceMonitor основан на ряде счетчиков, которые фиксируют такие характеристики, как число процессов, ожидающих завершения операции с диском, число сетевых пакетов, передаваемых в единицу времени, процент использования процессора и другие. PerformanceMonitor генерирует полезную информацию посредством следующих действий:
* наблюдения за производительностью в реальном времени и в исторической перспективе;
* определения тенденций во времени;
* определения узких мест;
* отслеживания последствий изменения конфигурации системы;
* наблюдения за локальным или удаленными компьютерами;
* предупреждения администратора о событиях, связанных с превышением некоторыми характеристиками заданных порогов.
2.7 Контроль защиты
Основной особенностью любой сетевой системы является то, что ее компоненты распределены в пространстве, а связь между ними осуществляется физически — при помощи сетевых соединений (коаксиальный кабель, витая пара, оптоволокно и т.д.) и программно — при помощи механизма сообщений. К сетевым системам наряду с обычными (локальными) атаками, осуществляемыми в пределах одной операционной системы, применим специфический вид атак, обусловленный распределенностью ресурсов и информации в пространстве, — так называемые сетевые (или удаленные) атаки. Они характеризуются тем, что, во-первых, злоумышленник может находиться за тысячи километров от атакуемого объекта, а во-вторых, нападению может подвергнуться не конкретный компьютер, а информация, передающаяся по сетевым соединениям.
Системный администратор должен реализовывать стратегию защиты и периодически проверять, не нарушена ли защита системы.
Естественно, абсолютная защита сети невозможна, однако задача каждого администратора — сделать все возможное для максимального ее улучшения. При построении системы защиты разумно придерживаться следующих принципов:
* Актуальность. Защищаться следует от реальных атак, а не от фантастических или же архаичных.
* Разумность затрат. Поскольку 100% защиты вы все равно не обеспечите, необходимо найти тот рубеж, за которым дальнейшие траты на повышение безопасности превысят стоимость той информации, которую может украсть злоумышленник.
Конечно же, действия, которые вы должны предпринять для защиты своего сервера очень зависят от того, какую операционную систему вы используете. Однако есть ряд простых правил, которые пригодятся любому системному администратору.
* Внимательно прочитайте руководство по администрированию системы, вы наверняка найдете там полезные советы, которыми захотите воспользоваться.
* Запустите программу автоматизированного контроля вашего хоста — типа Internet Scanner. Система Internet Scanner может быть запущена на одной из платформ (Windows NT, Windows 2000, HP/UX, AIX, Linux, Sun OS, Solaris). Используется она для анализа защищенности систем.
* Загляните на серверы CERT (http://www.cert.org/) или CIAC (http://ciac.llnl.gov/) и внимательно прочитайте относящиеся к вашей ОС бюллетени за последнее время. Установите все рекомендуемые заплатки и сконфигурируйте систему, как полагается.
* Правильно настройте (или установите) межсетевой экран. Поставьте монитор всех входящих соединений (например, tcp_wrapper).
* Запустите последний взломщик паролей. Здесь у вас большое преимущество перед хакерами — у вас уже есть файл с хэшированными паролями.
* Проверьте настройки основных Интернет-служб (http, ftp). Максимально используйте анонимный доступ, чтобы предотвратить передачу паролей по сети в открытом виде. При необходимости разграничения доступа используйте стойкие протоколы типа SSL.
* У всех остальных сетевых служб также по возможности используйте аутентификацию, не включающую передачу пароля открытым текстом.
* Выбросьте некоторые малоиспользуемые службы. Особенно это касается администраторов UNIX-серверов: давно не используемый, но существующий на вашем сервере сервис типа finger, talk, rpc может стать той самой «дырой» в системе безопасности, через которую сможет проникнуть (или уже проник) хакер.
* Поставьте proxy-сервер для дополнительной аутентификации извне, а также для скрытия адресов и топологии внутренней подсети.
* Поставьте защищенную версию UNIX или другой операционной системы.
2.8. Подключение и удаление пользователей. Оказание им помощи
Создание бюджетов для новых пользователей и удаление бюджетов тех пользователей, которые уже не работают, — обязанность системного администратора. Процесс включения и удаления пользователей можно автоматизировать, но некоторые решения, от которых зависит включение нового пользователя, должен принимать администратор.
Очень часто сотрудники предприятия оказываются самым слабым звеном в системе его безопасности, поэтому системному администратору следует уделять больше внимания работе с пользователями системы. Иначе простой листочек бумаги с паролем, лежащий на рабочем месте забывчивой сотрудницы, сделает бесполезной выверенную настройку вашего межсетевого экрана.
Для усиления безопасности компьютерных систем компании разумными могут считаться следующие шаги:
* Привлечение внимания людей к вопросам безопасности.
* Осознание сотрудниками всей серьезности проблемы и принятие в организации политики безопасности.
* Изучение и внедрение необходимых методов и действий для повышения защиты информационного обеспечения.
Если вы работаете в крупной (более 100 человек) организации, то для определения уровня ее защищенности можно провести тест на проникновение. Этот метод позволяет выявить недостатки безопасности с точки зрения постороннего человека. Он позволяет протестировать схему действий, которая раскрывает и предотвращает внутренние и внешние попытки проникновения и сообщает о них.
Тест должен разрешить два основных вопроса:
* Все ли пункты политики безопасности достигают своих целей и используются так, как было задумано.
* Существует ли что-либо, не отраженное в политике безопасности, что может быть использовано для достижения злоумышленником своих целей.
Все попытки должны контролироваться обеими сторонами — как взломщиком, так и «клиентом». Это поможет протестировать систему гораздо более эффективно. Необходимо также свести к минимуму количество людей, знающих о проведении эксперимента.
Требуется создать и разработать различные варианты политики безопасности, определить правила корректного использования телефонов компьютеров и другой техники. Необходимо учитывать и неосведомленность в области безопасности, поскольку любые средства технического контроля могут быть использованы ненадлежащим образом. В итоге тестирование системы безопасности должно обеспечить вам защиту от проникновения.
3. Почему давят на системного администратора
Сети имеют тенденцию разрастаться, следовательно, вы будете вынуждены тратить все больше и больше времени на выполнение функций администратора. Вскоре окажется, что вы — единственный человек в своей организации, который знает, как решить целый ряд важнейших проблем.
Поскольку круг обязанностей системного администратора четко ограничить нельзя, от вас, скорее всего, потребуют, чтобы вы были не только штатным администратором, но и штатным инженером, писателем, а также секретарем.
Вместо этого мы предлагаем вам следующее: ведите работу на должном уровне, параллельно регистрируя время, затрачиваемое на системное администрирование. Собирайте доказательства, которые могут вам пригодиться, когда вы попросите руководство взять в штат еще одного администратора или освободить вас от «лишних» обязанностей.
С другой стороны, вы можете обнаружить, что системное администрирование вам нравится. В этом случае проблем с поиском работы у вас не будет.
21 – ФТП пртокол, может использоваться если открыт анонимный доступ или стоит кривая версия софта (WU 2.6.0 (1) War FTPd и тд)
23 – Телнет протокол. Используеться для входа в систему с удалённого компьютера. Так же может показать версию ОС.
25 – Протокол для отправки почты, может использоваться в основном когда стоит кривая версия sendmail (самое распространённое) так же имеют место команды EXPN и VRFY которые могут дать взломщику некторую дополнительную информацию.
53 – Показывает установлен ли DNS. Может использоваться для так называемого DNS Spoofing. Т.е. подменой объекта ДНС.
79 – Это Finger. При должном везении и ошибках в программном обеспечении можно получить список всех пользователей залогиненых в систему.
80 – WWW Сервер. показывает присутствует ли WWW сервер на машине. Использовать можно для проверки на ЦГИ скрипты, так же показывает версию и название программного обеспечения установленного на машине.
110 – POP протокол для просмотра почтовых сообщений. Может использоваться при кривой версии ПО как например всем известный QPOP.
111 – Sun RPC. Может использоваться при наличии ответа на команду rpcinfo -d |grep bind - ypbind tcp и тд.
119 – NNTP. Проткол для чтения и отправки новостей в новостные группы, используеться так же при наличии ошибок в ПО
139 – NETBIOS. Пртокол для работы с локальной сетью. Может использовать для сканирования на расшаренные ресурсы и получение информации о сети.
443 – HTTPS, SSL. Тоже самое что и HTTP но использует безопасный протокол.
513 – rlogin. Если у хоста есть запись в файле .rlogin то вы коннектитесь на удалённый хост без использования логина и пароля.
Описание всех портов
1=TCP-MUX - TCP Port Service Multiplexer
2=COMPRESSNET - Management Utility
3=COMPRESSNET - Compression Process
5=RJE - Remote Job Entry
7=ECHO - Echo
9=DISCARD - Discard
11=SYSSTAT - System Status
13=DAYTIME - Daytime
15=NETSTAT - Network Status
17=QOTD - Quote of the Day
18=MSP - Message Send Protocol
19=CHARGEN - Character Generator
20=FTP-DATA - File Transfer Protocol [Default Data]
21=FTP - File Transfer Protocol [Control]
22=SSH - SSH (Secure Shell) Remote Login Protocol
23=TELNET - Telnet
24=PMS - Private Mail System
25=SMTP - Simple Mail Transfer Protocol
27=NSW-FE - NSW User System FE
29=MSG-ICP - Messege ICP
31=MSG-AUTH - Messege Authentication
33=DSP - Display Support Protocol
35=PPS - Private Printer Server
37=TIME - Time
38=RAP - Route Access Protocol
39=RLP - Resource Location Protocol
41=GRAPHICS - Graphics
42=NAMESERVER - Host Name Server
43=WHOIS - Who Is
44=MPM-FLAGS - MPM FLAGS Protocol
45=MPM - Message Processing Module [recv]
46=MPM-SND - MPM [default send]
47=NI-FTP - NI FTP (File Transfer Protocol)
48=AUDITD - Digital Audit Daemon
49=BBN-LOGIN - Login Host Protocol (TACACS)
50=RE-MAIL-CK - Remote Mail Checking Protocol
51=LA-MAINT - IMP Logical Address Maintenance
52=XNS-TIME - XNS Time Protocol
53=DOMAIN - Domain Name Server
54=XNS-CH - XNS Clearinghouse
55=ISI-GL - ISI Graphics Language
56=XNS-AUTH - XNS Authentication
57=MTP - Private terminal access
58=XNS-MAIL - XNS Mail
59=PFS - Private File System
60=Unassigned
61=NI-MAIL - NI MAIL
62=ACAS - ACA Services
63=WHOIS++ - whois++
64=COVIA - Communications Integrator (CI)
65=TACACS-DS - TACACS-Database Service
66=SQL*NET - Oracle SQL*NET
67=BOOTPS - Bootstrap Protocol Server
68=BOOTPC - Bootstrap Protocol Client
69=TFTP - Trivial File Transfer Protocol
70=GOPHER - Gopher
71=NETRJS-1 - Remote Job Service
72=NETRJS-2 - Remote Job Service
73=NETRJS-3 - Remote Job Service
74=NETRJS-4 - Remote Job Service
75=PDOS - Private dial out service
76=DEOS - Distributed External Object Store
77=RJE - Private RJE (Remote Job Entry) service
78=VETTCP - vettcp
79=FINGER - Finger
80=WWW-HTTP - World Wide Web HTTP (Hyper Text Transfer Protocol)
81=HOSTS2-NS - HOSTS2 Name Server
82=XFER - XFER Utility
83=MIT-ML-DEV - MIT ML Device
84=CTF - Common Trace Facility
85=MIT-ML-DEV - MIT ML Device
86=MFCOBOL - Micro Focus Cobol
87=LINK - Private terminal link
88=KERBEROS - Kerberos
89=SU-MIT-TG - SU/MIT Telnet Gateway
90=DNSIX - DNSIX Securit Attribute Token Map
91=MIT-DOV - MIT Dover Spooler
92=NPP - Network Printing Protocol
93=DCP - Device Control Protocol
94=OBJCALL - Tivoli Object Dispatcher
95=SUPDUP - SUPDUP
96=DIXIE - DIXIE Protocol Specification
97=SWIFT-RVF - Swift Remote Virtural File Protocol
98=TACNEWS - TAC News
99=METAGRAM - Metagram Relay
100=NEWACCT - [unauthorized use]
101=HOSTNAMES - NIC Host Name Server
102=ISO-TSAP - ISO-TSAP Class 0
103=X400 - x400
104=X400-SND - x400-snd
105=CSNET-NS - Mailbox Name Nameserver
106=3COM-TSMUX - 3COM-TSMUX
107=RTELNET - Remote Telnet Service
108=SNAGAS - SNA Gateway Access Server
109=POP - Post Office Protocol - Version 2
110=POP3 - Post Office Protocol - Version 3
111=SUNRPC - SUN Remote Procedure Call
112=MCIDAS - McIDAS Data Transmission Protocol
113=IDENT - Authentication Service
114=AUDIONEWS - Audio News Multicast
115=SFTP - Simple File Transfer Protocol
116=ANSANOTIFY - ANSA REX Notify
117=UUCP-PATH - UUCP Path Service
118=SQLSERV - SQL Services
119=NNTP - Network News Transfer Protocol
120=CFDPTKT - CFDPTKT
121=ERPC - Encore Expedited Remote Pro.Call
122=SMAKYNET - SMAKYNET
123=NTP - Network Time Protocol
124=ANSATRADER - ANSA REX Trader
125=LOCUS-MAP - Locus PC-Interface Net Map Ser
126=UNITARY - Unisys Unitary Login
127=LOCUS-CON - Locus PC-Interface Conn Server
128=GSS-XLICEN - GSS X License Verification
129=PWDGEN - Password Generator Protocol
130=CISCO-FNA - cisco FNATIVE
131=CISCO-TNA - cisco TNATIVE
132=CISCO-SYS - cisco SYSMAINT
133=STATSRV - Statistics Service
134=INGRES-NET - INGRES-NET Service
135=RPC-LOCATOR - RPC (Remote Procedure Call) Location Service
136=PROFILE - PROFILE Naming System
137=NETBIOS-NS - NETBIOS Name Service
138=NETBIOS-DGM - NETBIOS Datagram Service
139=NETBIOS-SSN - NETBIOS Session Service
140=EMFIS-DATA - EMFIS Data Service
141=EMFIS-CNTL - EMFIS Control Service
142=BL-IDM - Britton-Lee IDM
143=IMAP - Interim Mail Access Protocol v2
144=NEWS - NewS
145=UAAC - UAAC Protocol
146=ISO-TP0 - ISO-IP0
147=ISO-IP - ISO-IP
148=CRONUS - CRONUS-SUPPORT
149=AED-512 - AED 512 Emulation Service
150=SQL-NET - SQL-NET
151=HEMS - HEMS
152=BFTP - Background File Transfer Program
153=SGMP - SGMP
154=NETSC-PROD - NETSC
155=NETSC-DEV - NETSC
156=SQLSRV - SQL Service
157=KNET-CMP - KNET/VM Command/Message Protocol
158=PCMAIL-SRV - PCMail Server
159=NSS-ROUTING - NSS-Routing
160=SGMP-TRAPS - SGMP-TRAPS
161=SNMP - SNMP (Simple Network Management Protocol)
162=SNMPTRAP - SNMPTRAP (Simple Network Management Protocol)
163=CMIP-MAN - CMIP/TCP Manager
164=CMIP-AGENT - CMIP/TCP Agent
165=XNS-COURIER - Xerox
166=S-NET - Sirius Systems
167=NAMP - NAMP
168=RSVD - RSVD
169=SEND - SEND
170=PRINT-SRV - Network PostScript
171=MULTIPLEX - Network Innovations Multiplex
172=CL/1 - Network Innovations CL/1
173=XYPLEX-MUX - Xyplex
174=MAILQ - MAILQ
175=VMNET - VMNET
176=GENRAD-MUX - GENRAD-MUX
177=XDMCP - X Display Manager Control Protocol
178=NEXTSTEP - NextStep Window Server
179=BGP - Border Gateway Protocol
180=RIS - Intergraph
181=UNIFY - Unify
182=AUDIT - Unisys Audit SITP
183=OCBINDER - OCBinder
184=OCSERVER - OCServer
185=REMOTE-KIS - Remote-KIS
186=KIS - KIS Protocol
187=ACI - Application Communication Interface
188=MUMPS - Plus Five's MUMPS
189=QFT - Queued File Transport
190=GACP - Gateway Access Control Protocol
191=PROSPERO - Prospero Directory Service
192=OSU-NMS - OSU Network Monitoring System
193=SRMP - Spider Remote Monitoring Protocol
194=IRC - Internet Relay Chat Protocol
195=DN6-NLM-AUD - DNSIX Network Level Module Audit
196=DN6-SMM-RED - DNSIX Session Mgt Module Audit Redir
197=DLS - Directory Location Service
198=DLS-MON - Directory Location Service Monitor
199=SMUX - SMUX
200=SRC - IBM System Resource Controller
201=AT-RTMP - AppleTalk Routing Maintenance
202=AT-NBP - AppleTalk Name Binding
203=AT-3 - AppleTalk Unused
204=AT-ECHO - AppleTalk Echo
205=AT-5 - AppleTalk Unused
206=AT-ZIS - AppleTalk Zone Information
207=AT-7 - AppleTalk Unused
208=AT-8 - AppleTalk Unused
209=QMTP - The Quick Mail Transfer Protocol
210=Z39.50 - ANSI Z39.50
211=914C/G - Texas Instruments 914C/G Terminal
212=ANET - ATEXSSTR
213=IPX - IPX
214=VMPWSCS - VM PWSCS
215=SOFTPC - Insignia Solutions
216=CAILIC - Computer Associates Int'l License Server
217=DBASE - dBASE Unix
218=MPP - Netix Message Posting Protocol
219=UARPS - Unisys ARPs
220=IMAP3 - Interactive Mail Access Protocol v3
221=FLN-SPX - Berkeley rlogind with SPX auth
222=RSH-SPX - Berkeley rshd with SPX auth
223=CDC - Certificate Distribution Center
242=DIRECT -
243=SUR-MEAS - Survey Measurement
244=DAYNA -
245=LINK - LINK
246=DSP3270 - Display Systems Protocol
247=SUBNTBCST_TFTP -
248=BHFHS -
256=RAP -
257=SET - Secure Electronic Transaction
258=YAK-CHAT - Yak Winsock Personal Chat
259=ESRO-GEN - Efficient Short Remote Operations
260=OPENPORT -
261=NSIIOPS - IIOP Name Service Over TLS/SSL
262=ARCISDMS -
263=HDAP -
264=BGMP -
280=HTTP-MGMT -
281=PERSONAL-LINK -
282=CABLEPORT-AX - Cable Port A/X
308=NOVASTORBAKCUP - Novastor Backup
309=ENTRUSTTIME -
310=BHMDS -
311=ASIP-WEBADMIN - Appleshare IP Webadmin
312=VSLMP -
313=MAGENTA-LOGIC -
314=OPALIS-ROBOT -
315=DPSI -
316=DECAUTH -
317=ZANNET -
321=PIP -
344=PDAP - Prospero Data Access Protocol
345=PAWSERV - Perf Analysis Workbench
346=ZSERV - Zebra server
347=FATSERV - Fatmen Server
348=CSI-SGWP - Cabletron Management Protocol
349=MFTP -
350=MATIP-TYPE-A - MATIP Type A
351=MATIP-TYPE-B - MATIP Type B or bhoetty
352=DTAG-STE-SB - DTAG, or bhoedap4
353=NDSAUTH -
354=BH611 -
355=DATEX-ASN -
356=CLOANTO-NET-1 - Cloanto Net 1
357=BHEVENT -
358=SHRINKWRAP -
359=TENEBRIS_NTS - Tenebris Network Trace Service
360=SCOI2ODIALOG -
361=SEMANTIX -
362=SRSSEND - SRS Send
363=RSVP_TUNNEL -
364=AURORA-CMGR -
365=DTK - Deception Tool Kit
366=ODMR -
367=MORTGAGEWARE -
368=QBIKGDP -
369=RPC2PORTMAP -
370=CODAAUTH2 -
371=CLEARCASE - Clearcase
372=ULISTSERV - Unix Listserv
373=LEGENT-1 - Legent Corporation
374=LEGENT-2 - Legent Corporation
375=HASSLE - Hassle
376=NIP - Amiga Envoy Network Inquiry Proto
377=TNETOS - NEC Corporation
378=DSETOS - NEC Corporation
379=IS99C - TIA/EIA/IS-99 modem client
380=IS99S - TIA/EIA/IS-99 modem server
381=HP-COLLECTOR - HP Performance Data Collector
382=HP-MANAGED-NODE - HP Performance Data Managed Node
383=HP-ALARM-MGR - HP Performance Data Alarm Manager
384=ARNS - A Remote Network Server System
385=IBM-APP - IBM Application 386=ASA - ASA Message Router Object Def.
387=AURP - Appletalk Update-Based Routing Pro.
388=UNIDATA-LDM - Unidata LDM Version 4
389=LDAP - Lightweight Directory Access Protocol
390=UIS - UIS
391=SYNOTICS-RELAY - SynOptics SNMP Relay Port
392=SYNOTICS-BROKER - SynOptics Port Broker Port
393=DIS - Data Interpretation System
394=EMBL-NDT - EMBL Nucleic Data Transfer
395=NETCP - NETscout Control Protocol
396=NETWARE-IP - Novell Netware over IP
397=MPTN - Multi Protocol Trans. Net.
398=KRYPTOLAN - Kryptolan
399=ISO-TSAP-C2 - ISO Transport Class 2 Non-Control over TCP
400=WORK-SOL - Workstation Solutions
401=UPS - Uninterruptible Power Supply
402=GENIE - Genie Protocol
403=DECAP - decap
404=NCED - nced
405=NCLD - ncld
406=IMSP - Interactive Mail Support Protocol
407=TIMBUKTU - Timbuktu
408=PRM-SM - Prospero Resource Manager Sys. Man.
409=PRM-NM - Prospero Resource Manager Node Man.
410=DECLADEBUG - DECLadebug Remote Debug Protocol
411=RMT - Remote MT Protocol
412=SYNOPTICS-TRAP - Trap Convention Port
413=SMSP - SMSP
414=INFOSEEK - InfoSeek
415=BNET - BNet
416=SILVERPLATTER - Silverplatter
417=ONMUX - Onmux
418=HYPER-G - Hyper-G
419=ARIEL1 - Ariel
420=SMPTE - SMPTE
421=ARIEL2 - Ariel
422=ARIEL3 - Ariel
423=OPC-JOB-START - IBM Operations Planning and Control Start
424=OPC-JOB-TRACK - IBM Operations Planning and Control Track
425=ICAD-EL - ICAD
426=SMARTSDP - smartsdp
427=SVRLOC - Server Location
428=OCS_CMU - OCS_CMU
429=OCS_AMU - OCS_AMU
430=UTMPSD - UTMPSD
431=UTMPCD - UTMPCD
432=IASD - IASD
433=NNSP - NNSP
434=MOBILEIP-AGENT - MobileIP-Agent
435=MOBILIP-MN - MobilIP-MN
436=DNA-CML - DNA-CML
437=COMSCM - comscm
438=DSFGW - dsfgw
439=DASP - dasp
440=SGCP - sgcp
441=DECVMS-SYSMGT - decvms-sysmgt
442=CVC_HOSTD - cvc_hostd
443=HTTPS - HTTPS (Hyper Text Transfer Protocol Secure) - SSL (Secure
Socket Layer)
444=SNPP - Simple Network Paging Protocol
445=MICROSOFT-DS - Microsoft-DS
446=DDM-RDB - DDM-RDB
447=DDM-DFM - DDM-RFM
448=DDM-BYTE - DDM-BYTE
449=AS-SERVERMAP - AS Server Mapper
450=TSERVER - TServer
451=SFS-SMP-NET - Cray Network Semaphore server
452=SFS-CONFIG - Cray SFS config server
453=CREATIVESERVER - CreativeServer
454=CONTENTSERVER - ContentServer
455=CREATIVEPARTNR - CreativePartnr
456=MACON-TCP - macon-tcp
457=SCOHELP - scohelp
458=APPLEQTC - Apple Quick Time
459=AMPR-RCMD - ampr-rcmd
460=SKRONK - skronk
461=DATASURFSRV - DataRampSrv
462=DATASURFSRVSEC - DataRampSrvSec
463=ALPES - alpes
464=KPASSWD - kpasswd
465=SSMTP - ssmtp
466=DIGITAL-VRC - digital-vrc
467=MYLEX-MAPD - mylex-mapd
468=PHOTURIS - proturis
469=RCP - Radio Control Protocol
470=SCX-PROXY - scx-proxy
471=MONDEX - Mondex
472=LJK-LOGIN - ljk-login
473=HYBRID-POP - hybrid-pop
474=TN-TL-W1 - tn-tl-w1
475=TCPNETHASPSRV - tcpnethaspsrv
476=TN-TL-FD1 - tn-tl-fd1
477=SS7NS - ss7ns
478=SPSC - spsc
479=IAFSERVER - iafserver
480=IAFDBASE - iafdbase
481=PH - Ph service
482=BGS-NSI - bgs-nsi
483=ULPNET - ulpnet
484=INTEGRA-SME - Integra Software Management Environment
485=POWERBURST - Air Soft Power Burst
486=AVIAN - avian
487=SAFT - saft
488=GSS-HTTP - gss-http
489=NEST-PROTOCOL - nest-protocol
490=MICOM-PFS - micom-pfs
491=GO-LOGIN - go-login
492=TICF-1 - Transport Independent Convergence for FNA
493=TICF-2 - Transport Independent Convergence for FNA
494=POV-RAY - POV-Ray
495=INTECOURIER -
496=PIM-RP-DISC -
497=DANTZ -
498=SIAM -
499=ISO-ILL - ISO ILL Protocol
500=ISAKMP -
501=STMF -
502=ASA-APPL-PROTO -
503=INTRINSA -
504=CITADEL -
505=MAILBOX-LM -
506=OHIMSRV -
507=CRS -
Я уже рассказывал о брандмауэре Windows Firewall, компоненте пакета обновлений Windows XP Service Pack 2 (SP2), прежние версии которого были известны как Internet Connection Firewall (ICF). В данной статье я более подробно остановлюсь на этой программе и покажу, как подготовить ее для работы в конкретной сети. В моем распоряжении была только предварительная версия SP2, в окончательную редакцию могут быть внесены изменения.
Итак, рассмотрим девять новых параметров Group Policy для Windows Firewall и соответствующие команды. Параметры Windows Firewall хранятся в папке Computer Configuration\Administrative Templates\Network\Network Connections\Internet Connection Firewall. В этой папке существует две подпапки: Domain Profile и Mobile Profile. Параметры политики Domain Profile активизируются на компьютере с установленным Windows Firewall, когда данный компьютер регистрируется в домене; в противном случае выбираются параметры Mobile Profile. Обе подпапки содержат одинаковый набор из девяти параметров политики.
В предыдущей статье речь шла о первом параметре, Operational Mode. Данный параметр обеспечивает три режима: Disabled отключает брандмауэр, Protected активизирует брандмауэр, а Shielded активизирует брандмауэр, но компьютер оказывается более изолированным от сети, чем в режиме Protected, который позволяет открыть определенные порты. Чтобы перевести компьютер в режим Disabled, Protected или Shielded, следует воспользоваться командой
netsh firewall ipv4 set opmode
с ключом disabled, enabled или shield. Обозначения в командной строке иногда отличаются от названий соответствующих параметров Group Policy. Таким образом, чтобы надежно защитить сетевой адаптер, следует ввести команду
netsh firewall ipv4 set opmode shield
Эту команду удобно использовать в командном файле. Можно создать для командного файла ярлык на рабочем столе, назвав его Shield this System, чтобы можно было дважды щелкнуть на нем при любых признаках опасности для сети. С помощью команды
netsh firewall ipv4 show opmode
можно узнать режим брандмауэра.
Изменение параметров брандмауэра
Свойства следующего параметра политики Windows Firewall - Allow User Preference/Group Policy Settings Merge не совсем ясны. В документации Windows Firewall указывается, что с помощью данного параметра локальные администраторы могут изменить режим брандмауэра. Но что означает слово "изменить" - включить или выключить брандмауэр либо настроить его, открывая и закрывая порты? В данном случае "изменить" имеет второе значение: с помощью данной политики локальный администратор может открыть или закрыть порт, но не отменить режим Disabled, Protected или Shielded, установленный доменной политикой (предполагается, что доменная политика для Windows Firewall существует). Если в политике задан режим Disabled, то локальный администратор не может управлять работой брандмауэра.
Путаница начинается, если локальный администратор пытается отменить параметры Windows Firewall, заданные объектом Group Policy Object (GPO). В ответ на команду
netsh firewall ipv4 set opmode disable
будет получен результат OK, и следующая команда Netsh Firewall сообщит, что брандмауэр отключен. Однако, заглянув в свойства сетевого адаптера в папке Network Connections, можно увидеть, что брандмауэр активен. Несколько тестов показывают, что информация графического интерфейса соответствует действительности: преобладают доменные параметры. Будем надеяться, что в окончательной версии эти недостатки будут исправлены.
Однако нельзя всегда полагаться на диалоговые окна. Если присвоить параметру Allow User Preference/Group Policy Settings Merge значение Disabled, то цвет окна становится серым, а переключатели для активизации и отключения Windows Firewall перестают действовать. Такой подход разумен. Но попробуйте активизировать параметр, а затем вернуться к экрану настройки Windows Firewall. Кнопки для включения и выключения брандмауэра доступны. Если щелкнуть на одной из них, а затем на OK, то на экране не появится сообщения об ошибке, но и изменений также не произойдет. Однако локальный администратор может открывать и закрывать порты с помощью командной строки или gpedit.msc. Для параметра политики Allow User Preference/Group Policy Settings Merge эквивалента командной строки не существует.
Открываем порты для программ
Следующий параметр политики - первый из семи параметров, с помощью которых можно открыть или (в некоторых случаях) закрыть конкретный порт. Открывая брандмауэр для прохождения определенного типа трафика (например, Web-трафика, данных аутентификации Active Directory или загрузки электронной почты), трудно определить, какой порт необходим для этого типа трафика. Задача упрощается благодаря параметру политики Define Allowable Programs. По умолчанию Windows Firewall блокирует непрошеный входящий трафик, но не исходящий. Такой подход приемлем, если рабочая станция функционирует как клиент, инициирующий обмен данными (например, запрашивая почтовый сервер о наличии сообщений или Web-сервер - об информации). Но он не срабатывает, если рабочая станция предоставляет службы другим компьютерам сети, например, если на рабочей станции размещен почтовый сервер, потому что брандмауэр блокирует попытки клиентов инициировать диалог с серверной программой. Он также непригоден для одноранговых (peer-to-peer, P2P) соединений, таких как Instant Messaging (IM), в которых две или несколько машин обмениваются данными, выполняя обязанности и клиентов, и серверов одновременно. Таким образом, для запуска сервера или организации соединений P2P необходимо открыть некоторые порты.
Но какие именно порты следует открыть? Для ответа на этот вопрос достаточно указать конкретную программу в параметре Define Allowable Programs, и Windows Firewall открывает порты, необходимые данной программе. Пользователь указывает в параметре политики местонахождение программы, определяет ее состояние (активное или блокированное; например, можно составить политику блокирования портов для конкретной программы, если эта программа была "троянским конем", проникшим в сеть) и открывает соответствующие порты для всего Internet или только для локальной подсети.
Предположим, что на компьютере работает серверная программа C:\myprogs\serverprog.exe. Неизвестно, какие порты она открывает, но необходимо, чтобы эти порты были открыты только для компьютеров той подсети, в которой расположен сервер. Нужно активизировать параметр Define Allowable Programs, затем щелкнуть на кнопке Show, чтобы на экране появилось диалоговое окно для ввода информации о почтовом сервере. В этом диалоговом окне я ввел строку
C:\myprogs\serverprog.exe:LocalSubnet: enabled:E-mail server
которая определяет четыре компонента, каждый из которых отделен от остальных двоеточием. Первый компонент - полный путь к программе. Можно использовать переменные среды, такие как %ProgramFiles%. Следующий компонент, LocalSubnet, указывает на необходимость принять трафик, входящий в порты этого сервера только из систем той же подсети. Третий компонент, enabled, разрешает прохождение трафика. И четвертый компонент, E-mail server, представляет собой просто метку, которую Windows Firewall может использовать при составлении отчетов. Число программ не ограничено.ъ
Открытие конкретных портов
С помощью остальных параметров открываются различные порты. Не совсем ясно, следует ли активизировать первый из них, Allow Dynamically Assigned Ports for RPC and DCOM. Вообще я предпочитаю инструменты на основе Windows Management Instrumentation (WMI), такие как WMI VBScripts и оснастка Manage Computer консоли Microsoft Management Console (MMC), но для WMI необходимы вызовы удаленных процедур (Remote Procedure Calls, RPC). Оснастку Manage Computer нельзя использовать для дистанционного управления системой без WMI, поэтому, чтобы управлять удаленными системами с помощью Manage Computer при активном Windows Firewall, необходимо активизировать этот параметр. Опасность открывания портов для RPC заключается в том, что за последние два года в RPC было обнаружено несколько серьезных ошибок, одна из которых привела к памятной атаке MSBlaster. Поэтому активизация брандмауэра при открытых портах для RPC - противоречивое решение; с таким же успехом можно запереть на замок все двери в доме, ради удобства (своего и грабителей) оставив открытым парадный вход. Как и предыдущий, данный параметр позволяет открыть порты для всех IP-адресов или только для локальной подсети, но такой вариант тоже не очень удачен. Во многих случаях вирус MSBlaster распространялся от зараженного компьютера, который кто-то приносил на предприятие. Поэтому перед активизацией данного параметра необходимо тщательно все обдумать.
Как и RPC, параметры File and Print Sharing, Remote Assistance Support и Universal Plug and Play можно отменить или активизировать, а действие активных параметров ограничить локальной подсетью. Все эти параметры, кроме Remote Assistance Support, можно активизировать из командной строки с помощью команды
netsh firewall ipv4 set service
за которой следует type= и имя службы (например, FILEANDPRINT, RPCANDDCOM или UPNP) или scope= с последующими ключами all (для всех IP-адресов) и subnet (для локальной подсети). Например, чтобы разрешить совместную работу с файлами и принтерами только в локальной подсети, следует ввести команду
netsh firewall ipv4 set service type=fileandprint scope=subnet
Любую команду можно дополнить ключами profile= и interface=, поэтому, если файл- или принт-службу требуется открыть для проводного Ethernet-соединениия только в случаях, когда система подключена к домену, нужно ввести команду
netsh firewall ipv4 set service type=fileandprint scope=subnet interface="local area connection" profile=corporate
Group Policy работает с профилями Domain и Mobile, а инструменты командной строки - с корпоративными и другими профилями.
Остается два параметра политики. Allow ICMP Settings воздействует на подсистему ICMP (Internet Control Message Protocol - протокол управления сообщения Internet). В сущности, для администратора важен лишь один компонент ICMP: Ping. По умолчанию в системах с брандмауэром блокируются все запросы ICMP, и потому сигналы эхо-тестирования игнорируются. В Allow ICMP Settings Properties перечислено девять типов запросов ICMP, разрешенных брандмауэром Windows Firewall. Для тестирования нужно активизировать только запрос Allow Inbound Echo Request. Данный параметр не позволяет ограничить ICMP-трафик локальной подсетью.
ICMP открывается из командной строки:
netsh firewall ipv4 set icmpsetting
с последующим ключом type= и числом (3, 4, 5, 8, 10, 11, 12, 13 или 17) или словом all. Номер указывает один из девяти параметров ICMP, и нам нужен номер 8 - входящий запрос (incoming echo request). Чтобы машина отвечала на сигналы тестирования, необходимо ввести команду
netsh firewall ipv4 set icmpsetting type=8
Команду можно уточнить с помощью ключей profile= и interface=.
Как открыть порт для службы, которая в данной статье не рассматривалась? Для этого можно воспользоваться девятым параметром политики, Define Custom Open Ports. Затем следует указать номер порта Windows Firewall, тип порта (TCP или UDP), область действия (все IP-адреса или только локальная подсеть) и действие (активизировать или блокировать). При желании порту можно присвоить описательное имя. Например, для почтового сервера можно открыть всему миру порт TCP 25:
25:TCP:*:enabled:SMTP
где 25 - номер порта, TCP - протокол, звездочка (*) открывает порт всему миру (не только подсети), ключ enabled открывает, а не закрывает порт, и SMTP - описательная фраза. В командной строке нужно ввести
netsh firewall ipv4 add portopening
с последующими ключами protocol= (варианты - tcp, udp или all), port= (с номером), name= (с именем), mode= (enable или disable) и scope= (all или subnet). Для активизации почтового сервера следует ввести команду
В процессе экспериментов могут возникнуть недоразумения - порт был закрыт, но почему-то остается открытым. Чтобы избежать недоразумений, следует уяснить разницу между поведением брандмауэров, управляемых параметром Group Policy и с помощью командной строки. Команды, подаваемые из командной строки, обычно вступают в силу немедленно. Изменения в Group Policy начинают действовать спустя некоторое время. Чтобы изменения Group Policy для Windows Firewall вступали в действие сразу же, следует применить команду gpupdate.
Необходимо дождаться, пока обработка команды завершится, затем перейти к функции Services в оснастке Manage Computer и перезапустить службу Internet Connection Firewall (в окончательной версии имя службы может быть изменено).
Дополнительные возможности командной строки
Мы рассмотрели возможности параметров Group Policy для Windows Firewall, но функции командной строки шире. Следует помнить, что Windows Firewall имеет два профиля: Domain и Mobile. Предположим, нам нужно выяснить, какой профиль используется в данный момент. Следующая команда показывает активный профиль - Domain Profile (corporate) или Mobile Profile (other):
netsh firewall ipv4 show currentprofile
Команда Set Logging позволяет больше узнать о работе брандмауэра. Она имеет четыре факультативных параметра: Filelocation= показывает брандмауэру, куда записать ASCII-файл журнала, а maxfilesize= задает максимальный размер файла. Размер файла указывается в килобайтах, и максимальное допустимое значение - 32767. Параметры droppedpackets= и connections= принимают значения enable или disable и указывают брандмауэру, следует ли регистрировать блокированные и успешные соединения. Например, чтобы записывать как успешные, так и блокированные соединения в файле C:\firelog.txt размером максимум 8 Мбайт, нужно ввести команду
netsh firewall ipv4 set logging filelocation="C:\firelog.txt" maxfilesize=8192 droppedpackets= enable connections=enable
Журнал может быть большим, но если нужно обнаружить взломщика, регулярно предпринимающего попытки атак, полезно иметь полный журнал, в котором отражены все соединения и отказы TCP и UDP. Задать текущий режим регистрации можно с помощью команды
netsh firewall ipv4 show logging
Следующая команда выдает исчерпывающий список параметров брандмауэра:
netsh firewall ipv4 show config
Заменив в данной команде ключ config ключом state, можно получить подробные сведения о действиях, выполняемых брандмауэром. Чтобы получить более компактный отчет, содержащий только информацию об открытых портах, следует заменить config на icmpsetting или portopening.
Для работы с Windows Firewall требуется освоить много новых понятий. Однако если в системе персонального брандмауэра нет, то Windows Firewall поможет защитить машину, придется лишь потратить незначительное время на создание GPO, чтобы открывать нужные порты. Вознаграждением для администратора будет сознание того, что система за брандмауэром станет куда менее уязвимой.