Да вроде нет ^_^ Тут запускается стандартная утилита (ifconfig) и парсится её выход... Разумеется, сама утилита должна существовать ^_^ Если пускается не под рутом - попробуйте чуть-чуть поменять:
- Код: Выделить всё
- // old
 {$IFDEF unix}
 aProcess.Commandline := 'ifconfig';
 {$ENDIF}
 //new
 {$IFDEF unix}
 aProcess.Commandline := '/sbin/ifconfig';
 {$ENDIF}
 
Тут считывается IP адрес, кстати, для мак будет:
- Код: Выделить всё
- program Project1;
 
 {$mode objfpc}{$H+}
 
 uses
 {$IFDEF UNIX}{$IFDEF UseCThreads}
 cthreads,
 {$ENDIF}{$ENDIF}
 Classes, process
 { you can add units after this };
 
 {$R project1.res}
 
 Var
 aProcess: TProcess;
 aStrings: TStringList;
 aString, aBuffer: String;
 i: Integer;
 
 begin
 
 aProcess := TProcess.Create(Nil);
 {$IFDEF windows}
 aProcess.Commandline := 'ipconfig /all';
 {$ENDIF}
 {$IFDEF unix}
 aProcess.Commandline := '/sbin/ifconfig';
 {$ENDIF}
 aProcess.Options := [poUsePipes,poNoConsole];
 aProcess.Execute;
 SetLength(aBuffer, 1000);
 Repeat
 i := aProcess.Output.Read(aBuffer[1], Length(aBuffer));
 aString := aString + Copy(aBuffer, 1, i);
 Until i = 0;
 aProcess.Free;
 aStrings := TStringList.Create;
 aStrings.Text := aString;
 For i := 0 To aStrings.Count - 1 Do
 {$IFDEF windows}
 If Not(Pos(':', aStrings[i]) = 0) And Not(Pos('-', aStrings[i]) = 0) Then
 Begin
 aString := aStrings[i];
 Delete(aString, 1, Pos(':', aString) + 1);
 If Length(aString) = 17 Then WriteLn(aString);
 End;
 {$ENDIF}
 {$IFDEF unix}
 If Not(Pos('ether ', aStrings[i]) = 0) Then
 Begin
 aString := aStrings[i];
 Delete(aString, 1, Pos('ether ', aString) + 5);
 WriteLn(aString);
 End;
 {$ENDIF}
 aStrings.Free;
 ReadLn;
 end.
 
Хотя кошмар ^_^ Было бы чуть-чуть лучше, если бы использовались регулярные выражения, но не умею ^_^