Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

мак адрес по ip в сети [D6, D7, Win95/98, WinME, Win2k, WinXP]


Страницы:   1 2

Aplay ©   (2004-04-24 08:04:00) 

Подскажите как узнать мак адрес сетевой карты в делфе зная только IP по сети


Verg   (2004-04-24 16:52:00) [21]


> Piter ©   (24.04.04 16:26) [17]
> Verg, а ты это кому? Я знаю это...


"Ф"сем, кто не знает.

Форум тут. Забыл?


Piter   (2004-04-24 16:26:00) [22]

Verg, а ты это кому? Я знаю это...


Verg   (2004-04-24 15:22:00) [23]

ARP - Address Resolution Protocol

  Между физическими ethernet-адресами и логическими IP-адресами
  никакого прямого соответсвия нет. Для того, чтобы отправитель
  пакета мог узнать, по какому физическому адресу отпрявлять пакет,
  существует протокол ARP (Address Resolution Protocol). ARP описан
  в RFC826

  ARP'овский пакет состоит из ethernet'овского заголовка, за которым
  идут собственно ARP'овские данные.

       typedef struct
           {
           ushort      arp_hardware;
           ushort      arp_protocol;
           uchar       arp_alen_hard;
           uchar       arp_alen_ip;
           ushort      arp_opcode;
           uchar       arp_asrc_hard[6];
           ulong       arp_asrc_ip;
           uchar       arp_adst_hard[6];
           ulong       arp_adst_ip;
           }
           arp_packet;

  arp_hardware  - 1, обозначает, что мы живем на ethernet'е
  arp_protocol  - 0x800. Обозначает, что мы разговариваем по IP, а не по,
                  скажем, IPX'у.
  arp_alen_hard - 6, длина аппаратного адреса.
  arp_alen_ip   - 4, длина логического (IP) адреса
  arp_opcode    - 1 - для ARP-запроса (ARP-request)
                  2 - для ARP-ответа (ARP-reply)
  arp_asrc_hard - аппаратный адрес отправителя
  arp_asrc_ip   - IP-адрес отправителя. Может быть 0, если отправитель
                  не знает своего адреса (а только собирается узнать)
  arp_adst_hard - аппаратный адрес получателя. В arp-запросе поле
                  не используется, поскольку адреса получателя мы
                  еще не знаем.
  arp_adst_ip   - IP-адрес получателя.

  ARP работает следующим образом. Машина, желающая что-то отправить
  по данному IP-адресу, формирует ARP-запрос, заполняя в нем все, кроме
  аппаратного адреса получателя пакета. Этот пакет отправляется
  ethernet'овским бродкастом всем машинам на сети. Та машина, которая
  узнала в IP-адресе получателя себя, заполняет и отправляет назад,
  но уже юникастом, ARP-ответ. При получении ARP-ответа надо проверить,
  что IP-адрес отправителя - это то, что мы хотели, и взять из
  ARP-пакета (но не ethernet'овского хидера!) искомый аппаратный адрес.
  Поскольку ARP-запросы посылаются бродкастом, а в ARP-ответе не
  ethernet'овский заголовок никто не смотрит, можно сделать ARP-сервер,
  который посылает ARP-ответы за кого-то. Иногда эта возможность бывает
  полезной.

  Хотя этого нигде и не сказано, ARP-овские пакеты надо посылать
  с интервалом где-нибудь в полсекунды раз шесть, пока не будет
  получен ответ (впрочем, если не получив ответа все равно делать
  ничего полезного нельзя, их можно посылать до бесконечности).

  Кстати, получив ARP-запрос, есть смысл запомнить из него IP и
  ethernet-адреса отправителя, скорее всего он скоро захочет с нами
  разговаривать, и они нам пригодятся. Надо только проверить, что
  эти IP-адрес правдоподобен.

  Информацию, полученную по ARP'у следует где-нибудь кешировать, и
  забывать через полминуты после последнего использования (или если
  получен более новый ARP-пакет, отменяющий наши знания). Если этого
  не делать, то после смены ethernet'овской карточки на какой-нибудь
  машине в сети, мы можем навсегда потерять возможность с ней общаться.

Copyright (c) by Alexander Pevzner (pzz@pzz.msk.ru), 1998-1999


Piter   (2004-04-24 15:19:00) [24]

Verg (24.04.04 14:30) [13]
Как что даст?! Это даст то, что в ARP кэше появится MAC адрес целевого хоста


а, ну да. Я про то, что если в буфере есть такая запись - то заново пинговать не надо.
Так что лучше посмотреть - есть ли она, а уж потом попинговать, если нету.

Verg (24.04.04 14:30) [13]
Все это вообще справедливо (И ARP-кэш и SendARP) только, если мы находимся в одном физическом сегменте с тем самым IP-MAC-икс хостом


Я тоже так считаю. Только вот ESSNT при сканировании выдает MAC адрес удаленного компьютера... а происходит все в интернете, связь только по IP...


Rouse_   (2004-04-24 15:11:00) [25]

> а что это даст? пинговаться будет, исходя из буфера...
Из какого?

> а зачем MAC адрес модему?
Ответ я тебе уже дал...


Verg   (2004-04-24 14:30:00) [26]


> Piter ©   (24.04.04 13:01) [6]
> Verg (24.04.04 12:39) [5]
> GetIpNetTable вернет содержимое ARP кэша.
> Так что, перед этим надо хотя бы попинговать целевой IP
>
> а что это даст? пинговаться будет, исходя из буфера...


Как что даст?! Это даст то, что в ARP кэше появится MAC адрес целевого хоста.

Все это вообще справедливо (И ARP-кэш и SendARP) только, если мы находимся в одном физическом сегменте с тем самым IP-MAC-икс хостом.


Piter   (2004-04-24 14:14:00) [27]

а-а-а... я понял.

Я только не понял ответа на свой вопрос:

>а зачем MAC адрес модему?


Piter   (2004-04-24 14:10:00) [28]

а где тут IP интерфейс?


Rouse_   (2004-04-24 14:03:00) [29]

> [9] Piter ©   (24.04.04 13:26)
Ну давай вспомним семиуровневую модель OSI

OSI Model Layer

  --------------  -----------------------------------------------------
               |  |                                                  |
  7 - Applica- |  |        User Applications                         |
      tion     |  |                                                  |
  --------------  -----------------------------------------------------
  --------------  -----------------------------------------------------
               |  |           Operating System                       |
  6 - Presen-  |  |                  &                               |
      tation   |  |       Microsoft OS/2 LAN Manager                 |
  --------------  -----------------------------------------------------
                  ********** NetBIOS Interface **********************
  --------------  --------------- ------------ ----------- ------------
               |  |           | |          | |         | |           |
  5 - Session  |  | Microsoft | | XNS      | | Other   | | Ungermann |
               |  | NetBEUI   | | Protocol | | Protocol| |  Bass     |
  --------------  | Protocol  | | Driver   | | Driver  | | PCNIU     |
  --------------  | Driver    | |          | |         | | Driver    |
               |  |           | |          | |         | |           |
  4 - Trans-   |  |           | |          | |         | |           |
      port     |  |           | |          | |         | |           |
  --------------  |           | |          | |         | |           |
  --------------  |           | |          | |         | |           |
               |  |           | |          | |         | |           |
  3 - Network  |  |           | |          | |         | |           |
               |  |           | |          | |         | |           |
  --------------  ------------- ------------ ----------- |           |
                    ********** NDIS Interface  ********* |           |
  --------------  ------------- ------------ ----------- |           |
               |  | IBM Token | |3Com Ethnt| | Other   | |           |
  2 - Data     |  | Ring MAC  | |  MAC     | | MAC     | |           |
      Link     |  |  Driver   | | Driver   | | Driver  | |           |
  --------------  ------------- ------------ ----------- -------------
  --------------  ------- ------- ------------ ----------- ------------
               |  | TR  | | TR  | | Ethernet | | Other   | | UB PCNIU |
  1 - Physical |  |Adptr| |Adptr| | Adapter  | | Adapter | |   LAN    |
               |  | #1  | | #2  | |          | |         | |  Adapter |
  --------------  ------- ------- ------------ ----------- ------------


Внимательней присмотрись к второму уровню...


Piter   (2004-04-24 13:26:00) [30]

uny   (24.04.04 13:22) [8]
это не он?


не знаю

Rouse_ (24.04.04 13:15) [7]
Да ну?
Стало быть только для сетевых и точка?


а зачем MAC адрес модему?


uny   (2004-04-24 13:22:00) [31]

Piter, а ваша программа которая по интерфейсам считает трафик даже определила какой то мак номер, но он странный - так это не он?


Rouse_   (2004-04-24 13:15:00) [32]

> Так что, перед этим надо хотя бы попинговать целевой IP.
Забыл это упомянуть...

> Да? Всю жизнь думал, что MAC адрес есть только у сетевых
> карт, для них и предназначен.

Да ну?
Стало быть только для сетевых и точка?
Ну-ну...


Piter   (2004-04-24 13:01:00) [33]

Rouse_ (24.04.04 12:28) [4]
но если мобильный подключен как модем - до конечно будет...


Да? Всю жизнь думал, что MAC адрес есть только у сетевых карт, для них и предназначен.

Verg (24.04.04 12:39) [5]
GetIpNetTable вернет содержимое ARP кэша.
Так что, перед этим надо хотя бы попинговать целевой IP


а что это даст? пинговаться будет, исходя из буфера...


Verg   (2004-04-24 12:39:00) [34]


> Rouse_ ©   (24.04.04 10:28) [2]


GetIpNetTable вернет содержимое ARP кэша.
Так что, перед этим надо хотя бы попинговать целевой IP.


Rouse_   (2004-04-24 12:28:00) [35]

По skylink не в курсе, но если мобильный подключен как модем - до конечно будет...


uny   (2004-04-24 10:36:00) [36]

а есть ли mac адрес у сотового? если skylink?


Rouse_   (2004-04-24 10:28:00) [37]

Только есть один минус:
SendARP - применима только для NT
для Win 9x-Me придется воспользоваться GetIpNetTable
Пример возьми здесь:
http://www.delphimaster.ru/cgi-bin/download.pl?look=1&id=1078646471&n=1


Verg   (2004-04-24 08:29:00) [38]

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо