Как да получите име на адаптер с 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)


Indy не предоставя такава информация. Трябва да използвате 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