Форум: "Сети";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];
ВнизПеречислить сет. интерфейсы, Как? Найти похожие ветки
← →
bloodman © (2006-01-12 19:47) [0]Как пройтись по всем сетевым карточкам в компьютере? Мне нужно узнать все ip адреса компьютера на котором запущена программа, желательно, не просто списком, а чтобы можно было определить какой сетевой карте эти адреса принадлежат??
Спасибо.
← →
Rouse_ © (2006-01-13 12:05) [1]
type
USHORT = WORD;
ULONG = DWORD;
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;
function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO;
var pOutBufLen: ULONG): DWORD; stdcall; external IPHelper;
procedure TfrmMain.ReadLanInterfaces;
var
InterfaceInfo,
TmpPointer: PIP_ADAPTER_INFO;
IP: PIP_ADDR_STRING;
Len: ULONG;
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
IP := @TmpPointer.IpAddressList;
repeat
cbInterfaces.Items.Add(Format("%s - [%s]",
[IP^.IpAddress.S, TmpPointer.Description]));
IP := IP.Next;
until IP = nil;
TmpPointer := TmpPointer.Next;
until TmpPointer = nil;
end;
finally
FreeMem(InterfaceInfo);
end;
end;
if cbInterfaces.Items.Count = 0 then
begin
memReport.Text := "Сетевые интерфейсы не обнаружены." + sLineBreak +
"Продолжение работы программы не возможно.";
btnStartStop.Enabled := False;
Exit;
end
else
cbInterfaces.ItemIndex := 0;
end;
← →
Rouse_ © (2006-01-13 12:07) [2]Если нужны имена виртуальных устройств, то подход несколько иной:
const
MAX_ADAPTER_NAME = 255;
type
PIP_ADAPTER_INDEX_MAP = ^IP_ADAPTER_INDEX_MAP;
IP_ADAPTER_INDEX_MAP = record
Index: DWORD;
Name: array [0..MAX_ADAPTER_NAME-1] of WideChar;
end;
PIP_INTERFACE_INFO = ^IP_INTERFACE_INFO;
IP_INTERFACE_INFO = record
NumAdapters: Longint;
Adapter: array [0..0] of IP_ADAPTER_INDEX_MAP;
end;
function GetIfEntry(pIfRow: PMibIfRow): DWORD; stdcall external "iphlpapi.dll";
function GetNumberOfInterfaces(var pdwIntf: DWORD): DWORD; stdcall; external "iphlpapi.dll";
function GetInterfaceInfo(pIfTable: PIP_INTERFACE_INFO; var dwOutBufLen:DWORD): DWORD;
stdcall; external "iphlpapi.dll";
function GetAdapterIndex(AdapterName: PWideChar; var IfIndex: DWORD): DWORD;
stdcall; external "iphlpapi.dll";
procedure TMainForm.Button1Click(Sender: TObject);
var
I, pdwIntf, dwOutBufLen, IfIndex: DWORD;
lpInfo: PIP_INTERFACE_INFO;
mirIfDescr: TMibIfRow;
begin
//if GetNumberOfInterfaces(pdwIntf) = NO_ERROR then
//begin
GetInterfaceInfo(nil, dwOutBufLen);
GetMem(lpInfo, dwOutBufLen);
try
if GetInterfaceInfo(lpInfo, dwOutBufLen) = NO_ERROR then
begin
for I := 0 to lpInfo^.NumAdapters - 1 do
begin
Memo1.Lines.Add("AdapterName: " + lpInfo^.Adapter[I].Name);
if GetAdapterIndex(lpInfo^.Adapter[I].Name, IfIndex) = NO_ERROR then
Memo1.Lines.Add("AdapterIndex: " + IntToStr(IfIndex))
else
RaiseLastOSError;
ZeroMemory(@mirIfDescr, SizeOf(TMibIfRow));
mirIfDescr.dwIndex := IfIndex;
if GetIfEntry(@mirIfDescr) = NO_ERROR then
Memo1.Lines.Add("AdapterDescription: " + mirIfDescr.bDescr)
else
RaiseLastOSError;
end;
end
else
RaiseLastOSError;
finally
FreeMem(lpInfo);
end;
end
//else
//RaiseLastOSError;
end;
← →
bloodman © (2006-01-13 17:26) [3]Огромное Спасибо!!
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c