как сопоставить имя удаленного соединения с именем адаптера?
От: вфкл Россия  
Дата: 10.11.03 10:46
Оценка:
имя адаптера узнаю по GetAdaptersInfo. Получаю что-то вроде
{F0A48EF2-3D17-4B1C-A6F1-2247824DF353}
Как сопоставить это имя с именем активного удаленного соединения?
Например, в ipconfig выдается в виде
Adapter <имя удаленного соединения>
Не подскажите?
Re: как сопоставить имя удаленного соединения с именем адапт
От: adontz Грузия http://adontz.wordpress.com/
Дата: 10.11.03 11:09
Оценка:
Здравствуйте, вфкл, Вы писали:

В>имя адаптера узнаю по GetAdaptersInfo. Получаю что-то вроде

В>{F0A48EF2-3D17-4B1C-A6F1-2247824DF353}
В>Как сопоставить это имя с именем активного удаленного соединения?
В>Например, в ipconfig выдается в виде
В>Adapter <имя удаленного соединения>
В>Не подскажите?

А поле Description ?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: как сопоставить имя удаленного соединения с именем ад
От: вфкл Россия  
Дата: 10.11.03 12:20
Оценка:
Здравствуйте, adontz, Вы писали:


A>А поле Description ?


Там находится примерно следущее — WAN (PPP\SLIP) interface — это и так без этого дескрипшн сказать
Но каким-то же образом ipconfig знает имя удаленного соединения
Re[3]: как сопоставить имя удаленного соединения с именем ад
От: вфкл Россия  
Дата: 10.11.03 12:24
Оценка:
Причем при вызове GetIfTable или GetIfEntry — имя интерфейса в передаваемой структуре не изменяется — хоть бы уж 0 ставили
В GetInterfaceInfo имея интерфесов примерно такие
\\Device\Tcpip_<и дальше идет то же, что и имя адаптера>
Re[3]: как сопоставить имя удаленного соединения с именем ад
От: adontz Грузия http://adontz.wordpress.com/
Дата: 10.11.03 13:08
Оценка:
Здравствуйте, вфкл, Вы писали:

В>Там находится примерно следущее — WAN (PPP\SLIP) interface — это и так без этого дескрипшн сказать

В>Но каким-то же образом ipconfig знает имя удаленного соединения

А другие строковые поля? Где-то обязательно должно быть имя. Так же посмотри функции перечисления, которые возвращают GUID и ИМЯ, можно будет сопоставить.
Вообще покажи значение всех полей структуры.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[4]: как сопоставить имя удаленного соединения с именем ад
От: вфкл Россия  
Дата: 10.11.03 17:56
Оценка:
A>А другие строковые поля? Где-то обязательно должно быть имя. Так же посмотри функции перечисления, которые возвращают GUID и ИМЯ, можно будет сопоставить.
A>Вообще покажи значение всех полей структуры.

да нет там нигде имени. смотрел.
Re[5]: как сопоставить имя удаленного соединения с именем ад
От: вфкл Россия  
Дата: 10.11.03 18:27
Оценка:
вообще, судя по всему, в iphlpapi.dll есть функция NhGetInterfaceNameFromGuid, которая похоже что и занимается сопоставлением. Только у в msdn она не документирована
Re: как сопоставить имя удаленного соединения с именем адапт
От: Romul Россия  
Дата: 11.11.03 22:43
Оценка:
Здравствуйте, вфкл, Вы писали:

В>имя адаптера узнаю по GetAdaptersInfo. Получаю что-то вроде

В>{F0A48EF2-3D17-4B1C-A6F1-2247824DF353}
В>Как сопоставить это имя с именем активного удаленного соединения?
В>Например, в ipconfig выдается в виде
В>Adapter <имя удаленного соединения>
В>Не подскажите?

Кидаю кусок кода, который юзаю сам для получения информации об адаптерах. Работает по идее только на Вин2К. Если ты пользуешь Юникод проект, то
соответственно все мои преобразования можешь выкинуть
//////////CUT//////////////////
char* HostName;
unsigned long Size=1000;

HostName = new char[Size];
if(!GetComputerName(HostName, &Size))
{
m_Error->PutError(0, __FILE__, __LINE__,
"Computer name is too long", 1);
goto ret;
}

unsigned short HostNameUnicode[1000];

if(!MultiByteToWideChar(CP_ACP, 0, HostName, -1, HostNameUnicode, 1000))
{
m_Error->PutError(0, __FILE__, __LINE__,
"Error converting to Unicode", 1);
goto ret;
}

HANDLE hMprConfig;
if(MprConfigServerConnect(HostNameUnicode, &hMprConfig)!=NO_ERROR)
{
int ret=GetLastError();
m_Error->PutError(0, __FILE__, __LINE__,
"Error connecting to the router", 1);
goto ret;
}


IP_ADAPTER_INFO* Adress;
IP_ADAPTER_INFO* AdrInfo;

Adress = new IP_ADAPTER_INFO[100];
AdressSize=sizeof(IP_ADAPTER_INFO)*100;

if(GetAdaptersInfo(Adress, &AdressSize)!=ERROR_SUCCESS)
{
m_Error->PutError(0, __FILE__, __LINE__, "Error enumerating network "\
"adapters. Is there any?", 1);
goto ret;
}
AdrInfo=Adress;


while(AdrInfo!=NULL)
{
char Buffer[1000];
unsigned short AdapterName[1000];
unsigned short FriendlyBuffer[1000];

if(!MultiByteToWideChar(CP_ACP, 0, AdrInfo->AdapterName,
-1, AdapterName, 1000))
{
m_Error->PutError(0, __FILE__, __LINE__,
"Error converting to Unicode", 1);
AdrInfo=AdrInfo->Next;
continue;
}
///Собственно функция ниже и выполняет преобразование GUID адаптера в читаемую форму (но в Юникоде)
if(MprConfigGetFriendlyName(hMprConfig, AdapterName, FriendlyBuffer,
1000)!=NO_ERROR)
{
m_Error->PutError(0, __FILE__, __LINE__, "Error converting adapter "\
"name to a readable form", 1);
// goto ret;
AdrInfo=AdrInfo->Next;
continue;
}
//После вызоыва этой функции Buffer содержит то что тебе нужно
if(!WideCharToMultiByte(CP_ACP, 0, FriendlyBuffer,
-1, Buffer, 1000, NULL, NULL))
{
m_Error->PutError(0, __FILE__, __LINE__,
"Error converting from Unicode", 1);
AdrInfo=AdrInfo->Next;
continue;
}

///Этот кусок не нужен, я запаковываю все в один буфер здесь
int Len=strlen(Buffer)+1;
memcpy(Pointer, &Len, sizeof(int));
Pointer+=sizeof(int);
memcpy(Pointer, Buffer, Len);
Pointer+=Len;

Len=strlen(AdrInfo->IpAddressList.IpAddress.String)+1;
memcpy(Pointer, &Len, sizeof(int));
Pointer+=sizeof(int);
memcpy(Pointer, AdrInfo->IpAddressList.IpAddress.String, Len);
Pointer+=Len;
///////////////////////////////////////////////////////////////////////////

AdrInfo=AdrInfo->Next;
}
Re[2]: как сопоставить имя удаленного соединения с именем ад
От: вфкл Россия  
Дата: 13.11.03 19:20
Оценка:
Здравствуйте, Romul, Вы писали:

R>Кидаю кусок кода, который юзаю сам для получения информации об адаптерах. Работает по идее только на Вин2К. Если ты пользуешь Юникод проект, то

R>соответственно все мои преобразования можешь выкинуть

спасибо!
вобщем, понятно.
только тогда проще пользоваться для моих целей RasGetConnectionStatistics — тоже только с win2k работает, только проще.
а под nt и 98 нет никакого способа выяснить по хендлу активного ras соединения количество переданных/принятых байт и bps?
Re[2]: как сопоставить имя удаленного соединения с именем ад
От: Irenochka_1984_222  
Дата: 07.08.07 16:00
Оценка:
Здравствуйте, Romul, Вы писали:

R>Здравствуйте, вфкл, Вы писали:


В>>имя адаптера узнаю по GetAdaptersInfo. Получаю что-то вроде

В>>{F0A48EF2-3D17-4B1C-A6F1-2247824DF353}
В>>Как сопоставить это имя с именем активного удаленного соединения?
В>>Например, в ipconfig выдается в виде
В>>Adapter <имя удаленного соединения>
В>>Не подскажите?

R>Кидаю кусок кода, который юзаю сам для получения информации об адаптерах. Работает по идее только на Вин2К. Если ты пользуешь Юникод проект, то

R>соответственно все мои преобразования можешь выкинуть
R>//////////CUT//////////////////
R> char* HostName;
R> unsigned long Size=1000;

R> HostName = new char[Size];

R> if(!GetComputerName(HostName, &Size))
R> {
R> m_Error->PutError(0, __FILE__, __LINE__,
R> "Computer name is too long", 1);
R> goto ret;
R> }

R> unsigned short HostNameUnicode[1000];


R> if(!MultiByteToWideChar(CP_ACP, 0, HostName, -1, HostNameUnicode, 1000))

R> {
R> m_Error->PutError(0, __FILE__, __LINE__,
R> "Error converting to Unicode", 1);
R> goto ret;
R> }

R> HANDLE hMprConfig;

R> if(MprConfigServerConnect(HostNameUnicode, &hMprConfig)!=NO_ERROR)
R> {
R> int ret=GetLastError();
R> m_Error->PutError(0, __FILE__, __LINE__,
R> "Error connecting to the router", 1);
R> goto ret;
R> }


R> IP_ADAPTER_INFO* Adress;

R> IP_ADAPTER_INFO* AdrInfo;

R> Adress = new IP_ADAPTER_INFO[100];

R> AdressSize=sizeof(IP_ADAPTER_INFO)*100;

R> if(GetAdaptersInfo(Adress, &AdressSize)!=ERROR_SUCCESS)

R> {
R> m_Error->PutError(0, __FILE__, __LINE__, "Error enumerating network "\
R> "adapters. Is there any?", 1);
R> goto ret;
R> }
R> AdrInfo=Adress;


R> while(AdrInfo!=NULL)

R> {
R> char Buffer[1000];
R> unsigned short AdapterName[1000];
R> unsigned short FriendlyBuffer[1000];

R> if(!MultiByteToWideChar(CP_ACP, 0, AdrInfo->AdapterName,

R> -1, AdapterName, 1000))
R> {
R> m_Error->PutError(0, __FILE__, __LINE__,
R> "Error converting to Unicode", 1);
R> AdrInfo=AdrInfo->Next;
R> continue;
R> }
R>///Собственно функция ниже и выполняет преобразование GUID адаптера в читаемую форму (но в Юникоде)
R> if(MprConfigGetFriendlyName(hMprConfig, AdapterName, FriendlyBuffer,
R> 1000)!=NO_ERROR)
R> {
R> m_Error->PutError(0, __FILE__, __LINE__, "Error converting adapter "\
R> "name to a readable form", 1);
R>// goto ret;
R> AdrInfo=AdrInfo->Next;
R> continue;
R> }
R>//После вызоыва этой функции Buffer содержит то что тебе нужно
R> if(!WideCharToMultiByte(CP_ACP, 0, FriendlyBuffer,
R> -1, Buffer, 1000, NULL, NULL))
R> {
R> m_Error->PutError(0, __FILE__, __LINE__,
R> "Error converting from Unicode", 1);
R> AdrInfo=AdrInfo->Next;
R> continue;
R> }

R>///Этот кусок не нужен, я запаковываю все в один буфер здесь

R> int Len=strlen(Buffer)+1;
R> memcpy(Pointer, &Len, sizeof(int));
R> Pointer+=sizeof(int);
R> memcpy(Pointer, Buffer, Len);
R> Pointer+=Len;

R> Len=strlen(AdrInfo->IpAddressList.IpAddress.String)+1;

R> memcpy(Pointer, &Len, sizeof(int));
R> Pointer+=sizeof(int);
R> memcpy(Pointer, AdrInfo->IpAddressList.IpAddress.String, Len);
R> Pointer+=Len;
R>///////////////////////////////////////////////////////////////////////////

R> AdrInfo=AdrInfo->Next;

R> }

К сожалению, это не работает для модемов.У меня подключено 2 модема, по ipconfig видны их имена а системе и IP адреса.
Однако, как определить, какой IP адрес относится к какому модему непонятно.
Все функции типа GetAdapter...() дают для обоих модемов имя WAN PPP/SLIP.
Может кто знает?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.