Главная страница
Навигация по странице:

  • Табл. 1-1. Таблица имен NetBIOS Имя DAVEMAC 1DAVEMAC 1DAVEMACDDAVEMACDDAVEMACDDAVEMAC 1Inet ServicesIS DAVEMAC116-йбайт

  • Основы программирования NetBIOS Теперь обсудим API-интерфейс NetBIOS. Он элементарен, поскольку содержитТОЛЬКО ОДНУ фуНКЦИЮ:UCHAR Netbios(PNCB pNCB);

  • UCHAR ncb_lana_num; ; . UCHAR ncb_cmd_cplt; UCHAR ncb_reserve[10]; HANDLE ncb_event; \ *

  • ncbcallnatne

  • • ncb_lana_num

  • • ncb_reserve

  • Синхронный и асинхронный вызов

  • Типичные процедуры NetBIOS

  • Программирование в сетях Windows. Э. Джонс, Д. Оланд


    Скачать 2.88 Mb.
    НазваниеЭ. Джонс, Д. Оланд
    АнкорПрограммирование в сетях Windows.pdf
    Дата12.10.2017
    Размер2.88 Mb.
    Формат файлаpdf
    Имя файлаПрограммирование в сетях Windows.pdf
    ТипКнига
    #9346
    страница2 из 50
    1   2   3   4   5   6   7   8   9   ...   50

    ГЛАВА 1 Интерфейс NetBIOS
    NetBIOS Configuration
    Use thts здвеп to change Hie lane numbei on the isted NeiffiOS network raises
    000 001 002 003 004
    i>erj NetworkBisute „ „ . „ _ _ „ ,
    Nbf->IEEPRO->IEEPR02
    NetBT •> IEEPR0 •> IEEPRO2
    NwlnkNb > Nwlnklpx
    Nbf-> E100B •> E100B1
    NetBT -> E100B -> E100B1
    Рис. 1-1. Диалоговое окно NetBIOS Configuration
    Windows 2000 также позволяет напрямую назначать номера LANA. В Cont- rol Panel щелкните значок Network And Dial-up Connections. Далее выберите в меню Advanced команду Advanced Settings и в открывшемся диалоговом окне настройте параметры на вкладке LANA numbers.
    При разработке устойчивого приложения NetBIOS всегда пишется код,
    который может обрабатывать соединения на любом номере LANA. Предпо- ложим, Мэри пишет серверное приложение NetBIOS, которое слушает кли- ентов на LANA 2. На компьютере Мэри LANA 2 соответствует протоколу TCP/
    IP. Далее Джон решает написать клиентское приложение для связи с серве- ром Мэри, так что его приложение будет связываться через LANA 2 на его рабочей станции; однако, LANA 2 на компьютере Джона соответствует Net-
    BEUI. Приложения не смогут связаться друг с другом, хотя им доступны про- токолы TCP/IP и NetBEUI. Чтобы устранить это несоответствие, серверное приложение Мэри должно слушать клиентские соединения на каждом дос- тупном номере LANA на рабочей станции Мэри. Аналогично, клиентское приложение Джона должно пытаться связаться на каждом номере LANA, до- ступном на его компьютере. Так Мэри и Джон смогут гарантировать успех связи их приложений. Конечно, наличие кода, который может обрабатывать соединения на любом номере IANA не означает, что этот код будет работать,
    если у двух компьютеров не найдется ни одного общего протокола.
    Имена NetBIOS
    Теперь перейдем к именам NetBIOS. Процесс — или, если угодно, приложе- ние — регистрирует имя на каждом номере LANA, с которым ему требуется связаться. Имя NetBIOS имеет длину 16 символов; 1б-й символ зарезерви- рован для специальных целей. При добавлении имени в таблицу имен, вы должны очистить буфер имен. В среде Win32 каждый процесс имеет табли- цу имен NetBIOS для каждого доступного номера LANA. Добавление имен.и для LANA 0 означает, что приложение доступно только клиентам, соединяю- щимся на этом LANA 0. Максимально к каждому номеру LANA могут быть
    Добавлены 254 имени, они пронумерованы от 1 до 254 (0 и 255 зарезерви-

    Устаревшие сетевые API
    рованы для системы) Впрочем, каждая ОС задает максимальный номер по умолчанию, меньший 254 Вы вправе его изменить при переопределении каждого номера LANA
    Есть два типа имен NetBIOS уникальное и групповое Никакой другой процесс в сети не может зарегистрировать уже имеющееся уникальное имя будет выдана ошибка дублирования имени Как вам, наверное, известно, име- на компьютеров в сетях Microsoft — имена NetBIOS Когда компьютер загру- жается, он регистрирует свое имя на локальном сервере Windows Internet
    Naming Server (WINS), который сообщает об ошибке, если другой компью- тер уже использует то же имя Сервер WINS поддерживает список всех заре- гистрированных имен NetBIOS
    Вместе с именем могут храниться и сведения о протоколе Например, в сетях TCP/IP WINS запоминает IP-адрес компьютера, зарегистрировавшего имя NetBIOS Если сеть сконфигурирована без сервера WINS, компьютеры проверяют, нет ли в сети такого же имени, путем широковещательной рас- сылки сообщения Если никакой другой компьютер не оспаривает сообще- ние, сеть позволяет отправителю использовать заявленное имя
    Групповые имена используются, чтобы отправлять или, наоборот, полу- чать данные, предназначенные для множества получателей Имя группы не обязательно должно быть уникальным Групповые имена используются для многоадресной рассылки
    16-й символ в именах NetBIOS определяет большинство сетевых служб
    Microsoft Имена служб и групп для WINS-совместимых компьютеров сервер
    WINS регистрирует напрямую, а для регистрации имен других компьютеров применяется широковещание по локальной подсети Чтобы получить ин- формацию о зарегистрированных на локальном (или удаленном) компью- тере именах NetBIOS, используйте утилиту Nbtstat В табл 1-1 приведены све- дения о зарегистрированных именах NetBIOS, которые команда Nbtstat -n выдала для пользователя Davemac, вошедшего в компьютер, конфигуриро- ванный как основной контроллер домена и работающий под управлением
    Windows NT Server вместе с Internet Information Server
    Табл. 1-1. Таблица имен NetBIOS
    Имя
    DAVEMAC 1
    DAVEMAC 1
    DAVEMACD
    DAVEMACD
    DAVEMACD
    DAVEMAC 1
    Inet

    Services
    ISDAVEMAC1
    16-йбайт
    <00>
    <20>
    <00>
    <1C>
    <1B>
    <03>
    <1C>
    <00>
    DAVEMAC 1+++++++
    Тип имени
    Уникальное
    Уникальное
    Групповое
    Групповое
    Уникальное
    Уникальное
    Групповое
    Уникальное

    Служба
    Имя службы рабочей станции
    Имя службы сервера
    Имя домена
    Имя контроллера домена
    Имя координатора сети
    Имя отправителя
    Групповое имя Internet Information
    Server
    Уникальное имя Internet Information
    Server
    Уникальное имя сетевого монитора

    Г Л А В А 1 Интерфейс NetBIOS
    I
    Утилита Nbtstat устанавливается вместе с протоколом TCP/IP Она може!
    также опрашивать таблиц имен на удаленных компькл ерах, используя пара- метр -а с именем удаленного компьютера или параметр -А с ei о IP-адресом
    Перечислим стандартные значения 1б-го байта, добавляемые в конец уни- кальных NetBIOS-имен компьютеров разными сетевыми службами Microsoft
    Ш <00> — имя службы рабочей станции (NetBIOS-имя компьютера),
    • <03> — имя службы сообщений, используемое при получении и отправ- ке сообщений, зарегистрировано сервером WINS для службы сообщений на клиенте WINS и обычно добавляется в конец имени компьютера и во шедшего в систему пользователя,
    • <1В> — имя координатора сети (master browser) домена, определяет ос- новной контроллер домена и указывает, каких клиентов и других обозре- вателей использовать для контакта с координатором сети домена,
    Я <0б> — серверная служба удаленного доступа (RAS),
    • <1F> — служба сетевого динамического обмена данными (Network Dy- namic Data Exchange, NetDDE),
    Ш <20> — имя службы на сервере, используемое для предоставления точек подключения к общим файлам,
    • <21> — клиент RAS,
    • <ВЕ> — агент сетевого монитора,
    — утилита Network Monitor (Сетевой монитор)
    А теперь перечислим заданные по умолчанию символы 1б-го байта, до- бавляемые в конец обычно используемых групповых имен NetBIOS
    • <1С> — групповое имя домена, содержащее список определенных адре- сов компьютеров, которые его зарегистрировали Контроллер домена это имя регистрирует WINS обрабатывает его как доменную группу каждый член группы должен индивидуально обновить свое имя или будет исклю- чен Доменная группа ограничена 25 именами Если в результате репли- кации статическое 1С-имя конфликтует с динамическим 1С-именем на другом сервере WINS, для соответствующих участников добавляется ком- бинированная запись, которая помечается как статическая Если запись статическая, члены группы не должны обновлять свои IP-адреса
    Ш <1D> — имя координатора сети (master browser), используемое клиента- ми для обращения к нему В подсети может быть лишь один координатор
    Серверы WINS возвращают положительный ответ на регистрацию име- ни домена, но не сохраняют это имя в своих базах данных Если компью- тер посылает запрос на имя домена серверу WINS, тот возвращает отри- цательный ответ Если компьютер, сделавший запрос, сконфигурирован как h- или m-узел, он затем выполняет широковещателыгую рассылку зап- роса имени, чтобы разрешить его Тип узла определяет способ разреше- ния имени клиентом Клиенты, сконфигурированные для разрешения в режиме b-узла, выполняют широковещательную рассылку пакетов для оповещения о себе и разрешения имен NetBIOS При разрешении в ре-

    ЧАСТЬ I Устаревшие сетевые API
    жиме р-узла связь с сервером WINS осуществляется в стиле «точка — точ- ка». При разрешении имен в режиме m-узла (смешанном) сначала задей- ствуется режим b-узла, а затем при необходимости — режим р-узла. Пос- ледний метод разрешения — h-узел (гибридный). В этом режиме снача- ла применяется регистрация и разрешение в режиме р-узла, а в случае неудачи — в режиме b-узла. По умолчанию в Windows используется ре- жим п-узла.
    щ <1Е> — обычное групповое имя. Обозреватели могут выполнять широко- вещательную рассылку для данного имени и слушать на нем, чтобы выб- рать координатора сети. Эти широковещательные рассылки эффективны лишь в локальной подсети и не ретранслируются маршрутизаторами.
    Ш <20> — имя Интернет-группы. Регистрируется серверами WINS, чтобы идентифицировать группы компьютеров в административных целях. На- пример, можно зарегистрировать групповое имя «printersg» для иденти- фикации административной группы серверов печати.
    Ш _MSBROWSE_ — добавляется в конец имени домена вместо 1б-го симво- ла. Это имя широковещательно рассылается по локальной подсети, что- бы сообщить о домене другим ее координаторам.
    Такое количество спецификаторов может казаться чрезмерным: скорее всего, вам не потребуется использовать их в именах NetBIOS, но все же при- мите их к сведению. Во избежание случайных коллизий между именами
    NetBIOS не используйте спецификаторы уникальных имен. Еще более осто- рожно отнеситесь к групповым именам: если ваше имя будет противоречить существующему групповому имени, ошибка выдана не будет, и вы начнете получать данные, предназначенные для кого-то другого.
    Особенности NetBIOS
    NetBIOS предлагает и требующие логического соединения службы, и служ- бы без установления соединения (дейтаграммные). Первые позволяют двум объектам устанавливать сеанс или виртуальный канал между ними. Сеанс —
    двусторонний коммуникационный поток, по которому объекты обменива- ются сообщениями. Требующие сеанса службы гарантируют доставку любых данных между двумя конечными точками. Сервер обычно регистрирует себя под определенным известным именем, и клиенты ищут это имя, чтобы свя- - заться с сервером. Применительно к NetBIOS, процесс сервера добавляет его имя в таблицу имен для каждого номера LANA, с которым требуется связь.
    Клиенты на других компьютерах преобразуют имя службы в имя компьюте- ра и затем запрашивают соединение у серверного процесса. Как видите, для установления такой цепочки необходимо предварительно выполнить опре- деленные действия, поэтому инициализация соединения связана с некото- рыми издержками. При установлении сеанса гарантируется доставка паке- тов и их порядок, хотя связь и основана на сообщениях. То есть если под- ключенный клиент направит команду чтения, сервер вернет только один пакет данных в потоке, даже если клиент обеспечил буфер для приема не- скольких пакетов.

    I J I # - * V г-л
    При использовании служб, не требующих логического соединения (дей- таграммных), сервер регистрируется под конкретным именем, и клиент про- сто собирает данные и посылает их в сеть, не устанавливая заранее никако- го соединения. Клиент направляет данные на NetBIOS-имя серверного про- цесса. Дейтаграммные службы эффективнее, поскольку не тратят время и ресурсы на установление соединения.
    С другой стороны, дейтаграммные службы не дают гарантий доставки и порядка сообщений. Например, клиент отправляет тысячи байтов данных на сервер, который два дня назад был остановлен из-за отказа. Отправитель ни- когда не получит никаких уведомлений об ошибке, если только не ожидает ответа от сервера (если в течение достаточно длительного периода време- ни нет отклика, то можно понять, что что-то не так).
    Основы программирования NetBIOS
    Теперь обсудим API-интерфейс NetBIOS. Он элементарен, поскольку содержит
    ТОЛЬКО ОДНУ фуНКЦИЮ:
    UCHAR Netbios(PNCB pNCB);
    Все объявления функций, константы и т. п. для NetBIOS определены в за- головочном файле. Единственная библиотека, необходимая для компонов- ки приложений NetBIOS — Netapi32.1ib. Наиболее важная особенность этой функции — параметр pNCB, который является указателем на блок сетевого
    управления (network control block, NCB). Это — указатель на структуру NCB,
    содержащую всю информацию, требуемую функции Netbios для выполнения команды NetBIOS. Определяется эта структура так:
    typedef struct _NCB
    ' UCHAR ncb_command;
    '- UCHAR ncb_retcode;
    , UCHAR ncb_lsn;
    JJ UCHAR ncb_num;
    , PUCHAR ncb.buffer;
    WORD ncb_length;
    UCHAR ncb_callname[NCBNAMSZ];
    UCHAR ncb_name[NCBNAMSZ];
    UCHAR ncb_rto;
    4
    UCHAR ncb.sto;
    1
    void (*ncb_post) (struct _NCB * ) ;
    UCHAR ncb_lana_num;
    ;
    . UCHAR ncb_cmd_cplt;
    UCHAR ncb_reserve[10];
    HANDLE ncb_event;
    \ * PNCB, NCB;
    He все члены структуры будут использоваться в каждом вызове NetBIOS;
    некоторые из полей данных являются выходными параметрами (другими словами, задаются по возвращении из вызова Netbios). Один важный совет:

    1 О ЧАСТЬ I Устаревшие сетевые API
    всегда обнуляйте структуру NCB до вызова Netbios. В следующем списке опи- сано назначение каждого поля.
    Ш ncb_command — указывает выполняемую команду NetBIOS. Многие ко- манды могут выполняться синхронно или асинхронно поразрядным ло- \
    гическим сложением флага ASYNCH (0x80) и команды.
    И ncbjretcode — определяет код возврата для данной операции. Функция присваивает этому полю значение NRC_PENDING, когда происходит асин- хронная операция.
    neb Isnопределяет номер локального сеанса, уникально идентифици- рующий его в текущем окружении. Функция возвращает новый номер се- анса после успешной команды NCBCALL или NCBLISTEN.
    Ш ncb_num — указывает номер локального сетевого имени. Новый номер воз- вращается для каждого вызова команды NCBADDNAME или NCBADDGRNAME.
    Используйте корректный номер со всеми дейтаграммными командами.
    Ш ncbbuffer указывает на буфер данных. Для команд, которые отправ- ляют данные, этот буфер содержит отправляемые данные; для команд,
    которые получают данные, — данные, возвращаемые функцией Netbios.
    Для других команд, типа NCBENUM, буфер будет предопределенной струк- турой LANAJ.NUM.
    Ш ncb_length указывает длину буфера в байтах. Для команд приема Netbios присваивает этому полю значение, равное количеству полученных байтов.
    Если буфер недостаточно велик, Netbios возвращает ошибку NRC_BUFLEN.
    Ш ncbcallnatne — указывает имя удаленного приложения.
    ncb_name — указывает имя, под которым известно приложение.
    ncbrto — указывает время ожидания (тайм-аут) для операций приема.
    Значение определено в 500-миллисекундных единицах (0 — означает нулевое время ожидания) и задано для команд NCBCALL и NCBLISTEN, что влияет на последующие команды NCBRECV.
    ncbsto — указывает время ожидания для операций отправки. Значение определяется в 500-миллисекундных единицах (0 — означает нулевое время ожидания) и задано для команд NCBCALL и NCBLISTEN, что влияет на последующие команды NCBSEND и NCBCHAINSEND.
    Ш ncb_post указывает адрес процедуры, которую надо вызвать по завер- шении асинхронной команды. Функция определена как void CALLBACK PostRoutine(PNCB pncb);
    тдерпсЬ указывает на блок сетевого управления завершенной команды.
    ncb_lana_num — указывает номер LANA для выполнения команды.
    ncbcmdcplt — определяет код возврата для операции. Netbios присва- ивает этому полю значение NRCJPENDING, когда происходит асинхрон- ная операция.
    ncb_reserve — зарезервировано, должно быть равно 0.

    Г Л А В А 1 Интерфейс NetBIOS "И
    neb event — указывает описатель объекта события Windows в свободном
    (nonsignaled) состоянии. Когда асинхронная команда завершается, собы- тие переходит в занятое (signaled) состояние. Следует использовать толь- ко ручной сброс событий. Это поле должно быть равно 0, если в поле
    neb command не задан флаг ASYNCH или если значение ноля nebjjost от- лично от О. Иначе Netbios возвращает ошибку NRCJLLCMD.
    Синхронный и асинхронный вызов
    Вы можете вызвать функцию Netbios синхронно или асинхронно. Все коман- ды NetBIOS синхронны — это означает, что вызов Netbios блокируется, пока команда не завершит работу. При вызове команды NCBLISTEN запрос к Netbios
    не возвращается, пока клиент не установит соединение или не произойдет ошибка.
    Для асинхронного вызова выполните логическую операцию OR над ко- мандой NetBIOS и флагом ASYNCH. При использовании флага ASYNCH необ- ходимо определить вызываемую после выполнения команды процедуру в поле ncb_post, либо описатель события в поле nebjsvent. Когда асинхронная команда выполнена, Netbios возвращает значение NRC_GOODRET (0x00), но полю ncb_cmd_cplt присваивается значение NRC_PENDING (OxFF). Кроме того, функция Netbios задает полю ncb_cmd_cplt структуры NCB значение
    NRC_PENDING, пока команда не завершится. По завершении команды полю
    ncb_cmd_cplt присваивается значение, возвращенное командой. После сво- его завершения Netbios также присваивает полю ncb_retcode свой код воз- врата.
    Типичные процедуры NetBIOS
    В этом разделе мы исследуем типичное серверное приложение NetBIOS. Сна- чала изучим сервер, так как его конструкция диктует действия клиента. По- скольку большинство серверов предназначено для обслуживания нескольких клиентов одновременно, асинхронная модель NetBIOS подойдет лучше все- го. Мы обсудим примеры серверов, использующих как асинхронные проце- дуры обратного вызова, так и модель событий. Однако для начала предста- вим исходный текст, который реализует некоторые обычные функции, не- обходимые большинству прикладных программ NetBIOS. Листинг 1-1 взят из файла Nbcommon.c, который вы найдете на прилагаемом компакт-диске в папке \Examples\ChapterO 1\Соттоп, Функции из этого файла используют- ся во многих примерах книги.
    1   2   3   4   5   6   7   8   9   ...   50


    написать администратору сайта