На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> не корректно получаю IP
    Добрый день!
    Нужно получить список сетевых карт и их IP
    Нашел вот такой пример, но не могу узнать текущий IP
    Я дописал
    ExpandedWrap disabled
      LstInfo.Add(String(TmpPointer^.IpAddressList.IpAddress.S));

    но получаю иероглифы
    помогите пожалуйста правильно конвертировать/получить данные


    ExpandedWrap disabled
      unit Unit1;
       
      interface
       
      uses
        Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
        Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
       
       
       
       
      type
        TForm1 = class(TForm)
          ListBox1: TListBox;
          ListBox2: TListBox;
          procedure FormCreate(Sender: TObject);
        private
          { Private declarations }
        public
          { Public declarations }
        end;
       
      var
        Form1: TForm1;
       
       
       
       
        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
       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;
       time_t = Longint;
       
       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 AnsiChar;
         Description: array [0..MAX_ADAPTER_DESCRIPTION_LENGTH + 3] of AnsiChar;
         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;
       
      function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO;var pOutBufLen: ULONG): DWORD; stdcall; external IPHelper;
       
       
      implementation
       
      {$R *.dfm}
       
       
       
       
      // -----------------------------------------------------------------------------
      // Получаем список MAC-адресов сетевых карт (виртуальных и реальных)
      // Используем правильный способ (не через BIOS)
      // -----------------------------------------------------------------------------
      function GetMACAddressOfNetwordDrives(var LstInfo:TStringList; var LstMAC:TStringList):boolean;
      var
        TmpPointer, InterfaceInfo: PIP_ADAPTER_INFO;
        IP: PIP_ADDR_STRING;
        Len: ULONG;
        i:integer;
        st:string;
      begin
        Result:=false;
       
        if GetAdaptersInfo(nil, Len) = ERROR_BUFFER_OVERFLOW then
        begin
          GetMem(InterfaceInfo, Len);
          if GetAdaptersInfo(InterfaceInfo, Len) = ERROR_SUCCESS then begin
            TmpPointer := InterfaceInfo;
            repeat
              st:='';
              for i:=0 to TmpPointer^.AddressLength-1 do
              begin
                st:=st+IntToHex(TmpPointer^.Address[i],2);
                if i<TmpPointer^.AddressLength-1 then st:=st+'-';
              end;
       
       
                LstInfo.Add(String(TmpPointer^.IpAddressList.IpAddress.S));
       
              LstInfo.Add(string(TmpPointer^.Description)); // <-- в Description одни нули почему то, я ожидал "Сетевой адаптер Realtek RTL8187SE Wireless 802.11b/g 54 Мбит/с PCIE"
              LstMAC.Add(st);// <-- Здесь все верно - MAC-адрес
       
       
            TmpPointer := TmpPointer.Next;
            until TmpPointer = nil;
          end;
          FreeMem(InterfaceInfo);
        end;
       
        Result:=True;
      end;
       
      procedure TForm1.FormCreate(Sender: TObject);
      var
      s1,s2:Tstringlist;
      begin
       
       
      s1:=Tstringlist.Create;
      s2:=Tstringlist.Create;
      GetMACAddressOfNetwordDrives(s1,s2);
       
      form1.ListBox1.Items.Text:=s1.Text;
      form1.ListBox2.Items.Text:=s2.Text;
       
       
       
       
       
       
      s1.free;
      s2.free;
       
      end;
       
      end.
      Исправил. первый пост закрыт.
      теперь пытаюсь установить программно другой ip. не получается. может кто подскажет.
      исходники прилагаю
      https://yadi.sk/d/seIgBaYhisZCHA

      по факту смотреть особо нечего. пытаюсь менять так:
      ExpandedWrap disabled
        SetAdapterIpAddress(Pwidechar(st[h+1]),0,inet_addr(Pansichar(AnsiString(AddrIP))),inet_addr(Pansichar(AnsiString(AddrMask))),inet_addr(Pansichar(AnsiString(AddrGateway))));



      UP. ссылку поправил. была не корректной
      Сообщение отредактировано: Emmys -
      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script Execution time: 0,0696 ]   [ 15 queries used ]   [ Generated: 18.06.19, 22:59 GMT ]