Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > MAC адрес по IP


Автор: mrVerus 24.9.2009, 06:01
Здравствуйте! Помогите пожалуйста!!! Как получить MAC по IP в ЛС, мне это нужно для написания проги Wake UP'a
Смотрел все темы не разобрался

Автор: niteo 24.9.2009, 07:42
Вот есть исходничек, там как раз определяется MAC удаленного хоста.
http://rouse.front.ru/infofromip.zip

Или пробуй так:
ping target
arp -a target

Автор: mrVerus 24.9.2009, 08:14
Понимаете эти команды не проходят. Можно ли компактный код получения МАКА по ИП7

Автор: niteo 24.9.2009, 08:51
Цитата(mrVerus @  24.9.2009,  08:14 Найти цитируемый пост)
Понимаете эти команды не проходят.

Это виндузовские команды. их нада в командной строке набирать. Их можно и из прожки вызвать, и перехватить вывод консоли. Вот и будет тебе МАС адрес smile А лучше посмотри исходничек. Кстати, он же есть и в DRKB.

Автор: ~FoX~ 24.9.2009, 09:08
mrVerus, Заниматься засылом АРП пакетов и раскорячивать ответ мне лениво так что просто шлем запрос и получаем из структуры ответа МАК, после чего превращаем в удобоваримую форму
Код

uses Winsock;

  function SendARP(const DestIP, SrcIP: ULONG;
    pMacAddr: PULONG; var PhyAddrLen: ULONG): DWORD; stdcall; external 'IPHLPAPI.DLL';

type
   TMacAddress = array [1..6] of byte;


function GetMAC(Value: TMacAddress; Length: DWORD): String;
var
  I: Integer;
begin
  if Length = 0 then Result := '00-00-00-00-00-00'
  else begin
    Result := '';
    for i:= 0 to Length - 2 do
      Result := Result + IntToHex(Value[i], 2) + '-';
    Result := Result + IntToHex(Value[Length-1], 2);
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  DestIP, SrcIP: ULONG;
  pMacAddr: TMacAddress;
  PhyAddrLen: ULONG;
begin
  DestIP := inet_addr('192.168.0.254');
  PhyAddrLen := 6;
  SendArp(DestIP, 0, @pMacAddr, PhyAddrLen);
  Form1.Caption := GetMAC(pMacAddr, PhyAddrLen);
end;


Естественно, что ты можешь определить MAC только внутри своей подсети...
И естественно что записи 127.0.0.1 в АРП таблице нету, т.е. определить собственный МАК по 127.0.0.1 не получиться, придется указывать истинный ИП

Автор: mrVerus 24.9.2009, 09:18
А что за функция Inet_addr();7

Автор: ~FoX~ 24.9.2009, 09:20
Забыл, поставь в uses Winsock
Подправил первый пост...А если не хочится тащить весь модуль то вот описание функции

Код

  function inet_addr(IPAddr: PChar): ULONG;    stdcall;      external    'wsock32.dll';



Автор: mrVerus 24.9.2009, 09:26
Извините тормазнул вопрос снят!
Огромное спасибо Вам! Дорости бы до вашего уровня

Автор: ~FoX~ 24.9.2009, 09:28
[off]
mrVerus, Какие ваши годы  smile 

[/off]

Автор: mrVerus 24.9.2009, 11:25
Еще раз ОГРОМНОЕ СПАСИБО!!!!
Закрываю вопрос

Автор: mrVerus 25.9.2009, 07:00
Адреса получаю но не MAC'и функция дает не верные адреса smile 

Автор: mrVerus 25.9.2009, 08:51
Все понял! Это я ламер! Просто в типе TMacAddress = array [1..6] of byte нужно полставить массив ни с 1, а с 0. ТЕ  TMacAddress = array [0..5] of byte; Совсем отупел smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)