Как считать MAC-адрес??

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Как считать MAC-адрес??

Сообщение Yurakl » 02.04.2010 08:40:34

Добрый день!
Подскажите, пожалуйста, как можно считать MAC-адрес устройства(компьютера) при помощи lazarus на линуксе?
Yurakl
новенький
 
Сообщения: 62
Зарегистрирован: 20.01.2010 08:59:53

Re: Как считать MAC-адрес??

Сообщение Brainenjii » 02.04.2010 08:53:57

Я бы сделал схожим образом -
Код: Выделить всё
  aProcess := TProcess.Create(Nil);
  {$IFDEF windows}
  aProcess.Commandline := 'ipconfig';
  {$ENDIF}
  {$IFDEF unix}
  aProcess.Commandline := '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('IP', aStrings[i]) = 0) And Not(Pos(':', aStrings[i]) = 0) Then
      Begin
        aString := aStrings[i];
        Delete(aString, 1, Pos(':', aString));
        WriteLn(aString);
      End;
    {$ENDIF}
    {$IFDEF unix}
    If Not(Pos('inet', aStrings[i]) = 0) And
      Not(Pos('netmask', aStrings[i]) = 0) Then
      Begin
        aString := aStrings[i];
        Delete(aString, 1, Pos('inet', aString) + 4);
        aString := Copy(aString, 1, Pos('netmask', aString) - 1);
        WriteLn(aString);
      End;
    {$ENDIF}
  aStrings.Free;
переписав для MAC адреса. Линукса под рукой нет Т_Т
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Как считать MAC-адрес??

Сообщение Yurakl » 05.04.2010 08:43:34

Brainenjii
здесь какая-то библиотека дополнительная используется для считывания адреса??
Yurakl
новенький
 
Сообщения: 62
Зарегистрирован: 20.01.2010 08:59:53

Re: Как считать MAC-адрес??

Сообщение Brainenjii » 05.04.2010 08:58:57

Да вроде нет ^_^ Тут запускается стандартная утилита (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.

Хотя кошмар ^_^ Было бы чуть-чуть лучше, если бы использовались регулярные выражения, но не умею ^_^
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Как считать MAC-адрес??

Сообщение Yurakl » 05.04.2010 16:02:52

Спасибо, я немного изменил и все работает:))
Yurakl
новенький
 
Сообщения: 62
Зарегистрирован: 20.01.2010 08:59:53


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35

Рейтинг@Mail.ru