tBsd_Interface = record
if_name: String;
if_mac: String;
if_ip: String;
if_mask: String;
if_ip6: String;
if_drv: String;
if_desc: String;
end;
tBsd_Interfaces = array[0..11] of tBsd_Interface;
var
gBsd_Interfaces: tBsd_Interfaces;
function fpGet_interfaces_list_Lt(): Boolean;
var
I, J : Integer;
lNetdata: TStringList;
lNetdataLine, lName,
lLink: String;
begin
Result := False;
lNetdata := TStringList.Create();
try
// Get Interfaces name & mac
lNetdata.Text := fpExecCmdNetStat();
lNetdata.Delete(0);
J := 0 ; // Index for the gBsd_Interfaces[J]
for I := 0 to Pred(lNetdata.Count) do
begin
lNetdataLine := lNetdata.Strings[I];
lName := SysUtils.Trim( system.Copy( lNetdataLine, 1, 8 ) );
lLink := system.LowerCase( SysUtils.Trim(system.Copy( lNetdataLine, 15, 12 ) ) );
// bypass lo0, enc0, pflog0, ....
if ( system.Pos('lo' , lName ) <> 0 ) or ( system.Pos('enc' , lName ) <> 0 ) or
( system.Pos('pflog' , lName ) <> 0 ) or ( system.Pos('ppp' , lName ) <> 0 ) or
( system.Pos('sl' , lName ) <> 0 ) or ( system.Pos('gif' , lName ) <> 0 ) or
( system.Pos('faith' , lName ) <> 0 ) or ( system.Pos('ng' , lName ) <> 0 ) or
( system.Pos('ngwan' , lName ) <> 0 ) or ( system.Pos('vlan' , lName ) <> 0 ) or
( system.Pos('wlan' , lName ) <> 0 ) or ( system.Pos('tun' , lName ) <> 0 ) or
( system.Pos('ipfw' , lName ) <> 0 ) or ( system.Pos('bridge', lName ) <> 0 ) or
( system.Pos('usbus' , lName ) <> 0 ) or ( system.Pos('<link>', lLink ) = 0 ) then
begin
Continue;
end;
// delete the * from ex: pcn0*
if (System.Pos('*', lName) <> 0) then
begin
lName := system.Copy( lName, 1, system.Length(lName)-1 );;
end;
gBsd_Interfaces[J].if_name := lName;
gBsd_Interfaces[J].if_mac := SysUtils.Trim( system.Copy( lNetdataLine, 27, 21) ) ;
J := J + 1;
end;
// Get driver names
lNetdata.Text := fpExecCmddMesg();
for I := 0 to 11 do
begin
lName := gBsd_Interfaces[I].if_name;
if lName = '' then
begin
Exit;
end;
for J := 0 to Pred(lNetdata.Count) do
begin
lNetdataLine := lNetdata.Strings[J];
if System.Pos( lName, lNetdataLine) = 1 then
begin
gBsd_Interfaces[I].if_drv := system.Copy( lNetdataLine, system.Pos('"', lNetdataLine), system.Length(lNetdataLine));
Break;
end;
end;
end;
finally
lNetdata.Free();
end;
end;