Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.114.50] |
|
Сообщ.
#1
,
|
|
|
Добрый день!
Нужно получить список сетевых карт и их IP Нашел вот такой пример, но не могу узнать текущий IP Я дописал LstInfo.Add(String(TmpPointer^.IpAddressList.IpAddress.S)); но получаю иероглифы помогите пожалуйста правильно конвертировать/получить данные 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. |
Сообщ.
#2
,
|
|
|
Исправил. первый пост закрыт.
теперь пытаюсь установить программно другой ip. не получается. может кто подскажет. исходники прилагаю https://yadi.sk/d/seIgBaYhisZCHA по факту смотреть особо нечего. пытаюсь менять так: SetAdapterIpAddress(Pwidechar(st[h+1]),0,inet_addr(Pansichar(AnsiString(AddrIP))),inet_addr(Pansichar(AnsiString(AddrMask))),inet_addr(Pansichar(AnsiString(AddrGateway)))); UP. ссылку поправил. была не корректной |