Главная страница

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


Скачать 2.88 Mb.
НазваниеЭ. Джонс, Д. Оланд
АнкорПрограммирование в сетях Windows.pdf
Дата12.10.2017
Размер2.88 Mb.
Формат файлаpdf
Имя файлаПрограммирование в сетях Windows.pdf
ТипКнига
#9346
страница47 из 50
1   ...   42   43   44   45   46   47   48   49   50
dwEchoRepsколичество ответов на эхо-сообщения;
dwTimestamps количество штампов времени;
dwTimestampReps — количество ответов на штампы времени;
Ш dwAddrMasks — количество масок адресов;
dwAddrMaskReps количество ответов на маски адресов.
Третья функция — GetTcpStatistics, служит для получения статистики прон токола TCP:

560 Приложение В Вспомогательные фумрри IP
DWORD G e t T c p S t a t i s t i c s ( . JJ^J \1 , О Ш Щ « ЯН>1
PMIB TCPSTATS p S t a t s
Параметр pStats — указатель на структуру MIBJTCPSTATS, куда помещает- ся статистика:
typedef struct _MIB_TCPSTATS
{
DWORD dwRtoAlgorithm;
DWORD dwRtoMin;
DWORD dwRtoMax;
DWORD dwMaxConn;
DWORD dwActiveOpens;
DWORD dwPassiveOpens;
DWORD dwAttemptFails;
DWORD dwEstabResets;
DWORD dwCurrEstab;
DWORD dwInSegs;
DWORD dwOutSegs;
DWORD dwRetransSegs;
DWORD dwInErrs;
DWORD dwOutRsts;
DWORD dwNumConns;
} MIB_TCPSTATS, *PMIB_TCPSTATS;
Структура MIBJTCPSTATS содержит следующие поля:
dwRtoAlgorithm — используемый алгоритм ретрансляции; допустимые зна- чения: M1BJCPRTO CONSTANT, MIB_TCP_RTO_RSRE, MIB_TCP_RTO_VANJ и
MIB_TCP_RTO_OTHER;
Ш dwRtoMin — м и н и м а л ь н ы й л и м и т в р е м е н и для р е т р а н с л я ц и и в милли- секундах;
Ш dwRtoMax — максимальный л и м и т в р е м е н и для р е т р а н с л я ц и и в милли- секундах;
Ш dwMaxConn — максимально допустимое число подключений;
Ш dwActiveOpens — количество подключений к серверу, и н и ц и и р о в а н н ы х д а н н ы м компьютером;
Ш dwPassiveOpens — количество подключений клиентов к д а н н о м у ком- пьютеру; *
dwAttemptFailsколичество сбоев п р и подключении; • Ш
Ш dwEstabResets количество с б р о ш е н н ы х подключений; \ Ш
Ш dwCurrEstab — количество текущих подключений;
dwInSegs количество полученных сегментов;
dwOutSegs — количество отправленных (в том числе повторно) сегментов;
|i dwRetransSegs — количество п о в т о р н о о т п р а в л е н н ы х сегментов;
dwInErrs количество сбоев п р и приеме;

Приложение В Вспомогательные функции IP 561
Ш dwOutRsts — количество сегментов, переданных с флагом сброса;
Ш dwNumConns общее количество подключений.
Последняя функция — GetUdpStatistics, служит для получения статистики протокола UDP:
DWORD GetUdpStatistics(
PMIB_UDPSTATS pStats
);
Параметр pStats — это указатель на структуру MIBJJDPSTATS, куда поме- щается статистика:
typedef struct .MIBJJDPSTATS
{
DWORD dwInDatagrams;
DWORD dwNoPorts;
DWORD dwInErrors;
DWORD dwOutDatagrams;
DWORD dwNumAddrs;
} MIB_UDPSTATS,*PMIB_UDPSTATS;
Структура MIBJJDPSTATS содержит следующие поля:
Ш dwInDatagrams количество полученных дейтаграмм;
Ш dwNoPorts количество дейтаграмм, отброшенных из-за отсутствия
ПОрТОВ;
Ш dwInErrors — количество ошибок при получении дейтаграмм (исключая
dwNoPorts);
Ш dwOutDatagrams — количество переданных дейтаграмм;
dwNumAddrs общее количество записей в таблице прослушиваемых портов UDP.
Возможности утилиты Route
Утилита Route.exe позволяет получать и редактировать таблицу маршрутов.
Эта таблица определяет, какой из интерфейсов IP будет использован для обработки запроса или дейтаграммы. Библиотека вспомогательных IP-функ- ций предлагает несколько функций для работы с таблицей маршрутов. Все они доступны в Windows 98, Windows 2000 и Windows NT 4 с Service Pack 4
(и выше).
Основное предназначение утилиты Route.exe — получение таблицы маршрутизации. Маршрут состоит из адреса подключаемого компьютера,
маски подсети, шлюза, локального IP-интерфейса и метрики. С помощью утилиты можно также добавлять и удалять маршруты. Для добавления мар- шрута надо задать все перечисленные параметры, для удаления — только адрес подключенного компьютера.

5 6 2 Приложение В Вспомогательные функции IP
Получение таблицы маршрутов
Программно получить таблицу маршрутов можно с помощью функции Get-
IpForwardTable-.
DWORD GetlpForwardTable ( 1"
PMIB_IPFORWARDTABLE pIpForwardTable, щ
PULONG pdwSize,
BOOL border
;
(
);
Ее первый параметр — pIpForwardTable, это указатель на буфер в прило- жении, куда будет помещена таблица. Второй параметр — pdwSize, размер этого буфера. Если при вызове функции этот параметр равен NULL или раз- мера буфера не достаточно, то в параметре pdwSize возвращается необхо- димый размер. Последний параметр — bOrder, указывает, будет ли инфор- мация отсортирована. По умолчанию информация сортируется так:
1. Адрес подключаемого компьютера.
2. Протокол маршрута.
3. Политика маршрутизации нескольких путей.
ТУ")
4. Адрес следующего узла.
i
"
т
Информация о маршрутизации возвращается в виде структуры MIBJP-
FORWARDTABLE:
Ш
typedef struct _MIB_IPFORWARDTABLE
m
i
Ш
DWORD dwNumEntries;
MIB_IPFORWARDROW tabletANY.SIZE]; »
} MIB_IPFORWARDTABLE, •PMIB_IPFORWARDTABLE; ц
Эта структура содержит массив структур MIBJPFORWARDROW. Поле dw-
NumEntries определяет их количество в этом массиве. Структура MIBJP-
FORWARDROWимеет вид:
typedef struct _MIB_IPFORWARDROW
{
DWORD dwForwardDest;
DWORD dwForwardMask;
DWORD dwForwardPolicy;
DWORD dwForwardNextHop;
DWORD dwForwardlflndex;
DWORD dwForwardType;
DWORD dwForwardProto;
DWORD dwForwardAge;
DWORD dwForwardNextHopAS;
DWORD dwForwardMetnd;
DWORD dwForwardHetric2;
DWORD dwForwardMetnc3;
DWORD dwForwardMetric4;
DWORD dwForwardMetric5;
} HIB_IPFORWARDROW, «PMIB.IPFORWARDROW;

Приложение В Вспомогательные функции IP 563
Структура MIBJPFORWARDROW содержит следующие поля:
dwForwardDest — IP-адрес конечного узла.
dtvForwardMask — маска подсети конечного узла.
dwForwardPolicy задает набор условий для выбора маршрута (см. RFC
1354), обычно представляемых в форме IP Type of Service (TOS).
dwForwardNextHop — IP-адрес следующего узла в маршруте.
dwForwardlflndex — номер интерфейса для данного маршрута.
divForwardType — тип маршрута согласно RFC 1354; возможные значения:
Ш MIB_IPROUTE_ TYPEINDIRECT следующий узел не является конеч- ным пунктом (дальний маршрут);
Ш MIBIPROUTE TYPE DIRECT следующий узел является конечным пунктом (локальный маршрут);
« MIBIPROUTETYPE INVALID неверный маршрут;
Ш MIB IPROUTETYPEOTHER — другой.
dwForwardProto — протокол маршрута; возможные значения (для про- токолов IPX определены в файле Routprot.h, для IP — в файле Iprtrmib.h).
II MIB IPPROTO OTHER неизвестный протокол;
Ш MIBIPPROTOLOCAL — маршрут, сгенерированный стеком;
Ш MIBIPPROTONETMGMT маршрут, добавленный утилитой Route.exe или SNMP;
К MIB IPPROTO ICMP маршрут от перенаправления ICMP;
Ш MIB IPPROTO EGP протокол Exterior Gateway Protocol;
IS MIBIPPROTOGGP протокол Gateway Gateway Protocol;
И MIB IPPROTO HELLO протокол HELLO;
Ш MIBIPPROTORIP — протокол Routing Information Protocol;
MIBIPPROTOISJS — соединение IP Intermediate System и Intermediate
System Protocol;
Ш MIBJPPROTOESIS соединение IP End System и Intermediate System
Protocol;
Ш MIBIPPROTO CISCO - протокол IP Cisco;
Ш MIBIPPROTO BBN протокол BBN;
И MIB IPPROTOOSPF протокол Open Shortest Path First;
В MIBIPPROTOBGP — протокол Border Gateway Protocol;
Ш MIB IPPROTONT AUTOSTATIC динамический маршрут, добавлен- ный протоколом маршрутизации;
Ш MIBIPPROTO NT STATIC маршруты, добавленные с помощью пользовательского интерфейса или утилитой Routemon.exe;
Ш MIB IPPROTO STATIC NON DOD то же, что и PROTO_IP_NT_STATIC,
кроме маршрутов, не вызывающих запрос Dial on Demand (DOD);
И IPXPROTOCOLRIP протокол Routing Information Protocol for IPX;

5 6 4 Приложение В Вспомогательные функции IP
Н IPXPROTOCOLSAP — протокол Service Advertisement Protocol;
IPXPROTOCOLNLSP протокол Netware Link Services Protocol. I
dwForwardAge время жизни маршрута в секундах. ••
Ш dwForwardNextHopAS — автономный системный номер следующего узла.
Ш dtvForwardMetricl — зависящий от вида протокола параметр-метрика
(подробнее — в RFC 1354); это значение отображается при запуске ути- литы Route.exe с параметром print.
ПРИМЕЧАНИЕ Если этот параметр (а также следующие четыре) не ис- пользуется, то его значение будет равно MIBJPROUTE_METRICJJNUSED '
(??).
dwForwardMetric2, du>FonvardMetric3, dwForwardMetric4 и dwFor-
wardMetricS — параметры, зависящие от вида протокола (подробнее —
в RFC 1354).
ч
Добавление маршрута
Следующая функция утилиты Route.exe — добавление маршрута. Для этого необходимо задать IP-адрес подключаемого узла, маску подсети, шлюз, ло- кальный интерфейс IP и метрику, проверив правильность параметров ло- кального IP-интерфейса. Ссылаться на локальный IP-интерфейс надо по его внутреннему коду, который можно определить с помощью следующей функ- ции GetlpAddrTable:
DWORD GetlpAddrTable (
PMIB_IPADDRTABLE pIpAddrTable,
PULONG pdwSize,
BOOL border
);
Ее первый параметр — pIpAddrTable, указатель на буфер в приложении,
куда будет помещена структура MIBJPADDRTABLE. Второй параметр — pdw-
Size, задает размер этого буфера. Если при вызове функции этот параметр задан равным NULL или размера буфера не достаточно, то в параметре pdw-
Size возвращается необходимый размер. Последний параметр — bOrder, ука- зывает, будут ли локальные IP-интерфейсы отсортированы по возрастанию
IP-адресов. Структура MIBJPADDRTABLE имеет вид:
typedef struct _MIB_IPADDRTABLE
{
DWORD dwNumEntries
MIB_IPADDRROW table[ANY_SIZE];
} MIB_IPADDRTABLE, •PMIB_IPADDRTABLE;
Эта структура содержит массив структур MIBJPADDRROW. Поле dwNum-
Entries определяет их количество в массиве. Код структуры MIBJPADDRROW
следующий:

Приложение В Вспомогательные функции IP 565
typedef struct _MIB_IPADDRROW
DWORD
DWORD
DWORD
DWORD
DWORD
unsigned
unsigned
dwAddr;
dwlndex;
dwMask;
dwBCastAddr;
dwReasmSize;
short unused"!;
short unused2;
MIB_IPADDRROW, *PMIB_IPADDRROW;
Структура MIBJPADDRROW содержит следующие поля:
dwAddr — IP-адрес для данного интерфейса;
dwlndex код данного интерфейса;
Ш dwMa.sk — маска подсети для данного IP-адреса;
Ш dwBCastAddr адреса рассылки;
Ш dwReasmSize — максимальный размер сборки для принимаемых дейтаг- рамм;
Ш unused 1 и unused2 не используются.
С помощью этой функции можно определить, правильны ли параметры локального IP-интерфейса. Чтобы добавить маршрут в таблицу, воспользуй- тесь функцией SetlpForwardEntty:
DWORD SetlpForwardEntry (
PMIB_IPFORWARDROW pRoute
);
Ее единственный параметр — pRoute, указатель на структуру MIBJPFOR-
WARDROW. Для добавления маршрута должны быть заданы значения полей
dwForwardlflndex, dwForwardDest, dwForwardMask, divForwardNextHop и dw-
ForwardPolicy.
Удаление маршрута
Удаление маршрута — простейшая операция Route. Для этого надо задать только адрес подключавшегося компьютера. Соответствующая этому адре- су структура MIBJPFORWARDROWвозвращается функцией GetlpForwardTable
и передается функции DeletelpForwardEntry, удаляющей маршрут:
DWORD DeletelpForwardEntry (
PMIB_IPFORWARDROW pRoute
);
Можно вручную задать необходимые поля параметра pRoutе-. dwForward-
lflndex, dwForwardDest, dwFonvardMask, dwForwardNextHop и dwFonvardPolicy.
Утилита ARP
Эта утилита используется для просмотра и редактирования кэша ARP. При- мер из Platform SDK, эмулирующий ее работу с помощью вспомогательных

5 6 6 Приложение В Вспомогательные функции IP
функций IP, называется Iparp.exe. Протокол ARP отвечает за разрешение IP- адреса в физический МАС-адрес. Для увеличения производительности ком- пьютер хранит эту информацию в кэше, и к ней можно получить доступ с помощью утилиты Агр.ехе. Утилита позволяет вывести таблицу ARP (с пара- метром -а), удалить запись (с параметром -d) или добавить запись (с пара- метром -s).
Рассмотрим соответствующие функции. Они доступны в Windows 98,
Windows 2000 и Windows NT 4 с Service Pack 4 (и выше).
Получить таблицу ARP позволяет функция GetlpNetTable: ^
DWORD GetlpNetTable (
PMIB_IPNETTABLE pIpNetTable,
PULONG pdwSize, *
BOOL border I
);
Ее первый параметр — pIpNetTable, указатель на буфер в приложении, куда будет помещена структура MIBJPNETTABLE. Второй параметр — pdwSize,
размер этого буфера. Если при вызове функции этот параметр равен NULL
или размера буфера недостаточно, то в параметре pdwSize возвращается не- обходимый размер буфера (при этом сама функция возвращает значение
ERRORJNSUFFLCLENTBUFFER). Последний параметр — bOrder, указывает,
будут ли записи отсортированы по возрастанию IP-адресов. Структура М1В_
IPNETTABLE имеет следующий вид:
typedef struct _MIB_IPNETTABLE
{
DWORD dwNumEntries; ,;
MIB_IPNETROW tabletANY_SIZE];
> MIB IPNETTABLE, *PMIB IPNETTABLE;
T
Эта структура содержит массив структур MLBJPNETROW. Поле
Entries определяет их количество в этом массиве. Каждая структура
NETR0W содержит одну запись ARP:
typedef struct _MIB_IPNETROW { *
DWORD dwlndex; -»
DWORD dwPhysAddrLen;
BYTE bPhysAddr[MAXLEN_PHYSADDR];
DWORD dwAddr;
DWORD dwType; '*
} MIB_IPNETROW, *PMIB_IPNETROW; ,-1
Структура MLB LPNETROW содержит следующие поля.
К dwlndex — код адаптера.
II dwPhysAddrLen — длина физического адреса в байтах.
bPhysAddr — массив байт, содержащий физический (MAC) адрес адаптера.
dwAddr — IP-адрес адаптера.
dwType — тип записи ARP; возможные значения:

Приложение В Вспомогательные функции IP 567
Ж MIBJPNETJYPE STATIC— статическая запись;
Ш MIBJPNETJTYPEJDYNAMIC — динамическая запись;
MIBJPNETJYPEJNVAUD — недействительная запись;
Ш MIB_IPNET_TYPE_OTHER — иной тип.
Добавление записи ARP
Для добавления записи ARP предназначена функция SetlpNetEntry:
DWORD SetlpNetEntry (
PMIB.IPNETROW pArpEntry
Ее единственный аргумент — рассмотренная структура MIBJPNETROW, в которой должны быть заданы необходимые поля. В поле dwlndex указыва- ют код локального IP-адреса сети, к которой применяется запись ARP. Этот код для каждого IP-адреса можно определить с помощью функции Getlp-
AddrTable. Следующее поле — dwPhysAddrLen, обычно равно 6. (Большинство физических адресов, в частности, МАС-адреса ETHERNET занимают б байт)
Массив байт bPhysAddr содержит физический адрес. Большинство МАС-ад- ресов представляются в виде 12 символов и должны быть переведены в со- ответствующий двоичный вид. Например МАС-адрес 00-А0-С9-А7-86-Е8 бу- дет представлен как
00000000 10100000 11001001 10100111 10000110 11101000
Метод кодирования аналогичен применяемому для кодирования адресов
IPX и ATM (см. главу б). Поле dwAddr должно содержать IP-адрес узла, для которого задавался МАС-адрес. В последнем поле — dwType, указывается тип записи. После заполнения необходимых полей структуры вызывается функ- ция SetlpNetEntry. Если запись успешно добавлена, возвращается значение
NOERROR.
Удаление записи ARP
Для удаления записи требуется только задать в структуре MIBJPNETROW код интерфейса dwlndex и IP-адрес удаляемой записи dwAddr. Затем вызывает- ся функция DeletelpNetEntry.
DWORD DeletelpNetEntry (
PMIB_IPNETROW pArpEntry
Напомним, что код для локального интерфейса IP можно получить с по мощью функции GetlpAddrTable. Если удаление записи успешно, функци
DeletelpNetEntry возвращает значение NOJ1RROR.

П Р И Л О Ж Е Н И Е
Коды ошибок Winsock
В приложении перечислены коды ошибок Winsock, отсортированные по но- мерам В список не включены специфичные и недокументированные ошиб- ки Winsock Ошибки Winsock, непосредственно соответст вующие ошибкам
Win32, перечислены в конце приложения
1   ...   42   43   44   45   46   47   48   49   50


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