В Windows 9x была очень удобная и полезная утилита WinIPConfig, которая отображала параметры сети. С помощью этой утилиты легко можно было узнать IP-адрес каждого сетевого устройства или МАС-адрес.
Сетевой МАС-адрес является уникальным и прошит в памяти сетевого устройства. Это свойство МАС-адреса стали использовать для обеспечения безопасности или защиты программ. Если в компьютере есть сетевая карта, то ее уникальный номер получить достаточно просто.
Для работы с параметрами сети используется библиотека IPHlpApi.lib. Давайте рассмотрим пример, и на его основе я познакомлю вас с самыми интересными функциями.
Создайте новое приложение MFC-Application на базе диалогового окна. Расположите в главном окне пять полей Edit Control, один List Box и кнопку с надписью Get info. Окно, которое получилось у меня, вы можете увидеть на рис. 5.1.
Рис. 5.1. Окно будущей программы VisualIPConfig
Для полей ввода создайте следующие переменные: eHostName, DNSServers, eNodeType, eIPRouting, eWinsProxy. Для списка введите переменную eAdaptersInfo.
Сетевых устройств может быть несколько, поэтому информация о них будет выводиться в список, а общая информация будет отображаться в полях ввода.
Создайте обработчик события BN_CLICKED для кнопки (для этого можно просто дважды щелкнуть по ней) и в него добавьте содержимое листинга 5.1. Я советую набрать код вручную, а не использовать пример с диска.
Листинг 5.1. Определение параметров сетевой карты |
PIP_ADAPTER_INFO pAdapterInfo, pAdapter; ULONG iAdapterInfo; PIP_ADDR_STRING chAddr;
CString Str; TCHAR lpszText[1024]; int iErr;
if ((iErr = GetNetworkParams(NULL, &iFixedInfo)) != 0) { if (iErr != ERROR_BUFFER_OVERFLOW) { AfxMessageBox("GetNetworkParams failed"); return; } }
if ((pFixedInfo=(PFIXED_INFO)GlobalAlloc(GPTR, iFixedInfo))==NULL) { AfxMessageBox("Memory allocation error"); return; }
if (GetNetworkParams(pFixedInfo, &iFixedInfo) != 0) { AfxMessageBox("GetNetworkParams failed"); return; }