0 / 0 / 0
Регистрация: 31.12.2017
Сообщений: 2
1

Вывести на экран информацию сетевого адаптера — IP адрес, Gateway, имя адаптера. WinAPI

03.01.2019, 19:23. Показов 4216. Ответов 4
Метки нет (Все метки)

Здравия желаю! По тз начал изучать винапи. Буквально недавно занялся плюсами и пока плохо разбираюсь во всем, но сделать нужно. В общем пытался гуглить, в основном перенаправляют на тему майкрософта с библиотекой iphlpapi.h. В разделе IP Helper почитал немного и нашел кусок, который подходит к моему заданию. Скопировал слово в слово себе в Dev cpp (на нем пишу, остальные почему то на моем компьютере очень глючат). Но загвоздка в том, что все это дело не компилируется. Куча ошибок, однако исправить их у меня знаний не хватает, ибо не особо понимаю что там происходит вообще. Помогите разобраться и исправить, чтобы работало все!)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
 
#include <windows.h>
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
 
 
 
 
int main() {
    
    
    
    IP_ADAPTER_INFO *pAdapterInfo;
    ULONG ulOutBufLen;
    DWORD dwRetVal;
    pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );
    ulOutBufLen = sizeof(IP_ADAPTER_INFO);
    if (GetAdaptersAddresses( pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS) {
        free (pAdapterInfo);
        pAdapterInfo = (IP_ADAPTER_INFO *) malloc ( ulOutBufLen );
}
 
    if ((dwRetVal = GetAdaptersAddresses( pAdapterInfo, &ulOutBufLen)) != ERROR_SUCCESS) {
        printf("GetAdaptersInfo call failed with %d\n", dwRetVal);
}
 
 
    PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
    while (pAdapter) {
        printf("Adapter Name: %s\n", pAdapter->AdapterName);
        printf("Adapter Desc: %s\n", pAdapter->Description);
        printf("\tAdapter Addr: \t");
        for (UINT i = 0; i < pAdapter->AddressLength; i++) {
            if (i == (pAdapter->AddressLength - 1))
                printf("%.2X\n",(int)pAdapter->Address[i]);
            else
                printf("%.2X-",(int)pAdapter->Address[i]);
        }
        printf("IP Address: %s\n", pAdapter->IpAddressList.IpAddress.String);
        printf("IP Mask: %s\n", pAdapter->IpAddressList.IpMask.String);
        printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
        printf("\t***\n");
        if (pAdapter->DhcpEnabled) {
            printf("\tDHCP Enabled: Yes\n");
            printf("\t\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.String);
        }
        else
            printf("\tDHCP Enabled: No\n");
    
        pAdapter = pAdapter->Next;
    }
}
Миниатюры
Вывести на экран информацию сетевого адаптера — IP адрес, Gateway, имя адаптера. WinAPI  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.01.2019, 19:23
Ответы с готовыми решениями:

имя рабочей группы, тип сетевого адаптера, MAC-адрес
Не получается найти команды в cmd: имя рабочей группы тип сетевого адаптера MAC-адрес

Компьютеру не назначен адрес от сети для сетевого адаптера
Народ просветите кому не лень, заранее спасибо. Почему на Windows 7 после выхода из спящего режима...

Как из Windows NT/2000 посмотреть MAC-адрес сетевого адаптера?
Добрый день! Есть вопрос. Как из Windows NT/2000 посмотреть MAC-адрес сетевого адаптера? В Windows...

Virtual Box. Почему не получается выбрать имя сетевого адаптера?
Подскажите как можно исправить следующую проблему: захожу в настройки виртуальной машины, в раздел...

4
Модератор
Эксперт CЭксперт С++
5108 / 4541 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
03.01.2019, 20:12 2
Kazadon, вместо GetAdaptersAddresses надо вызывать GetAdaptersInfo (в двух местах )

Добавлено через 2 минуты
И добавить библиотеку
C++
1
#pragma comment(lib, "IPHLPAPI.lib")
1
0 / 0 / 0
Регистрация: 31.12.2017
Сообщений: 2
03.01.2019, 20:48  [ТС] 3
GetAdaptersInfo стояло сначала, но выдавало: (.text+0x2f): undefined reference to `GetAdaptersInfo'. Это я потом по совету майкрософта поменял. Оказывается неправильно поменял ). В общем я через командную строку откомпилировал, все работает с Info, но я просто не могу понять почему в дэв цпп прога не запускается, а через командную все норм откомпилировалось и запустилось... Расскажите плиз)
0
Модератор
Эксперт CЭксперт С++
5108 / 4541 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
04.01.2019, 11:49 4
Цитата Сообщение от Kazadon Посмотреть сообщение
undefined reference
Это есть неопределенная ссылка. Т.е. линковщик не нашел, где взять GetAdaptersInfo. Строка
C++
1
#pragma comment(lib, "IPHLPAPI.lib")
как раз и говорит, что надо включить указанную библиотеку, где и находится GetAdaptersInfo.
Почему не срабатывает в devcpp не скажу, не пользуюсь. Могу только посоветовать добавить IPHLPAPI.lib в самом проекте. Там, где перечисляются kernel32.lib, user32.lib, gdi32.lib и другие.
1
Software Developer
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,318
04.01.2019, 23:11 5
Dev-C++ содержит в себе компилятор MinGW.
Если компилировать через командную строку этот код, этим компилятором, то нужно добавить -liphlpapi
То есть
Код
g++ main.cpp -o main.exe -liphlpapi
Ну а если работать через среду, то настройках проекта, в свойствах линкера нужно добавить то ли -liphlpapi то ли выбрать файл libiphlpapi.a , точно сказать не могу, так как в этой среде давно не работал.
Цитата Сообщение от liv Посмотреть сообщение
Могу только посоветовать добавить IPHLPAPI.lib
У всех библиотек для компилятора MinGW есть префикс lib и расширение файла .a
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.01.2019, 23:11
Помогаю со студенческими работами здесь

Проблемы сетевого адаптера ?
На сервере DELL стоит ОС WIN2003 SERVER, 2 СЕТЕВЫХ АДАПТЕРА Intel (R) PRO/1000 MT Network...

Апгрейд сетевого адаптера
Здравствуйте Ноутбук Dell Studio 1537, сетевой адаптер dell wireless 1397 wlan mini-card не...

Настройки сетевого адаптера
Здравствуйте! Я очень часто подключаю к компьютеру PS3 по RJ45 разъёму, интернет тоже подключен...

Отключение сетевого адаптера
Здравствуйте. Есть проблема-нужен батник или команда в консоли, которая отключает сетевой адаптер....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru