Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сетевые карты 
:(
    Опции темы
apostolnikolai
Дата 26.1.2011, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 19.3.2009

Репутация: нет
Всего: нет



Доброе время суток ! 

Вопрос как определить список сетевых карт установленных в компьютере ( но колько Ethernet ) . Нужно Мак и GUID 
PM MAIL   Вверх
kami
Дата 27.1.2011, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



пример Rouse Вам в руки.
Анализируйте параметр IP_ADAPTER_INFO.Type на предмет равенства MIB_IF_TYPE_ETHERNET, и при совпадении - извлекайте остальные нужные параметры. Оттуда Вы вытащите MAC, а вот с GUID - даже не знаю :(
P.S. телепатор меня не обманывает, это нужно для привязки к железу?

Это сообщение отредактировал(а) kami - 27.1.2011, 18:56
PM MAIL WWW   Вверх
apostolnikolai
Дата 1.2.2011, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 19.3.2009

Репутация: нет
Всего: нет



Есть проблема как ее решить ? user posted image

Код

////////////////////////////////////////////////////////////////////////////////
//
//  ****************************************************************************
//  * Project   : NetIfEnum
//  * Unit Name : uMain
//  * Purpose   : Получение информации о установленных сетевых интерфейсах.
//  * Author    : Александр (Rouse_) Багель
//  * Version   : 1.00
//  ****************************************************************************
//

unit uMain;

interface

uses
  Windows, SysUtils, Classes, Controls, Forms, ComCtrls;

const
  MAX_ADAPTER_NAME_LENGTH        = 256;
  MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
  MAX_ADAPTER_ADDRESS_LENGTH     = 8;
  IPHelper = 'iphlpapi.dll';

  // Типы адаптеров
  MIB_IF_TYPE_OTHER     = 1;
  MIB_IF_TYPE_ETHERNET  = 6;
  MIB_IF_TYPE_TOKENRING = 9;
  MIB_IF_TYPE_FDDI      = 15;
  MIB_IF_TYPE_PPP       = 23;
  MIB_IF_TYPE_LOOPBACK  = 24;
  MIB_IF_TYPE_SLIP      = 28;

type
  // Структуры для выполнения GetAdaptersInfo
  time_t = Longint;

  IP_ADDRESS_STRING = record
    S: array [0..15] of Char;
  end;
  IP_MASK_STRING = IP_ADDRESS_STRING;
  PIP_MASK_STRING = ^IP_MASK_STRING;

  PIP_ADDR_STRING = ^IP_ADDR_STRING;
  IP_ADDR_STRING = record
    Next: PIP_ADDR_STRING;
    IpAddress: IP_ADDRESS_STRING;
    IpMask: IP_MASK_STRING;
    Context: DWORD;
  end;

  PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO;
  IP_ADAPTER_INFO = record
    Next: PIP_ADAPTER_INFO;
    ComboIndex: DWORD;
    AdapterName: array [0..MAX_ADAPTER_NAME_LENGTH + 3] of Char;
    Description: array [0..MAX_ADAPTER_DESCRIPTION_LENGTH + 3] of Char;
    AddressLength: UINT;
    Address: array [0..MAX_ADAPTER_ADDRESS_LENGTH - 1] of BYTE;
    Index: DWORD;
    Type_: UINT;
    DhcpEnabled: UINT;
    CurrentIpAddress: PIP_ADDR_STRING;
    IpAddressList: IP_ADDR_STRING;
    GatewayList: IP_ADDR_STRING;
    DhcpServer: IP_ADDR_STRING;
    HaveWins: BOOL;
    PrimaryWinsServer: IP_ADDR_STRING;
    SecondaryWinsServer: IP_ADDR_STRING;
    LeaseObtained: time_t;
    LeaseExpires: time_t;
  end;

  TfrmEnumNetInterfaces = class(TForm)
    tvInterfaces: TTreeView;
    procedure FormCreate(Sender: TObject);
  private
    procedure ReadLanInterfaces;
  end;

  // При помощи данной функции мы определим наличие сетевых интерфейсов
  // на локальном компьютере и информацию о них
  function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO;
    var pOutBufLen: ULONG): DWORD; stdcall; external IPHelper;  

var
  frmEnumNetInterfaces: TfrmEnumNetInterfaces;

implementation

{$R *.dfm}

// Читаем все IP адреса со всех присутствующих
// в системе сетевых интерфейсов
procedure TfrmEnumNetInterfaces.ReadLanInterfaces;

  function MACToStr(Addr: array of Byte; Len: Integer): String;
  var
    I: Integer;
  begin
    if Len = 0 then Result := '00-00-00-00-00-00' else
    begin
      Result := '';
      for I := 0 to Len - 2 do
        Result := Result + IntToHex(Addr[I], 2) + '-';
      Result := Result + IntToHex(Addr[Len - 1], 2);
    end;
  end;

  function TimeToDateTimeStr(Value: Integer): String;
  const 
    UnixDateDelta = 25569; // количество дней между 12.31.1899 и 1.1.1970
    MinPerDay = 24 * 60;
    SecPerDay = 24 * 60 * 60;
  var
    Data: TDateTime;
    TimeZoneInformation: TTimeZoneInformation;
    AResult: DWORD;
  begin
    Result := '';
    if Value = 0 then Exit;

    // Формат Unix-ового TIME_T кол-во секунд от 1.1.1970
    Data := UnixDateDelta + (Value / SecPerDay);
    AResult := GetTimeZoneInformation(TimeZoneInformation);
    case AResult of
      TIME_ZONE_ID_INVALID: RaiseLastOSError;
      TIME_ZONE_ID_STANDARD:
      begin
        Data := Data - ((TimeZoneInformation.Bias +
          TimeZoneInformation.StandardBias) / MinPerDay);
        Result := DateTimeToStr(Data) + ' ' +
          WideCharToString(TimeZoneInformation.StandardName);
      end;
    else
      Data := Data - ((TimeZoneInformation.Bias +
        TimeZoneInformation.DaylightBias) / MinPerDay);
      Result := DateTimeToStr(Data) + ' ' +
        WideCharToString(TimeZoneInformation.DaylightName);
    end;
  end;

var
  InterfaceInfo,
  TmpPointer: PIP_ADAPTER_INFO;
  IP: PIP_ADDR_STRING;
  Len: ULONG;
  AdapterTree, IPAddrTree, DHCPTree, WinsTree: TTreeNode;
  AdapterType: String;
begin
  // Смотрим сколько памяти нам требуется?
  if GetAdaptersInfo(nil, Len) = ERROR_BUFFER_OVERFLOW then
  begin
    // Берем нужное кол-во
    GetMem(InterfaceInfo, Len);
    try
      // выполнение функции
      if GetAdaptersInfo(InterfaceInfo, Len) = ERROR_SUCCESS then
      begin
        // Перечисляем все сетевые интерфейсы
        TmpPointer := InterfaceInfo;
        repeat
          // Имя сетевого интерфейса
          AdapterTree := tvInterfaces.Items.Add(nil, 'Adapted: ' + TmpPointer^.AdapterName);
          // Описание сетевого интерфейса
          tvInterfaces.Items.AddChild(AdapterTree, 'Description: ' + TmpPointer^.Description);
          // МАС Адрес
          tvInterfaces.Items.AddChild(AdapterTree, 'МАС: ' +
            MACToStr(TmpPointer^.Address, TmpPointer^.AddressLength));
          // Индекс адаптера в списке
          tvInterfaces.Items.AddChild(AdapterTree, 'Index: ' +
            IntToStr(TmpPointer^.Index));
          // Тип адаптера
          case TmpPointer^.Type_ of
            MIB_IF_TYPE_OTHER:      AdapterType := 'MIB_IF_TYPE_OTHER';
            MIB_IF_TYPE_ETHERNET:   AdapterType := 'MIB_IF_TYPE_ETHERNET';
            MIB_IF_TYPE_TOKENRING:  AdapterType := 'MIB_IF_TYPE_TOKENRING';
            MIB_IF_TYPE_FDDI:       AdapterType := 'MIB_IF_TYPE_FDDI';
            MIB_IF_TYPE_PPP:        AdapterType := 'MIB_IF_TYPE_PPP';
            MIB_IF_TYPE_LOOPBACK :  AdapterType := 'MIB_IF_TYPE_LOOPBACK';
            MIB_IF_TYPE_SLIP :      AdapterType := 'MIB_IF_TYPE_SLIP';
          else
            AdapterType := 'Unknown';
          end;
          tvInterfaces.Items.AddChild(AdapterTree, 'Type: ' + AdapterType);
          // определение активности DHCP
          if Boolean(TmpPointer^.DhcpEnabled) then
          begin
            DHCPTree := tvInterfaces.Items.AddChild(AdapterTree, 'DHCP: Enabled');
            // Адрес DHCP сервера
            tvInterfaces.Items.AddChild(DHCPTree, 'DHCP IP Addr: ' +
              String(TmpPointer^.DhcpServer.IpAddress.S));
            // Время получения данных от сервера
            tvInterfaces.Items.AddChild(DHCPTree, 'LeaseObtained: ' +
              TimeToDateTimeStr(TmpPointer^.LeaseObtained));
            // Время устаревания данных от сервера
            tvInterfaces.Items.AddChild(DHCPTree, 'LeaseExpires: ' +
              TimeToDateTimeStr(TmpPointer^.LeaseExpires));
          end
          else
            tvInterfaces.Items.AddChild(AdapterTree, 'DHCP: Disabled');

          // перечисляем все IP адреса интерфейса
          IP := @TmpPointer.IpAddressList;
          IPAddrTree := tvInterfaces.Items.AddChild(AdapterTree, 'IP Addreses:');
          repeat
            tvInterfaces.Items.AddChild(IPAddrTree, Format('IP: %s, SubNetMask: %s',
              [String(IP^.IpAddress.S), String(IP^.IpMask.S)]));
            IP := IP.Next;
          until IP = nil;

          // основной шлюз:
          tvInterfaces.Items.AddChild(AdapterTree, 'Default getaway: ' +
            TmpPointer^.GatewayList.IpAddress.S);

          // Windows Internet Name Service
          if TmpPointer^.HaveWins then
          begin
            WinsTree := tvInterfaces.Items.AddChild(AdapterTree, 'WINS: Enabled');
            // основной WINS
            tvInterfaces.Items.AddChild(WinsTree, 'PrimaryWinsServer: ' +
              String(TmpPointer^.PrimaryWinsServer.IpAddress.S));
            // запасной WINS
            tvInterfaces.Items.AddChild(WinsTree, 'SecondaryWinsServer: ' +
              String(TmpPointer^.SecondaryWinsServer.IpAddress.S));
          end
          else
            tvInterfaces.Items.AddChild(AdapterTree, 'WINS: Disabled');

          TmpPointer := TmpPointer.Next;
        until TmpPointer = nil;
      end;
    finally
      // Освобождаем занятую память
      FreeMem(InterfaceInfo);
    end;
  end;
end;

procedure TfrmEnumNetInterfaces.FormCreate(Sender: TObject);
begin
  ReadLanInterfaces;
end;

end.

PM MAIL   Вверх
kami
Дата 1.2.2011, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



1. Пройтись отладчиком.
2. Если используется D2009 и выше - то смотреть, чем отличается Char в D7 от Char в D2009 и выше.
PM MAIL WWW   Вверх
bagos
Дата 2.2.2011, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 275
Регистрация: 17.6.2006

Репутация: нет
Всего: 1



Почитайте про технологию WMI
PM MAIL   Вверх
MetalFan
Дата 2.2.2011, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



bagos, да шож ты везде с этим WMIем то))
лучшеб пример кода человеку привел, который его вопрос с пом WMI решает smile 


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
bagos
Дата 4.2.2011, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 275
Регистрация: 17.6.2006

Репутация: нет
Всего: 1



apostolnikolai, если нет желания морочиться с wmi, то используйте компонент TWMIQuery, даст вам всю нужную инфу.
получить мас и ip с помощью TWMIQuery:
Код

WmiQuery1.WQL.Text := 'select * from Win32_NetworkAdapterConfiguration where IPEnabled=True';
WmiQuery1.Active := true;
memo1.Lines.Add(WmiQuery1.FieldByName('IPAddress').AsString);
memo1.Lines.Add(WmiQuery1.FieldByName('MACAddress').AsString);

PM MAIL   Вверх
apostolnikolai
Дата 5.2.2011, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 19.3.2009

Репутация: нет
Всего: нет



bagos,  я так понял что он платный мож есть холявный у каво ?

PM MAIL   Вверх
kami
Дата 5.2.2011, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



apostolnikolai, бесплатный сыр бывает только в мышеловках.
+ ко всему, как уже сказали в клоне Вашей же темы - WMI может быть отключен (как, например, у меня).
Код rouse решает задачи, изложенные в вопросе.
"Чего ж тебе еще надо ...?" (с) Иван Васильевич меняет профессию.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0967 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.