- •Лабораторная работа №1
- •1.1. Цель и содержание работы
- •1.2. Основные конструкции языка c
- •Int X; // Переменная типа int
- •Int list[20]; // Массив целых величин
- •If (условие) оператор1 else оператор2
- •1.3. Функции ввода-вывода языка с
- •1.4. Создание консольного приложения
- •1.5. Меню интегрированной среды
- •1.6. Компиляция, отладка и запуск программы
- •1.7. Упражнения
- •Лабораторная работа №2
- •2.1. Цель и содержание работы
- •2.2. Использование функций библиотеки ipHlpApi
- •2.3. Упражнения
- •Int iErr; // Код ошибки
- •Лабораторная работа №3
- •3.1. Цель и содержание работы
- •3.2. Библиотека функций Winsock2
- •3.3. Структуры данных для работы с сокетами
- •3.4. Приложение-сервер
- •3.5. Приложение-клиент
- •3.6. Упражнения
- •Лабораторная работа №4
- •4.1. Цель и содержание работы
- •4.2. Функции для работы по протоколу udp
- •4.3. Приложение-сервер
- •4.4. Приложение-клиент
- •4.5. Упражнения
- •Лабораторная работа №5
- •5.1. Цель и содержание работы
- •5.2. Сканирование портов
- •5.3. Функции для определения состояния портов
- •5.4. Упражнения
- •Лабораторная работа №6
- •6.1. Цель и содержание работы
- •6.2. Сниффер
- •6.3. Упражнения
- •Библиографический список
2.3. Упражнения
Требуется создать новое консольное приложение, а затем ввести, скомпилировать и запустить программу, приведенную в листинге 2.1.
Листинг 2.1. Программа для просмотра данных сетевых адаптеров
#include "stdafx.h"
#include <windows.h>
#include <iphlpapi.h>
int main(int argc, _TCHAR* argv[])
{
PFIXED_INFO pFixedInfo;
ULONG iFixedInfo;
PIP_ADAPTER_INFO pAdapterInfo, pAdapter;
ULONG iAdapterInfo;
PIP_ADDR_STRING chAddr;
Int iErr; // Код ошибки
// Определить объем памяти, необходимой для хранения
// структуры FIXED_INFO
iErr = GetNetworkParams(NULL, &iFixedInfo);
if ((iErr!= 0) && (iErr != ERROR_BUFFER_OVERFLOW))
{
printf("GetNetworkParams failed\n");
getchar(); return -1;
}
// Выделить память
if ((pFixedInfo=
(PFIXED_INFO)GlobalAlloc(GPTR, iFixedInfo))==NULL)
{
printf("Memory allocation error\n");
getchar(); return -2;
}
// Записать данные в выделенную область памяти
if (GetNetworkParams(pFixedInfo, &iFixedInfo) != 0)
{
printf("GetNetworkParams failed\n");
getchar(); return -3;
}
printf("IPRouting: %s\n",pFixedInfo->EnableRouting ?
"Enabled" : "Disabled");
printf("WinsProxy: %s\n",pFixedInfo->EnableProxy ?
"Enabled" : "Disabled");
// Определить объем памяти, необходимой для хранения
// структуры IP_ADAPTER_INFO
iAdapterInfo = 0;
iErr=GetAdaptersInfo(NULL, &iAdapterInfo);
if ((iErr!= 0) && (iErr != ERROR_BUFFER_OVERFLOW))
{
printf("GetAdaptersInfo failed\n");
getchar(); return -4;
}
// Выделить память
if ((pAdapterInfo = (PIP_ADAPTER_INFO)
GlobalAlloc(GPTR,iAdapterInfo)) == NULL)
{
printf("Memory allocation error\n");
getchar(); return -5;
}
// Записать данные в выделенную область памяти
if (GetAdaptersInfo(pAdapterInfo, &iAdapterInfo) != 0)
{
printf("GetAdaptersInfo failed\n");
getchar(); return -6;
}
pAdapter = pAdapterInfo;
printf("===========================\n");
// Обработка списка адаптеров
while (pAdapter)
{
// Определить тип адаптера
switch (pAdapter->Type)
{
case MIB_IF_TYPE_ETHERNET:
printf("Ethernet adapter: \n"); break;
case MIB_IF_TYPE_PPP:
printf("PPP adapter: \n"); break;
case MIB_IF_TYPE_LOOPBACK:
printf("Loopback adapter: \n"); break;
case MIB_IF_TYPE_TOKENRING:
printf("Token Ring adapter: \n"); break;
case MIB_IF_TYPE_FDDI:
printf("FDDI adapter: \n"); break;
case MIB_IF_TYPE_SLIP:
printf("Slip adapter: \n"); break;
case MIB_IF_TYPE_OTHER:
default: printf("Other adapter: \n");
}
// Вывести назваание адаптера
printf("%s\n",pAdapter->AdapterName);
// Вывести описание адаптера
printf("Description: %s\n",pAdapter->Description);
// Вывести MAC-адрес побайтно в шестнадцатеричном коде
printf("Physical Address: ");
for (UINT i=0; i<pAdapter->AddressLength; i++)
printf("%.2X",(int)pAdapter->Address[i]);
printf("\n");
// Проверить, резрешено ли использование DHCP
printf("DHCP Enabled: %s\n",
(pAdapter->DhcpEnabled ? "yes" : "no"));
// Вывести все IP-адреса и маски адаптера
chAddr = &(pAdapter->IpAddressList);
while(chAddr)
{
printf("IP Address: %s\n",chAddr->IpAddress.String);
printf("Subnet Mask: %s\n",chAddr->IpMask.String);
chAddr = chAddr->Next;
}
// Вывести шлюз по умолчанию
printf("Default Gateway: %s\n",
pAdapter->GatewayList.IpAddress.String);
// Вывести имя DHCP-сервера
printf("DHCP Server: %s\n",
pAdapter->DhcpServer.IpAddress.String);
printf("===========================\n");
pAdapter = pAdapter->Next;
getchar();
}
return 0;
}
Для компиляции примера необходимо открыть свойства проекта и в разделе Linker/Input добавить библиотеку IPHlpApi.lib в свойство Additional Dependencies.
Для каждого установленного на компьютере сетевого адаптера программа выводит полученные значения параметров, а затем ожидает нажатия любой клавиши на клавиатуре.