![](/user_photo/2706_HbeT2.jpg)
Программирование в сетях Windows
.pdf![](/html/2706/8/html_j2eJu_MDhd.JqX6/htmlconvd-1STI_9561x1.jpg)
548 |
Приложение А Перечень команд NetBIOS |
КомандаNCBSSTAT
Команда получает сведения о состоянии сеанса. При вызове этой команды ncb_buffer ссылается на область памяти, которая будет заполнена структурой SESSION'_ HEADER, далее следуют одна или более структур SESSION_BUFFER. Если первый байт ncbjname — звездочка ('), команда выясняет состояние для всех сеансов, связанных со всеми именами в таблице локальных имен. Если предоставленный буфер слишком мал, выдается ошибка NRCJNCOMP (0x06). Если длина буфера меньше 4 байт — ошибка NRCJBUFLEN (0x01).
Поле |
Ввод или вывод |
Нужно ли задать |
|
|
ncbjzommand |
Ввод |
Да |
|
|
neb |
retcode |
Вывод |
Нет |
|
ncbjsn |
Не обязательно |
Нет |
к |
|
neb |
пит |
Вывод |
Нет _„ |
к |
neb |
buffer |
Ввод |
Да |
|
nebjength |
Ввод |
Да |
|
|
neb |
callname |
Не обязательно |
Нет |
|
ncbjname |
Ввод |
Да |
|
|
neb |
rto |
Не обязательно |
Нет |
, |
nebjsto |
Не обязательно |
Нет |
|
|
nebjdost |
Ввод |
Нет |
|
|
nebjana пит |
Ввод |
Да |
|
|
ncb_cmdjcplt |
Вывод |
Нет |
|
|
neb |
event |
Ввод |
Нет |
|
|
|
|
|
|
КомандаNCBUNLINK
Команда отменяет привязку к адаптеру. Предусмотрена для совместимости с ранними версиями NetBIOS и на платформах Win32 не оказывает эффекта.
П Р И Л О Ж Е Н И Е
Вспомогательныефункции IP
i
В этом приложении мы опишем некоторые новые API-функции для получения информации и настройки параметров протокола IP. Эти функции позволяют программно использовать возможности следующих стандартных IP-
уТИЛИТ:
•Ipconfig.exe (или Winipcfg.exe в Microsoft Windows 95) — выводит информацию о конфигурации IP и позволяет освобождать и обновлять IPадреса, выделенные DHCP;
•Netstat.exe — выводит таблицу TCP-соединений, таблицу прослушиваемых портов UDP и статистику протокола IP;
•Route.exe — выводит и редактирует таблицы маршрутизации;
ШАгр.ехе — выводит и редактирует используемые протоколом разрешения адресов (address resolution protocol, ARP) таблицы трансляции IP-ад- ресов в физические.
Функции, описанные в этом приложении, доступны в основном в Windows 98 и Windows 2000, некоторые — и в Windows NT 4 с Service Pack 4 (или более поздним), но ни одна не доступна в Windows 95. При обсуждении каждой функции будет указываться соответствующая платформа. Прототипы для всех функций, описанных в приложении, определены в файле Iphlpapi.h. При компоновке приложения необходимо подключать библиотеку Iphlpapi.lib.
ВозможностиутилитыIpconfig
Утилита Ipconfig поставляет два блока информации: о конфигурации IP и о параметрах IP для каждого сетевого адаптера, установленного на данном компьютере. Чтобы получить информацию о конфигурации IP, воспользуйтесь функцией GetNetworkParams:
DWORD GetNetworkParams( PFIXED_INFO pFixedlnfo, PULONG pOutBufLen
);
Параметр pFixedlnfo — указатель на буфер, куда будет помещена структура FIXED JNFO с информацией о конфигурации IP. Параметр pOutBufLen — указатель на переменную, задающую размер буфера, который передается через первый параметр. Если этого размера окажется не достаточно, функция
550 Приложение В Вспомогательные функции IP
GetNetworkParams вернет значение ERROR_BUFFER OVERFLOW и определит значение параметра pOutBuJLen, равным необходимому размеру буфера.
Структура FIXED JNFO имеет следующий вид:
s
typedef struct |
|
|
||
{ |
|
|
|
|
|
char |
|
HostName[MAX_HOSTNAHE_LEN + 4] ; |
|
|
char |
t |
DomainName[MAX_DOMAIN_NAME_LEN + 4 ] ; |
|
|
PIP_ADDR_STRING CurrentDnsServer; |
|
||
|
IP_ADDR_STRING DnsServerList; |
|
||
|
UINT |
|
NodeType; |
|
|
char |
|
ScopeId[MAX_SCOPE_ID_LEN + 4]; |
|
|
UINT |
|
EnableRouting; |
|
|
UINT |
|
EnableProxy; |
|
|
UINT |
|
EnableDns; |
|
} FIXEO_INFO, |
*PFIXED_INFO; |
|
||
|
Она содержит следующие поля. |
|
||
• |
HostName — имя данного компьютера, определенное системой DNS. |
|
||
Ш DomainName — домен DNS, к которому относится компьютер. |
# |
|||
Ш |
CurrentDnsServei— IP-адрес текущего DNS-сервера. |
|
||
• |
DnsServerList |
— связанный список, содержащий используемые данным |
||
|
компьютером DNS-серверы. |
|
IINodeType — способ, которым система распознает имена NetBIOS в сети
сIP. Вот список его возможных значений:
Ш BROADCASTNODETYPE — разрешение имен NetBIOS типа Ь-узел; система использует IP-широковещание для регистрации и разрешения имен NetBIOS;
И PEER_TO_PEER_NODETYPE — разрешение имен NetBIOS типа р-узел; система использует соединение «точка-точка» с сервером имен NetBIOS (например, WINS) для регистрации и разрешения имен компьютеров в IP-адреса;
К MIXEDNODETYPE — разрешение имен NetBIOS типа m-узел (mixed node, узел смешанного типа), при котором система использует оба описанных выше способа: сначала метод b-узла, если он не срабатывает, то метод р-узла;
• HYBRIDNODETYPE — разрешение имен NetBIOS типа h-узел (hybrid node, гибридный узел); система также использует оба способа, но сначала — метод р-узла, а если он не срабатывает, то метод Ь-узла.
• Scopeld — задает строку, добавляемую к имени NetBIOS для логического объединения двух и более компьютеров. Это необходимо для соединения NetBIOS по протоколу TCP/IP.
Я EnableRouting — указывает, будет ли данная система осуществлять маршрутизацию IP-пакетов между сетями, к которым подключена.
Ш EnableProxy — указывает, будет ли система работать в сети как проксиагент системы WINS. Этот агент отвечает на широковещательные запро-
Приложение В Вспомогательные функции IP |
551 |
Я сы по именам, распознанными WINS, и позволяет сетям из компьютеров b-узлов соединяться с серверами в других подсетях, зарегистрированных
в WINS.
•EnableDns — указывает, будет ли NetBIOS обращаться к DNS с именами, которые не разрешаются с помощью WINS, рассылки или файла LMHOSTS
Поле DnsServerList структуры FIXED JNFO — это структура IP_ADDR STRING,
представляющая начало связанного списка IP-адресов:
typedef struct _IP_ADDR_STRING |
|
|
ВПК |
|
|
|
|
||
|
struct _IP_ADDR_STRING« Next; |
|
|
|
* |
IP_ADDRESS_STRING |
IpAddress; |
|
i, Q^ |
E |
IP_MASK_STRING |
IpMask; |
|
|
|
DWORD |
Context; |
4*' |
^\_41 ' |
} |
IP_ADDR_STRING, *PIP_ADDR_STRING; |
fry, |
яу, |
Поле Next содержит IP-адрес следующего в этом списке DNS-сервера. Если значение поля — NULL, то это означает конец списка. Поле IpAddress — строка символов, в которой IP-адрес представлен в десятично-точечной нотации Поле IpMask — строка символов, в которой содержится маска подсети, соответствующая IP-адресу в поле IpAddress. Последнее поле — Context, связывает данный IP-адрес с уникальным для данной системы кодом.
Утилита Ipconfig.exe также получает информацию о конфигурации IP для конкретного сетевого оборудования. Это может быть адаптер Ethernet или даже адаптер удаленного доступа RAS. Информацию об адаптере дает функция GetAdaptersInfo:
DWORD GetAdaptersInfo ( |
цщ, |
% |
PIP_ADAPTER_INFO pAdapterlnfo, |
„ |
.„' |
PULONG pOutBufLen |
' *"' |
Л |
Параметр pAdapterlnfo — указатель на заранее размещенный в приложении буфер, в который будет помещена структура ADAPTER JNFO с информацией о конфигурации адаптера Параметр pOutBufLen должен содержать указатель на переменную, задающую размер этого буфера. Если размер не достаточен, функция GetAdaptersInfo вернет значение ERRORBUFFERJDVERFLOW
и передаст в параметре pOutBufLen требуемый размер буфера.
Структура IP ADAPTER JNFO — это, фактически, список структур, содержащих информацию о настройках IP для каждого доступного на данном компьютере сетевого адаптера:
typedef struct _IP_ADAPTER_INFO
struct _IP_ADAPTER_INFO* Next;
DWORD |
Combolndex; |
char |
AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]; |
char |
Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]; |
UINT |
AddressLength; |
BYTE |
Address[MAX_ADAPTER_ADDRESS_LENGTH]; |
Приложение В Вспомогательные функции IP |
553 |
Я SecondatyWitisServer — список из одного пункта, содержащий IP-адрес используемого дополнительного WINS-сервера.
В LeaseObtained — время получения аренды IP-адреса, выделенного DHCPсервером.
ШLeaseExpires — дата окончания срока аренды IP-адреса.
Освобождение и обновление IP-адресов
Утилита Ipconfig.exe может освобождать и обновлять IP-адреса с помощьк • параметров командной строки: /release и /renew. Для программного осво бождения IP-адреса служит функция IPReleaseAddress:
DWORD IpReleaseAddress (
PIP_ADAPTER_INDEX_MAP Adapterlnfo
Для программного обновления IP-адреса применяется функция IPRenew Address:
DWORD IpRenewAddress (
PIP_ADAPTER_INDEX_MAP Adapterlnfo
Единственный параметр этих функций — Adapterlnfo, структура IP ADAPTER JNDEX_MAP, идентифицирующая адаптер, для которого надо освободить
или обновить адрес |
„^ . v., |
„ , » aj |
typedef struct _IP_ADAPTER_INDEX_MAP |
) |
|
ULONG Index; |
|
|
WCHAR Name[MAX_ADAPTER_NAME]; |
|
|
}IP_ADAPTER_INDEX_MAP, |
*PIP_ADAPTER_INDEX_MAP; |
|
Структура IP ADAPTER JNDEX MAP содержит следующие поля.
Ж Index — внутренний код сетевого интерфейса, присвоенный данному адаптеру;
К Name — название адаптера.
Структура IP_ADAPTER_INDEX_MAP для конкретного адаптера может быть получена с помощью функции Getlnterfacelnfo:
DWORD Getlnterfacelnfo (
IN PIP_INTERFACE_INFO plfTable,
OUT PULONG dwOutBufLen
Параметр plfTable — это указатель на буфер IPJNTERFACEJNFO, выделенный в приложении для информации об интерфейсе. Параметр dwOutBufLen — указатель на переменную, задающую размер этого буфера Если размер недостаточен, функция Getlnterfacelnfo вернет значение ERRORJNSUFFICIENTBUFFER
и передаст в параметре dwOutBufLen требуемый размер буфера.
Приложение В Вспомогательные функции IP |
555 |
пьютера. Функции для получения этой информации работают не только в Windows 98 и Windows 2000, но также в Windows NT 4 с Service Pack 4 и последующих версиях.
Получение таблицы ТСР-соединений
Эта информация выводится на экран при запуске утилиты Netstat.exe с параметрами -р tcp -а. Чтобы получить эти данные программно, воспользуйтесь функцией GetTcpTable-.
DWORD GetTcpTable(
PMIBJXPTABLE pTcpTable,
PDWORD pdwSize,
BOOL bOrder
Параметр pTcpTable — указатель на буфер MIBTCPTABLE, в который будет помещена информация о TCP-соединениях. Параметр pdwSize — указатель на переменную, задающую размер этого буфера. Если размера буфера не достаточно, функция передаст в этом параметре требуемый размер. Параметр bOrder указывает, нужно ли сортировать информацию.
Возвращаемая структура MIBJTCPTABLE имеет вид:
typedef struct MIB_TCPTABLE |
! H < |
|
DWORD dwNumEntries; |
|
|
MIB_TCPROW table[ANY_SIZE]; |
|
|
} MIB_TCPTABLE, *PMIB_TCPTABLE; |
|
|
Она содержит следующие поля: |
|
' Ь ч |
Ж dwNumEntries — количество строк в поле table; |
Mi |
|
|
Ш table — указатель на массив структур типа MIBTCPROW, содержащих информацию о ТСР-соединениях.
Структура MIBJTCPROW содержит информацию о парах IP-адресов, образующих ТСР-соединение:
typedef struct _MIB_TCPROW
<
DWORD dwState; DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwRemoteAddr;
DWORDdwRemotePort;
} MIB_TCPROW, •PMIBJXPROW;
Эта структура содержит следующие поля.
Ш dwState — состояние данного TCP-соединения. Может принимать значения:
•MIBTCP STATE CLOSED — CLOSED;
ШMIBTCP STATE CLOSING - CLOSING;
Приложение В Вспомогательные функции IP |
557 |
typedef struct _MIB_UDPROW
{
DWORD dwLocalAddr;
DWORDdwLocalPort;
} MIBJJDPROW, * PMIB_UDPROW; i H i ^ j r *щ*
Она содержит следующие поля:
•dwLocalAddr — локальный IP-адрес.
•dwLocalPort — локальный IP-порт.
Получениестатистикио протоколе IP
Статистическую информацию выводит утилита Netstat.exe с параметром -s. Ее можно получить также программно с помощью функций GetlpStatistics, GetlcmpStatistics, GetTcpStatistics и GetUdpStatistics. Функция GetlpStatistics по-
лучает статистику IP для данного компьютера: |
|
s»« .. |
• «.I |
DWORDGetIpStatistics( |
|
PMIB_IPSTATSpStats |
|
) ; |
|
Параметр pStats — это указатель на структуру MIBJPSTATS, куда помещается статистика IP:
typedef struct _MIB_IPSTATS
{ |
- v |
DWORD |
dwForwarding; |
DWORD |
dwDefaultTTL; |
DWORD |
dwInReceives; |
DWORD |
dwInHdrErrors; |
DWORD |
dwInAddrErrors; |
DWORD |
dwForwDatagrams; |
DWORD |
dwInUnknownProtos; |
DWORD |
dwInDiscards; |
DWORD |
dwInDelivers; |
DWORD |
dwOutRequests; |
DWORD |
dwRoutingDiscards; |
DWORD |
dwOutDiscards; |
DWORD |
dwOutNoRoutes; |
DWORD |
dwReasmTimeout; |
DWORD |
dwReasmReqds; |
DWORD |
dwReasmOks; |
DWORD |
dwReasmFails; |
DWORD |
dwFragOks; |
DWORD |
dwFragFails; |
DWORD |
dwFragCreates; |
DWORD |
dwNumlf; |
DWORD |
dwNumAddr; |
DWORD |
dwNumRoutes; |
} HIB_IPSTATS, *PMIB_IPSTATS;