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

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


Скачать 2.88 Mb.
НазваниеЭ. Джонс, Д. Оланд
АнкорПрограммирование в сетях Windows.pdf
Дата12.10.2017
Размер2.88 Mb.
Формат файлаpdf
Имя файлаПрограммирование в сетях Windows.pdf
ТипКнига
#9346
страница46 из 50
1   ...   42   43   44   45   46   47   48   49   50
яу,
Поле 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;
1   ...   42   43   44   45   46   47   48   49   50


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