Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Определение MAC адреса у удаленного компьютера  (Прочитано 37118 раз)
0 Пользователей и 1 Гость смотрят эту тему.
DimOC
Гость
« : 19-08-2003 10:17 » 

Каким образом я могу получить MAC адрес удаленного сетевого интерфейса со своего компьютера.

И еще вопросик в догонку...
С помощью найденного примера в интернет, разобрался как получить IP адрес удаленной машины, но... существуют две сетки 10.1.55.1-254 и 10.1.56.0-254. Вот определить IP в своей сетке получается, а если я посылаю запрос в другой сегмент, то Name PC без проблем, а вместо IP адреса пусто.
В чем тут "грабли", или как можно это по другому реализовать.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #1 : 19-08-2003 14:24 » 

По моему это не тот форум для вопроса, это если по системе Windows то скорее к API относится или к Общему, ведь способы будут одни и теже...

МАС - это свойство железа - скажем модема, что ты имеешь ввиду???

Тем более что MAC не имеет никакого отношения к подсетям IP.
Записан

А птичку нашу прошу не обижать!!!
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #2 : 20-08-2003 07:46 » 

MAC адреса используются на канальном уровне модели OSI для идентификации жалеза.
А для согласования IP и МАС используются ARP запросы.
короче вот тебе
http://www.citforum.ru/nets/tpns/glava_5.shtml
http://www.citforum.ru/nets/tpns/glava_4.shtml
И вобще не доганяю в чем собственно проблема?
Записан

Странно всё это....
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #3 : 20-08-2003 08:08 » 

Цитата

media access layer, MAC

Тьфу, ребята вы хоть расшифровывайте, а то MAC фдрес в сетях всю жизнь аббревиатура расшифровывалась как адресс собственный модема. Он привязывался к железу...
А тут речь идет о кадрах Ethernet, DimOC, мы ж не телепаты - вопрос уточняй...

Если выложишь кусок своего кода - можно будет легче разобраться где грабли...
Записан

А птичку нашу прошу не обижать!!!
DimOC
Гость
« Ответ #4 : 20-08-2003 10:14 » 

Короче... Гром может Вы и правы и это не тот форум где мне можно задавать вопрос.

Проблема стоит следующая.
Реализация в Delphi опроса <сетевых карт> компьютеров в локальной сети на предмет IP/MAC адресов, используемых протоколов, user, NamePC, группа, Share. Так и есть у меня незнания в области получения информации именно об MAC адресе и некоторые незнания в областях Share, IP и работы с winsock32.dll

PS. Если я не в тему, то так и скажите... гоните меня с вашего форума (сел и расплакался).    Так больше нельзя... [/i][/b]
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #5 : 20-08-2003 10:53 » 

DimOC, Димок - ну ты меня расстраиваешь   Так больше нельзя... я серьезно, есть желание облегчить посик вопрсов и ответо и тем кто ищет и тем кто пишет эти самые ответы.
Спец по сетям не заглядывает в форум по дельфи, реализация сетевого обмена относится к сетям, поэтому и написано - не тот форум, зачем итак грубо и самоуничижительно...

Я прошу прощения за то что сначала не понял о чем идет речь и отвечал не в тему.

Уточни по MAC о чем идет речь???
Цитата

media access layer, MAC


или

Цитата

МАС - этоуникальный номер прошитый в модеме...


Тогда и ответить можно...

Вопросы по сокетам и вообще по всему - конкретизируй, что за пробелы в использоваини библиотеки Winsock... Код который не работает в студию ну и т.д.
Записан

А птичку нашу прошу не обижать!!!
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 20-08-2003 11:25 » 

Цитата: DimOC
Реализация в Delphi опроса <сетевых карт> компьютеров в локальной сети на предмет IP/MAC адресов, используемых протоколов, user, NamePC, группа, Share. Так и есть у меня незнания в области получения информации именно об MAC адресе и некоторые незнания в областях Share, IP и работы с winsock32.dll


Скажу без деталей, просто наведу на мысль (как на delphi это сделать я точно не знаю):

1)MAC - через протокол arp. Система его в обязательном порядке использует совместно с IP, значит и API должно где-то быть. На худой конец, должна быть таблица-кеш соответствий IP-MAC, к которым были обращения.
2)"используемых протоколов" - такое узнать о другом компе нельзя (разве что прослушиванием трафика).
3)"user" - кто залогинен узнать опять же не можно (до конца не уверен).
4)"NamePC, группа, Share" - все это, как я понимаю, относится к протоколу smb (или "служба файлов и принтеров"). Опять же, для этого тоже должно быть API в win32.
5)winsock - надо читать и экспериментировать - само не прибудет.

Вопрос слишком размыт - спрашивай лучше конкретно.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Александр
Опытный

kz
Offline Offline
Пол: Мужской
Угадай кто?


WWW
« Ответ #7 : 07-09-2003 06:16 » 

Получение MAC адреса компьютера
Взято с http://www.sources.ru/delphi/delphi_get_mac_address.shtml.
Автор: Daniel Wischnewski sakura@consultant.com

Для того, чтобы этот код работал, необходимо включить в проект юнит NB30. Простой вызов функции GetMACAddress возвращает адрес первого установленного сетевого адаптера.

Совместимость: Delphi 3.x (или выше)

Данный пример был составлен на основе статьи на сайте  Borland:
http://community.borland.com/article/0,1410,26040,00.html


uses
  NB30;

function GetAdapterInfo(Lana: Char): String;
var
  Adapter: TAdapterStatus;
  NCB: TNCB;
begin
  FillChar(NCB, SizeOf(NCB), 0);
  NCB.ncb_command := Char(NCBRESET);
  NCB.ncb_lana_num := Lana;
  if Netbios(@NCB) <> Char(NRC_GOODRET) then
  begin
    Result := 'mac not found';
    Exit;
  end;

  FillChar(NCB, SizeOf(NCB), 0);
  NCB.ncb_command := Char(NCBASTAT);
  NCB.ncb_lana_num := Lana;
  NCB.ncb_callname := '*';

  FillChar(Adapter, SizeOf(Adapter), 0);
  NCB.ncb_buffer := @Adapter;
  NCB.ncb_length := SizeOf(Adapter);
  if Netbios(@NCB) <> Char(NRC_GOODRET) then
  begin
    Result := 'mac not found';
    Exit;
  end;
  Result :=
    IntToHex(Byte(Adapter.adapter_address[0]), 2) + '-' +
    IntToHex(Byte(Adapter.adapter_address[1]), 2) + '-' +
    IntToHex(Byte(Adapter.adapter_address[2]), 2) + '-' +
    IntToHex(Byte(Adapter.adapter_address[3]), 2) + '-' +
    IntToHex(Byte(Adapter.adapter_address[4]), 2) + '-' +
    IntToHex(Byte(Adapter.adapter_address[5]), 2);
end;

function GetMACAddress: string;
var
  AdapterList: TLanaEnum;
  NCB: TNCB;
begin
  FillChar(NCB, SizeOf(NCB), 0);
  NCB.ncb_command := Char(NCBENUM);
  NCB.ncb_buffer := @AdapterList;
  NCB.ncb_length := SizeOf(AdapterList);
  Netbios(@NCB);
  if Byte(AdapterList.length) > 0 then
    Result := GetAdapterInfo(AdapterList.lana[0])
  else
    Result := 'mac not found';
end;
Записан

Бороться и искать, найти и перепрятать.
DimOC
Гость
« Ответ #8 : 12-09-2003 08:24 » 

Спасибо Александр, но это определение MAC своего сетевого адаптера... а нужно удаленного.

Ну, ладноть, если кому интересно, то прошу кушать....

Пояснения:
Перед исполнением кода пингуем несколько машин, таблица соответствий IP-MAC удаляется через некоторое время, смотрим с помощью ниже расположенного кода таблицу соответствий => ура!!! вот и MAC

 
Код:
_MIB_IPNETROW = Record
    dwIndex{ DWORD; // adapter index
    dwPhysAddrLen{ DWORD; // physical address length
    bPhysAddr{ Array[1..6(of Byte; // physical address
    dwAddr{ DWORD; // IP address
    dwType{ DWORD; // ARP entry type
  End;
  MIB_IPNETROW = _MIB_IPNETROW;
  _MIB_IPNETTABLE = Record
    dwNumEntries{ DWORD; // number of entries in table
    table{ Array[0..255(of MIB_IPNETROW; // array of ARP entries
  End;
  MIB_IPNETTABLE = _MIB_IPNETTABLE;


var
  Form1{ TForm1;



Function GetIpNetTable )Var pIpNetTable{ MIB_IPNETTABLE; // buffer for mapping table
Var pdwSize{ ULONG; // size of buffer
bOrder{ BOOL:{ DWORD; stdcall; // sort by IP address:;


implementation

Function GetIpNetTable )Var pIpNetTable{ MIB_IPNETTABLE;
Var pdwSize{ ULONG;
bOrder{ BOOL:{ DWORD; stdcall; external 'iphlpapi.dll';

|$R *.DFM"

Function ToHex)C{Byte:{ String;
Begin
Case C and $0F of
  0..9{ Result{=IntToStr)C and $0F:;
  10..15{ Result{=Chr)55+)C and $0F::;
End;
Case )C shr 4: and $0F of
  0..9{ Result{=IntToStr))C shr 4: and $0F:+Result;
  10..15{ Result{=Chr)55+))C shr 4: and $0F::+Result;
End;
End;

procedure TForm1.Button1Click)Sender{ TObject:;
Var
Table{ MIB_IPNETTABLE;
C, Size{ Cardinal;
begin
Size{=SizeOf)Table:;
C{=GetIpNetTable)Table, Size, False:;
Caption{=IntToStr)Table.dwNumEntries:;
For C{=0 to Table.dwNumEntries-1 do
Begin
  ListBox1.Items.Add)IntToStr))Table.table[c(.dwAddr: and $FF:+'.'+
  IntToStr)))Table.table[c(.dwAddr: shr 8: and $FF:+'.'+
  IntToStr)))Table.table[c(.dwAddr: shr 16: and $FF:+'.'+
  IntToStr)))Table.table[c(.dwAddr: shr 24: and $FF:+' - '+
  ToHex)Table.table[c(.bPhysAddr[1(:+'{'+
  ToHex)Table.table[c(.bPhysAddr[2(:+'{'+
  ToHex)Table.table[c(.bPhysAddr[3(:+'{'+
  ToHex)Table.table[c(.bPhysAddr[4(:+'{'+
  ToHex)Table.table[c(.bPhysAddr[5(:+'{'+
  ToHex)Table.table[c(.bPhysAddr[6(::;

End;
end;


Этому человеку спасибо за работоспособный код!
Johnny - johnny@monb.com

Еще раз СПАСИБО Всем за поддержку.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #9 : 12-09-2003 09:20 » 

Классно спаибо Димок - заходи еще почаще.
Записан

А птичку нашу прошу не обижать!!!
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines