Программирование в сетях Windows. Э. Джонс, Д. Оланд
Скачать 2.88 Mb.
|
яу, Поле 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]; 552 Приложение В Вспомогательные функции IP DWORD Index; UINT Type; UINT DhcpEnabled; d PIP_ADDR_STRING CurrentlpAddress; ,. _ IP_ADDR_STRING IpAddressList; IP_ADDR_STRING GatewayList; "* IP_ADDR_STRING DhcpServer; ; x fc BOOL HaveWins; гм t i IP_ADDR_STRING PrimaryWinsServer; IP_ADDR_STRING SecondaryWinsServer; ЮА.' timejt LeaseObtained; > time_t LeaseExpires; } IP_ADAPTER_INFO, *PIP_ADAPTER_INFO; Структура IP_ADAPTER_INFO содержит следующие поля. • Next — следующий адаптер в буфере. Значение NULL означает к о н е ^ списка. Ш Combolndex — не используется и задается равным 0. • AdapterName — название адаптера. > • Description — краткое описание адаптера. Ш AddressLength — размер физического адреса адаптера в байтах. Ж Address — физический адрес адаптера. • Index — уникальный код сетевого интерфейса, присвоенный данному адаптеру. • Туре — число, соответствующее типу адаптера: ' • MIBIFTYPEETHERNET — адаптер Ethernet; 3 • MIBJF TYPEFDDI - адаптер FDDI; Ш MIB IFTYPELOOPBACK — адаптер-петля; ( • MIBJF TYPE6THER — иной тип адаптера; • MIBJF TYPE_PPP - адаптер РРР; • MIBJF TYPEJSIIP — адаптер SLIP; И MIBJFJYPEJTOKENRING — адаптер Token Ring. Ш DhcpEnabled — показывает, задействована ли служба DHCP для этого адаптера. Ш CurrentlpAddress — не используется и равен NULL. Ш IpAddressList — список назначенных данному адаптеру IP-адресов. • GatewayList — список IP-адресов шлюза по умолчанию. • DhcpServer — список из одного пункта, содержащий IP-адрес использу- емого DHCP-сервера. • HaveWins — показывает, использует ли этот адаптер WINS-сервер. • PrimaryWinsServer — список из одного пункта, содержащий IP-адрес используемого основного WINS-сервера. Приложение В Вспомогательные функции 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 ADAP- TER JNDEX_MAP, идентифицирующая адаптер, для которого надо освободить или обновить адрес „^ . v ., „ , » a j 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 требуемый размер буфера. 5 5 4 Приложение В Вспомогательные функции IP Структура IPJNTERFACEJNFO определена так: typedef struct _IP_INTERFACE_INFO { ЧМ* LONG NumAdapters; . IP_ADAPTER_INDEX_MAP Adapter[1]; ю , } IP_INTERFACE_INFO,*PIP_INTERFACE_INFO; Она содержит следующие поля: Ш NumAdapters — количество адаптеров в поле Adapter, Ш Adapter — массив структур IP_ADAPTER_INDEX_MAP. Получив структуру IP_ADAPTER_INDEX_MAP для конкретного адаптера, далее можно освободить или обновить выделенный DHCP-сервером IP-ад- рес с помощью функций IPReleaseAddress и IPRenewAddress. Изменение IP-адреса Утилита Ipconfig.exe не позволяет изменить IP-адрес для сетевого адаптера (кроме случая, когда используется служба DHCP). Однако имеются две вспо- могательные IP-функции -— AddlpAddress и DeletelpAddress, позволяющие до- бавлять и удалять IP-адреса для адаптера. Применение этих функций требу- ет знания внутренних кодов адаптеров и контекстных кодов IP-адресов. В Windows каждый сетевой адаптер имеет уникальный числовой код (ID), a каждый IP-адрес — уникальный контекстный код. Эти коды можно выяснить, вызвав функцию GetAdapterslnfo. Функция AddlpAddress определена так: DWORD AddlPAddress ( IPAddr Address, IPMask IpMask, DWORD Iflndex, PULONG NTEContext, PULONG NTEInstance Параметр Address — это IP-адрес, добавляемый в виде длинного целого без знака. IpMask — маска подсети того же типа. Iflndex — порядковый номер адаптера, для которого добавляется адрес. Параметр NTEContext получает контекстный код, соответствующий добавляемому адресу, а параметр NTEIns- tance — соответствующий этому адресу код экземпляра. Для программного удаления IP-адреса служит функция DeletelpAddress: DW3RD DeletelPAddress ( ULONG NTEContext ); Параметр NTEContext — это контекстный код, соответствующий удаляе- мому IP-адресу (его можно получить, вызвав функцию GetAdapterslnfo). Возможности утилиты Netstat Э"'а утилита выводит информацию о таблице TCP-соединений, таблицу про- ст ушиваемых портов UDP, а также статистику протокола IP для данного ком- Приложение В Вспомогательные функции 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; Она содержит следующие поля: ' Ь ч Mi Ж dwNumEntries — количество строк в поле table; Ш table — указатель на массив структур типа MIBTCPROW, содержащих информацию о ТСР-соединениях. Структура MIBJTCPROW содержит информацию о парах IP-адресов, обра- зующих ТСР-соединение: typedef struct _MIB_TCPROW < DWORD dwState; DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwRemoteAddr; DWORD dwRemotePort; } MIB_TCPROW, •PMIBJXPROW; Эта структура содержит следующие поля. Ш dwState — состояние данного TCP-соединения. Может принимать значе- ния: • MIBTCP STATE CLOSED — CLOSED; Ш MIBTCP STATE CLOSING - CLOSING; 5 5 6 Приложение В Вспомогательные функции IP • MIB TCP STATE CLOSE WAIT — CLOSE WAIT; ш Ш MIBTCP STATE DELETE TCB — DELETE; ™" Ш MIB TCP STATE ESTAB — ESTABLISHED; Ш MIB TCP STATE FIN WAIT 1 — FIN WAITl;f Ш MIB TCP STATEFINWAIT2 - FIN WAIT2; ^ ;< Ж MIB TCP STATE LAST ACK — LAST ACK; l Ш MIB TCP STATE LISTEN — LISTENING; ! • MIB TCP STATE SYNRCVD — SYN RCVD; • MIB TCP STATE SYNSENT- SYN SENT; • MIBTCPSTATE TIME WAIT - TIME WAIT; Ш dwLocalAddr — локальный IP-адрес данного соединения. II dwLocalPort — локальный порт данного соединения. Ш. dwRemoteAddr — внешний IP-адрес данного соединения. • dwRemotePort — внешний порт данного соединения. Получение таблицы прослушиваемых портов UDP Эта информация выводится на экран при запуске утилиты Netstat.exe с па>- раметрами -р udp -а. Чтобы получить эти данные, программно, воспользуй^- тесь функцией GetUdpTable-. DWORD GetUdpTable( PMIBJJDPTABLE pUdpTable, * PDWORD pdwSize, rj BOOL border ); X l " Параметр pUdpTable — указатель на буфер MIBJJDPTABLE, в который бу- дет помещена информация о прослушиваемых портах UDP. Параметр pdw- Size — указатель на переменную, задающую размер этого буфера. Если раз- мера буфера не достаточно, функция передаст в этом параметре требуемый размер. Параметр bOrder указывает, будет ли информация отсортирована. Возвращаемая структура MIBJJDPTABLE имеет вид- typedef struct _MIB_UDPTABLE { DWORD dwNumEntrles; MIBJJDPROW tabletANY_SIZE]; } MIB UDPTABLE, * PMIBJJDPTABLE; 4* { Она содержит следующие поля: Ш dwNumEntries — количество строк в поле table; Ш table — указатель на массив структур типа MIBJJDPROW, содержащих информацию о прослушиваемых портах UDP. Структура MIBJJDPROW содержит IP-адрес, через который UDP ожидает приема дейтаграмм- Приложение В Вспомогательные функции IP 557 typedef struct _MIB_UDPROW { DWORD dwLocalAddr; DWORD dwLocalPort; } MIBJJDPROW, * PMIB_UDPROW; i H i ^ j r *щ* Она содержит следующие поля: • dwLocalAddr — локальный IP-адрес. • dwLocalPort — локальный IP-порт. Получение статистики о протоколе IP Статистическую информацию выводит утилита Netstat.exe с параметром -s. Ее можно получить также программно с помощью функций GetlpStatistics, GetlcmpStatistics, GetTcpStatistics и GetUdpStatistics. Функция GetlpStatistics по- лучает статистику IP для данного компьютера: s»« .. • «.I DWORD GetIpStatistics( PMIB_IPSTATS pStats ) ; Параметр 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; 5 5 8 Приложение В Вспомогательные функции IP Структура MIBIPSTATS содержит следующие поля: Ш dwForwarding — указывает, включено или нет на данном компьютере IP- перенаправление; Ш dwDefaultTTL — начальное время TTL для отправляемых с данного ком- пьютера дейтаграмм; Ш dwlnReceives — количество полученных дейтаграмм; Ш dwInHdrErrors — количество дейтаграмм, полученных с ошибками в заголовках; • dwIttAddrErrors — количество дейтаграмм, полученных с ошибками в адресах; • dwForwDatagrams — количество перенаправленных дейтаграмм; • dwlriUnknownProtos — количество дейтаграмм, полученных с неизвест- ными протоколами; ' • dwInDiscards — количество отброшенных дейтаграмм; Ш dwInDelivers — количество доставленных дейтаграмм; Ш dwOutRequests — количество дейтаграмм с запросами на вывод; ; ( • dwRoutingDiscards — количество отброшенных маршрутов; , • dtvOutDiscards — количество отброшенных выходных дейтаграмм; * ; • dwOutNoRoutes — количество выходных дейтаграмм без маршрута; Н dwReasmtimeout — максимальное время для приема фрагментирован- ных дейтаграмм; Ш dwReasmReqds — количество дейтаграмм, потребовавших сборки;' • dwReasmOks — количество успешно собранных дейтаграмм; • dwFragFails — количество сбоев при фрагментации дейтаграмм; • dwFragCreates — количество фрагментированных дейтаграмм; • dwNumlf— количество доступных на данном компьютере 1Р-интерфей- СОВ; • divNumAddr — количество IP-адресов, назначенных данному компьютеру; Ш dwNumRoutes — количество маршрутов в таблице маршрутизации. Вторая функция — GetlcmpStatistics, служит для получения статистики протокола Internet Control Message Protocol (ICMP): DWORD GetIcmpStatistics( PMIB_ICMP pStats ); Параметр pStats — указатель на структуру MIBJCMP, куда помещается ста- тистика ICMP: typedef struct _MIB_ICMP { MIBICMPINFO stats; } MIBJXMP, •PMIB.ICMP; Приложение В Вспомогательные функции IP 559 Как видно, MIBICMP содержит структуру MIBICMPINFO-. typedef struct _MIBICMPINFO { MIBICMPSTATS icmpInStats; MIBICMPSTATS icmpOutStats; } MIBICMPINFO; Структура MIBICMPINFO, в свою очередь, содержит две структуры типа MIBICMPSTATS, icmpInStats —- для статистики по входящей информации ICMP и icmpOutStats — для исходящей: typedef struct .MIBICMPSTATS < ;.-• DWORD dwMsgs; DWORD dwErrors; DWORD dwDestUnreachs; '' DWORD dwTimeExcds; DWORD dwParmProbs; « DWORD dwSrcQuenchs; i DWORD dwRedirects; ... . DWORD dwEchos; DWORD dwEchoReps; 1 DWORD dwTimestamps; i DWORD dwTimestampReps; DWORD dwAddrMasks; DWORD dwAddrMaskReps; } MIBICMPSTATS; Структура MIBICMPSTATS содержит следующие поля: • dwMsgs — количество посланных или полученных сообщений; Ш dwErrors — количество произошедших ошибок; • dwDestUnreachs — количество сообщений о том, что адрес не доступе] i; Ш dwTimeExcds — количество превышений сроков; • dwParmProbs — количество сообщений, содержавших неверные пара- метры IP; Ш dwSrcQuencbs — количество просьб снизить скорость; • dwRedirects — количество переадресаций; Ш dwEchos — количество эхо-сообщений ICMP; • |