Программирование в сетях Windows
.pdf560 |
Приложение В |
Вспомогательные фумрри IP |
|
DWORD |
G e t T c p S t a t i s t i c s ( |
. JJ^J |
\1 , О Ш Щ « ЯН>1 |
PMIB TCPSTATS pStats |
|
|
Параметр 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:
DWORDGetUdpStatistics( PMIB_UDPSTATS pStats
);
Параметр pStats — это указатель на структуру MIBJJDPSTATS, куда помещается статистика:
typedef struct .MIBJJDPSTATS
{
DWORDdwInDatagrams;
DWORDdwNoPorts;
DWORDdwInErrors;
DWORDdwOutDatagrams;
DWORDdwNumAddrs;
} 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-интерфейса и метрики. С помощью утилиты можно также добавлять и удалять маршруты. Для добавления маршрута надо задать все перечисленные параметры, для удаления — только адрес подключенного компьютера.
562 |
Приложение В Вспомогательные функции 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 |
|
||
i |
|
|
Ш |
|
DWORD |
dwNumEntries; |
|
|
MIB_IPFORWARDROW |
tabletANY.SIZE]; |
|
} |
MIB_IPFORWARDTABLE, |
•PMIB_IPFORWARDTABLE; |
|
Эта структура содержит массив структур MIBJPFORWARDROW. Поле dwNumEntries определяет их количество в этом массиве. Структура MIBJPFORWARDROWимеет вид:
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;
564 Приложение В Вспомогательные функции 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 и dwForwardMetricS — параметры, зависящие от вида протокола (подробнее — в RFC 1354).
ч
Добавление маршрута
Следующая функция утилиты Route.exe — добавление маршрута. Для этого необходимо задать IP-адрес подключаемого узла, маску подсети, шлюз, локальный интерфейс IP и метрику, проверив правильность параметров локального IP-интерфейса. Ссылаться на локальный IP-интерфейс надо по его внутреннему коду, который можно определить с помощью следующей функции GetlpAddrTable:
DWORD GetlpAddrTable ( PMIB_IPADDRTABLE pIpAddrTable, PULONG pdwSize,
BOOL border
);
Ее первый параметр — pIpAddrTable, указатель на буфер в приложении, куда будет помещена структура MIBJPADDRTABLE. Второй параметр — pdwSize, задает размер этого буфера. Если при вызове функции этот параметр задан равным NULL или размера буфера не достаточно, то в параметре pdwSize возвращается необходимый размер. Последний параметр — bOrder, указывает, будут ли локальные IP-интерфейсы отсортированы по возрастанию IP-адресов. Структура MIBJPADDRTABLE имеет вид:
typedef struct _MIB_IPADDRTABLE
{
DWORD dwNumEntries MIB_IPADDRROW table[ANY_SIZE];
} MIB_IPADDRTABLE, •PMIB_IPADDRTABLE;
Эта структура содержит массив структур MIBJPADDRROW. Поле dwNumEntries определяет их количество в массиве. Код структуры MIBJPADDRROW следующий:
566 Приложение В Вспомогательные функции 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 |
|
); |
|
|
Ее первый параметр — 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;
Структура 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-адреса можно определить с помощью функции GetlpAddrTable. Следующее поле — 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.