Адаптеры и IP адреса
От: byt0r  
Дата: 14.09.04 13:45
Оценка:
Не подскажет ли многоуважаемый All,
как сопоставить IP адреса и собственно адаптеры,
которым они назначены?

Т.е. стоит сервер, у которого N сетевых карт,
еще сколько-то модемов, и т.д. Через каждый
адаптер потенциально возможно устанавливать
соединения.

Получить список IP адресов можно, например,
при помощи GetAdapterInfo(). Список адаптеров,
например, при помощи SetupDiEnumDeviceInfo().

А вот как сопоставить одно другому? Может кто
знает? Куда копать?
Re: Адаптеры и IP адреса
От: butcher Россия http://bu7cher.blogspot.com
Дата: 15.09.04 04:28
Оценка:
Здравствуйте, byt0r, Вы писали:

B>Получить список IP адресов можно, например,

B>при помощи GetAdapterInfo(). Список адаптеров,
B>например, при помощи SetupDiEnumDeviceInfo().
А что:

The GetAdaptersInfo function retrieves adapter information for the local computer.
DWORD GetAdaptersInfo(
    PIP_ADAPTER_INFO pAdapterInfo,
    PULONG pOutBufLen
);

..

The IP_ADAPTER_INFO structure contains information about a particular network adapter on the local computer.
typedef struct _IP_ADAPTER_INFO { 
    struct _IP_ADAPTER_INFO* Next; 
    DWORD ComboIndex; 
    char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]; 
    char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]; 
    UINT AddressLength; 
    BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH]; 
    DWORD Index; 
    UINT Type; 
    UINT DhcpEnabled; 
    PIP_ADDR_STRING CurrentIpAddress; 
    IP_ADDR_STRING IpAddressList; 
    IP_ADDR_STRING GatewayList; 
    IP_ADDR_STRING DhcpServer; 
    BOOL HaveWins; 
    IP_ADDR_STRING PrimaryWinsServer; 
    IP_ADDR_STRING SecondaryWinsServer; 
    time_t LeaseObtained; 
    time_t LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;


этого мало?

Нет ничего невозможного..
Re[2]: Адаптеры и IP адреса
От: Аноним  
Дата: 15.09.04 09:50
Оценка:
Здравствуйте, butcher, Вы писали:

B>The GetAdaptersInfo function retrieves adapter information for the local computer.

B>
B>DWORD GetAdaptersInfo(
B>    PIP_ADAPTER_INFO pAdapterInfo,
B>    PULONG pOutBufLen
B>);
B>

B>..
B>The IP_ADAPTER_INFO structure contains information about a particular network adapter on the local computer.
B>
B>typedef struct _IP_ADAPTER_INFO { 
B>    struct _IP_ADAPTER_INFO* Next; 
B>    DWORD ComboIndex; 
B>    char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]; 
B>    char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]; 
B>    UINT AddressLength; 
B>    BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH]; 
B>    DWORD Index; 
B>    UINT Type; 
B>    UINT DhcpEnabled; 
B>    PIP_ADDR_STRING CurrentIpAddress; 
B>    IP_ADDR_STRING IpAddressList; 
B>    IP_ADDR_STRING GatewayList; 
B>    IP_ADDR_STRING DhcpServer; 
B>    BOOL HaveWins; 
B>    IP_ADDR_STRING PrimaryWinsServer; 
B>    IP_ADDR_STRING SecondaryWinsServer; 
B>    time_t LeaseObtained; 
B>    time_t LeaseExpires;
B>} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
B>


B>этого мало?


Дело в том, что под разными операционками заполняются
разные поля этой структуры.

В частности, поле
char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]
иногда остается пустым И даже в тех случаях,
когда оно содержит информацию, она может не совпадать
с той, что получаю от SetupDiEnumDeviceInfo().
Ситуация усложняется еще и тем, что могут быть несколько
одинаковых адаптеров (например сетевых карт).

Можно было бы заложиться на HardwareAddress, но тут есть
две проблемы: 1. для сетевых карт его можно изменить
2. для модемов его не существует

Или имелось в виду что-то еще?
Re[3]: Адаптеры и IP адреса
От: butcher Россия http://bu7cher.blogspot.com
Дата: 15.09.04 10:19
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Можно было бы заложиться на HardwareAddress, но тут есть

А>две проблемы: 1. для сетевых карт его можно изменить
А>2. для модемов его не существует
Есть ещё Index устройства, только я не знаю, связан ли он как-то с тем что используется и возвращается Device Management функциями.

Нет ничего невозможного..
Re[4]: Адаптеры и IP адреса
От: Byt0r  
Дата: 15.09.04 10:43
Оценка:
Здравствуйте, butcher, Вы писали:

B>Здравствуйте, <Аноним>, Вы писали:


А>>Можно было бы заложиться на HardwareAddress, но тут есть

А>>две проблемы: 1. для сетевых карт его можно изменить
А>>2. для модемов его не существует
B>Есть ещё Index устройства, только я не знаю, связан ли он как-то с тем что используется и возвращается Device Management функциями.

Согласен, есть функция GetAdapterIndex(), которая по имени получает индекс.
Вот только что это за имя? Как его узнать? Или как бы их все перечислить?
Re: Адаптеры и IP адреса
От: kmn Украина  
Дата: 15.09.04 11:51
Оценка:
Здравствуйте, byt0r, Вы писали:

B>Не подскажет ли многоуважаемый All,

B>как сопоставить IP адреса и собственно адаптеры,
B>которым они назначены?

B>Т.е. стоит сервер, у которого N сетевых карт,

B>еще сколько-то модемов, и т.д. Через каждый
B>адаптер потенциально возможно устанавливать
B>соединения.

B>Получить список IP адресов можно, например,

B>при помощи GetAdapterInfo(). Список адаптеров,
B>например, при помощи SetupDiEnumDeviceInfo().

B>А вот как сопоставить одно другому? Может кто

B>знает? Куда копать?

Полгода назад сам копал. так ни чего и не накопал
Если найдете — дайте знать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.