![]() |
|
|
|
|
#1
|
|||
|
|||
|
Как получить имя и 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
|
||||
|
||||
|
Больше на GUID похоже.
|
|
#3
|
||||
|
||||
|
Код:
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
|
|||
|
|||
|
Что б не плодить темы, спрошу тут.
Есть задача програмно менять ip c компа. Вопрос в какую сторону копать. Я так понимаю в случае использования DHCP надо адрес сбрасывать и запрашивать новый? |
|
#5
|
||||
|
||||
|
Цитата:
![]() А если серьёзно - тема больше похожа на какого-то спам-бота. В нормальных приложениях нет смысла менять ip. |
|
#6
|
||||
|
||||
|
да, Кррррасный, надо подменять DHCP.
|
|
#7
|
||||
|
||||
|
А с чего вы решили, что DHCP-сервер вам выдаст обязательно новый ip? Если он настроен на ваш mac завязанный на конкретный ip то другого вы не получите. А если вы подмените mac то DHCP может вообще отвергнуть ваш запрос на получение ip.
|
| Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
Redddd (17.05.2014)
| ||
|
#8
|
|||
|
|||
|
Цитата:
Благодарю |