![]() |
|
Модераторы: Snowy, Poseidon, MetalFan |
![]()
|
|
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 4 Всего: 133 |
Имеется локальная сеть с собственным сервером, каторый раздает IP адреса пользователям исходя из их MAC-адресов. Т.е., другими словами, у пользователей сети статические сетевые IP. Так вот как узнать сетевой IP, зная MAC-адрес?
В принципе можно получать и все IP-адреса машины, каторая имеет определенный MAC-адрес, а потом фильтровать. Но вот вопрос, как конвертировать MAC в IP? -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 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, которых еще нет. Вроде все. Если что - спрашивай. |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 4 Всего: 133 |
Условия следующие:
у меня есть локалка, в каторой IP можно молучить либо от сервера (постоянный и привязан к MAC), либо прописать вручную. Так вот мне в программе нужно привязка к IP. Т.е. я хочу в локалке точно знать у кого прога запущена (это легко сделать, зная IP, т.к. они статические). Но IP можно прописать самому и таким образом выйти в сеть под чужим адресом => программа тоже примет такого юзера за другого. Определить MAC-адрез машины, на катором запущена програма труда не составит (как и определить IP). Вот только подменить MAC гораздо сложднее, чем IP. Поэтому возникла идея, а почему бы не получать IP по MAC самостоятельно, как это делает Windows при подключении к сети при условии, что в настройках указано получение IP автоматом. Про то, что нужно запросить у сетевого сервера (каторый IP раздает) ARP таблицу, я думал, только вот не совсем понял как. Если я буду иметь ARP таблицу, то тут вопросов нет. Но вот как ее получить? В общем все уперлось в PS. Возможно есть совершенно другой вариант задуманного... -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Другого варианта нет. ARP таблица динамическая.
Она заполняется по мере обращения к IP адресам. Обращаясь к IP, ты (точнее винда) посылаешь броадкаст: "Чей IP такой-то". Любаямашина, знающая MAC, соответствующий этому IP, высылает ответ. Ответ ложится в твою ARP таблицу. Не обращаесь ни к кому, твоя ARP таблица пуста. Проверяем: Запускаем коммандную строку. Даем комманду "apr -a" Получаем распечатку ARP таблицы. Делаем ping айпишника, которого в ней нет. Снова даем "arp -a". Вот он и появился. По другому MAC ты не получишь - сама система устроена так. |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 4 Всего: 133 |
Snowy, такой вопрос. Как мне получить ARP таблицу?
Т.е. то, что показывает cmd при "apr -a" меня вполне устраивает. Если это еще будет получатся с такой же скоростью, но вообще превосходно... -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
||||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 4 Всего: 133 |
Все, разобрался. Спасибо Snowy и Girder (за код)
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
![]()
|
| Правила форума "Delphi: Сети" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |