Как получить имя адаптера с Indy?

Я могу получить все локальные IP-адреса, используя этот код с помощью indy:

uses IdStack;

var
  IPs: TStringList;
begin
  IPs := TStringList.Create;
  try
    GStack.AddLocalAddressesToList(IPs);
    listbox_localIPs.Items.Assign(IPs);  //My listbox
  finally
    IPs.Free;
  end;
end;

Как получить Имя адаптера для каждого IP-адреса, который я нахожу с помощью Indy?


person Sky    schedule 27.03.2014    source источник


Ответы (2)


Инди не предоставляет такой информации. Вы должны использовать WinApi (GetAdaptersInfo, GetAdaptersAddresses) или WMI (Win32_NetworkAdapter).

person RRUZ    schedule 27.03.2014

Indy — это прежде всего просто оболочка для стандартных API-интерфейсов сокетов, которая не предоставляет информацию об адаптере. AddLocalAddressesToList() использует специфичные для платформы API для получения локальных IP-адресов, и некоторые из этих API могут сообщать об именах адаптеров (или предоставлять способы поиска этих имен через другие API), но AddLocalAddressesToList() просто заполняет TStrings строками IP-адресов, поэтому у него нет способ сообщить об именах адаптеров, даже если он захочет.

При этом AddLocalAddressesToList() недавно был объявлен устаревшим в пользу нового метода GetLocalAddressList(), который возвращает набор производных от TIdStackLocalAddress объектов, содержащих дополнительную информацию (версия IP, маска подсети). Таким образом, возможно, что в будущем выпуске могут быть добавлены имена адаптеров, но это все равно будет реализовано для конкретной платформы и, следовательно, может быть доступно не на всех платформах. Самому Indy не нужны имена адаптеров, поэтому вам лучше всего просто использовать API-интерфейсы для конкретной платформы напрямую, чтобы получить любую необходимую информацию об адаптере.

person Remy Lebeau    schedule 27.03.2014