Здравствуйте, 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;
этого мало?
Здравствуйте, 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. для модемов его не существует
Или имелось в виду что-то еще?
Здравствуйте, <Аноним>, Вы писали:
А>Можно было бы заложиться на HardwareAddress, но тут есть
А>две проблемы: 1. для сетевых карт его можно изменить
А>2. для модемов его не существует 
Есть ещё Index устройства, только я не знаю, связан ли он как-то с тем что используется и возвращается Device Management функциями.
Здравствуйте, butcher, Вы писали:
B>Здравствуйте, <Аноним>, Вы писали:
А>>Можно было бы заложиться на HardwareAddress, но тут есть
А>>две проблемы: 1. для сетевых карт его можно изменить
А>>2. для модемов его не существует
B>Есть ещё Index устройства, только я не знаю, связан ли он как-то с тем что используется и возвращается Device Management функциями.
Согласен, есть функция GetAdapterIndex(), которая по имени получает индекс.
Вот только что это за имя? Как его узнать? Или как бы их все перечислить?
Здравствуйте, byt0r, Вы писали:
B>Не подскажет ли многоуважаемый All,
B>как сопоставить IP адреса и собственно адаптеры,
B>которым они назначены?
B>Т.е. стоит сервер, у которого N сетевых карт,
B>еще сколько-то модемов, и т.д. Через каждый
B>адаптер потенциально возможно устанавливать
B>соединения.
B>Получить список IP адресов можно, например,
B>при помощи GetAdapterInfo(). Список адаптеров,
B>например, при помощи SetupDiEnumDeviceInfo().
B>А вот как сопоставить одно другому? Может кто
B>знает? Куда копать?
Полгода назад сам копал. так ни чего и не накопал

Если найдете — дайте знать.