Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.04.2014, 22:01
Noooob Noooob вне форума
Прохожий
 
Регистрация: 24.12.2013
Сообщения: 38
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

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

Уже нашел
Код:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

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;

 TForm1 = class(TForm)
   Button1: TButton;
    Memo1: TMemo;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

{S} function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO;var pOutBufLen: ULONG): DWORD; stdcall; external IPHelper;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 TmpPointer, InterfaceInfo: PIP_ADAPTER_INFO;
 IP: PIP_ADDR_STRING;
 Len: ULONG;

begin
if GetAdaptersInfo(nil, Len) = ERROR_BUFFER_OVERFLOW then
begin
GetMem(InterfaceInfo, Len);
if GetAdaptersInfo(InterfaceInfo, Len) = ERROR_SUCCESS then begin
TmpPointer := InterfaceInfo;
repeat

Memo1.Lines.Add(string(TmpPointer^.Description)+' '+string(TmpPointer^.IpAddressList.IpAddress.S)+' '+string(TmpPointer^.AdapterName));

TmpPointer := TmpPointer.Next;
until TmpPointer = nil;
end;
FreeMem(InterfaceInfo);
end;
end;

end.

Но у меня имена адаптеров выдает так: {7798C830-98F3-44F5-A665-DEF4B7FDCB46}. Их можно расшифровать?

Последний раз редактировалось M.A.D.M.A.N., 28.04.2014 в 07:59.
Ответить с цитированием
  #2  
Старый 28.04.2014, 07:58
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Больше на GUID похоже.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 28.04.2014, 18:24
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
var
  AdapterInfo: PIP_ADAPTER_INFO;
  Next: PIP_ADAPTER_INFO;
  pOutBufLen: ULONG;
  ipstats: MIB_IPSTATS;
  tcpstats: MIB_TCPSTATS;
begin
  pOutBufLen:=0;
  if GetAdaptersInfo(nil, @pOutBufLen)=ERROR_BUFFER_OVERFLOW then
  begin
    AdapterInfo:=GetMemory(pOutBufLen);
    try
      if GetAdaptersInfo(AdapterInfo, @pOutBufLen)=ERROR_SUCCESS then
      begin
        Next:=AdapterInfo;
        while Next<>nil do
        begin
          Memo1.Lines.Add('AdapterName: '+Next^.AdapterName);
          Memo1.Lines.Add('Description: '+Next^.Description);
          Memo1.Lines.Add('IpAddress: '+Next^.IpAddressList.IpAddress);
          Memo1.Lines.Add('');
          Next:=Next^.Next;
        end;
      end;
    finally
      FreeMemory(AdapterInfo);
    end;
  end else ShowMessage(SysErrorMessage(GetLastError));
end;
только что проверил, работает.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 16.05.2014, 14:24
Redddd Redddd вне форума
Прохожий
 
Регистрация: 18.02.2013
Сообщения: 40
Репутация: 10
По умолчанию Смена IP

Что б не плодить темы, спрошу тут.
Есть задача програмно менять ip c компа.
Вопрос в какую сторону копать.
Я так понимаю в случае использования DHCP надо адрес сбрасывать и запрашивать новый?
Ответить с цитированием
  #5  
Старый 16.05.2014, 15:47
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
Я так понимаю в случае использования DHCP надо адрес сбрасывать и запрашивать новый?
Программно выключить и включить адаптер.
А если серьёзно - тема больше похожа на какого-то спам-бота. В нормальных приложениях нет смысла менять ip.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #6  
Старый 17.05.2014, 03:17
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Смех

да, Кррррасный, надо подменять DHCP.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 17.05.2014, 09:42
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

А с чего вы решили, что DHCP-сервер вам выдаст обязательно новый ip? Если он настроен на ваш mac завязанный на конкретный ip то другого вы не получите. А если вы подмените mac то DHCP может вообще отвергнуть ваш запрос на получение ip.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
Redddd (17.05.2014)
  #8  
Старый 17.05.2014, 11:36
Redddd Redddd вне форума
Прохожий
 
Регистрация: 18.02.2013
Сообщения: 40
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
А с чего вы решили, что DHCP-сервер вам выдаст обязательно новый ip? Если он настроен на ваш mac завязанный на конкретный ip то другого вы не получите. А если вы подмените mac то DHCP может вообще отвергнуть ваш запрос на получение ip.
Точняк, мысль про мак меня не посещала.
Благодарю
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:02.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter