Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MACtoIP 
V
    Опции темы
Poseidon
Дата 21.2.2006, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Имеется локальная сеть с собственным сервером, каторый раздает IP адреса пользователям исходя из их MAC-адресов. Т.е., другими словами, у пользователей сети статические сетевые IP. Так вот как узнать сетевой IP, зная MAC-адрес?

В принципе можно получать и все IP-адреса машины, каторая имеет определенный MAC-адрес, а потом фильтровать. Но вот вопрос, как конвертировать MAC в IP?


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Snowy
Дата 21.2.2006, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Тут требуется некоторое уточнение.
Конвертировать MAC в IP однозначно нельзя. Можно конвертировать MAC в сетевой интерфейс, IP в сетевой интерфейс. Тут связь многие-ко-многим.
Хотя, наличием нескольких MAC адресов у одного сетевого интерфейса можно пренебречь.
Тогда задача сводитсяк получению списка IP адресов для сетевого интерфейса, имеющего заданны MAC.
Как правило он тоже один, но исключения довольно частые, чтобы ими пренебречь.
Итак, каковы исходные условия?
У тебя есть MAC.
Ты имеешь список IP или хочешь его получить?
Если имеешь, то тут все понятно - все эти IP и принадлежат данному MAC. Это и есть "конвертация". Однозначного представления не получить.
Если вопрос в том, как получить соответствие MAC = IP адреса. То порядок действия таков:
Для начала нужно пингануть все IP сети, чтобы заполнилась ARP таблица.
Затем берем нашу ARP таблицу и просто перибираем все записи.
В этом тебе поможет функция GetIpNetTable.
Там полное соответствие - сетевой интерфейс - MAC - IP. Разбивка по интерфейсу.
Пример рисовать не буду - в MSDN имеется вся необходимая инфа, а пример на дельфи подскажет любой поисковик.
Далее. Метод не очень оптимальный. Если требуется скорость, то лучше просмотреть ARP таблицу и пинговать только те IP, которых еще нет.
Вроде все.
Если что - спрашивай.
PM MAIL   Вверх
Poseidon
Дата 21.2.2006, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Цитата(Snowy @ 21.2.2006, 22:03 Найти цитируемый пост)
Итак, каковы исходные условия?
Условия следующие:
у меня есть локалка, в каторой IP можно молучить либо от сервера (постоянный и привязан к MAC), либо прописать вручную. Так вот мне в программе нужно привязка к IP. Т.е. я хочу в локалке точно знать у кого прога запущена (это легко сделать, зная IP, т.к. они статические). Но IP можно прописать самому и таким образом выйти в сеть под чужим адресом => программа тоже примет такого юзера за другого. Определить MAC-адрез машины, на катором запущена програма труда не составит (как и определить IP). Вот только подменить MAC гораздо сложднее, чем IP. Поэтому возникла идея, а почему бы не получать IP по MAC самостоятельно, как это делает Windows при подключении к сети при условии, что в настройках указано получение IP автоматом.
Про то, что нужно запросить у сетевого сервера (каторый IP раздает) ARP таблицу, я думал, только вот не совсем понял как. Если я буду иметь ARP таблицу, то тут вопросов нет. Но вот как ее получить?
В общем все уперлось в
Цитата(Snowy @ 21.2.2006, 22:03 Найти цитируемый пост)
нужно пингануть все IP сети, чтобы заполнилась ARP таблица.


PS. Возможно есть совершенно другой вариант задуманного...



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Snowy
Дата 22.2.2006, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Другого варианта нет. ARP таблица динамическая.
Она заполняется по мере обращения к IP адресам.
Обращаясь к IP, ты (точнее винда) посылаешь броадкаст: "Чей IP такой-то".
Любаямашина, знающая MAC, соответствующий этому IP, высылает ответ.
Ответ ложится в твою ARP таблицу.
Не обращаесь ни к кому, твоя ARP таблица пуста.
Проверяем:
Запускаем коммандную строку.
Даем комманду "apr -a"
Получаем распечатку ARP таблицы.
Делаем ping айпишника, которого в ней нет.
Снова даем "arp -a".
Вот он и появился.
По другому MAC ты не получишь - сама система устроена так.

PM MAIL   Вверх
Poseidon
Дата 22.2.2006, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Snowy, такой вопрос. Как мне получить ARP таблицу? smile
Т.е. то, что показывает cmd при "apr -a" меня вполне устраивает. Если это еще будет получатся с такой же скоростью, но вообще превосходно... smile


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Snowy
Дата 22.2.2006, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(Snowy @ 21.2.2006, 23:03 Найти цитируемый пост)
GetIpNetTable
Набери в гугляндексе "Delphi GetIpNetTable" Найдешь примеры.
Описание в MSDN.
Работает даже быстрее smile
Единственное, что не все записи могут там быть, тогда придется потратить время на пинг.
А кого пинговать? Придется всех.
PM MAIL   Вверх
Poseidon
Дата 22.2.2006, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Все, разобрался. Спасибо Snowy и Girder (за код) smile


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0499 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.