2012-03-26 3 views
0

Для программного обеспечения для настройки ряда встроенных устройств мы должны найти устройства по IP-адресу. Для любого заданного адреса IPv4, мы должныPinging/получение MAC-адреса с IP-адреса, игнорируя кеш ARP

  • узнать МАС-адрес (поскольку адрес MAC может быть отфильтрован)
  • выяснить, если устройство является достижимым, то есть пинг его.

Я не уверен, что лучший способ сделать это. Сначала мы попробовали просто позвонить SendARP, и он работает достаточно хорошо, но он использует только кеш, если IP-адрес уже там, и не существует способа обойти это (кроме очистки всего кеша, который привилегированная операция). Это означает, что мы должны сделать второй шаг и просто выполнить ping-устройство (я думаю, что мы должны сначала его пинговать, а затем позвонить SendARP, если он достигнут), но это как-то кажется слишком большим шагом, если устройство доступно. Или будет ли правильный адрес уже в кеше ARP, если пинг был успешным? IP-адрес может часто менять свой соответствующий MAC-адрес, поскольку разные устройства подключены в отдельной сети, поэтому я думаю, что мы должны принудительно выполнить фактический запрос ARP.

Альтернатива, о которой я могу думать, это позвонить ResolveNeighbor/ResolveIpNetEntry2. По крайней мере, документация последнего, похоже, нужна нам (очистить кеш ARP для этого IP-адреса и отправить фактический запрос), но это только Vista или позже. В XP нам нужно было бы позвонить ResolveNeighbor, что проще, но больше не документировано. Это включает проверку правильной функции (или просто вызов ResolveNeighbor, и если она не удалась, что она документирована для Vista или позже, вызовите ResolveIpNetEntry2).

Я просто не уверен, каким будет лучший способ, или если я что-то упустил. Чтобы вы посоветовали? Обратите внимание, что я также взять чистое решение .NET, если есть;)

Update:

кажется, что ResolveNeighbor, несмотря на документально, не существует на Windows XP, по крайней мере, не в Iphlpapi.dll. Означает ли это, что функциональность недоступна в XP?


Чтобы понять это, я не проектирую устройства или процесс развертывания. Для решения этой проблемы просто предположим, что

  • все устройства уже имеют IP-адрес и
  • компьютер находится в той же подсети, но не обязательно принадлежат к сети (т.е. это портативный компьютер техник), и
  • IP-адрес известен при запуске инструмента, то есть пользователь может ввести их или прочитать их из файла конфигурации и
  • тот же компьютер, возможно, даже без перезапуска инструмента, был использован всего несколько секунд, прежде чем подключаться к совершенно другая сеть с теми же самыми IP-адресами, например, другое здание, которое выкладывается одинаково.

Это означает, что я мог бы иметь IP 192.168.0.100 в здании A, который является MAC-адрес A, а затем подключите компьютер к созданию B, который также имеет IP 192.168.0.100, но на этот раз это MAC-адрес B Пользователь говорит «connect to 192.168.0.100», и мы должны убедиться, что 192.168.0.100 не только доступно, но на самом деле MAC B, а не MAC A.Я думаю, что ResolveIpNetEntry2 на самом деле позволил мне сделать это, но он недоступен в Windows XP, и, похоже, для этого нет альтернативы.

Я не уверен, как еще я могу получить эту точку. Дело не в том, как обнаружить или установить устройства.

+0

Что такое встроенное устройство, и вы ожидаете его работы в корпоративной среде? – MattH

ответ

1

IP-адрес может изменяться соответствующим MAC-адресом относительно часто, поскольку разные устройства подключены в отдельной сети, поэтому я думаю, что мы должны принудительно выполнить фактический запрос ARP.

Да?

узнать МАС-адрес (поскольку адрес MAC может быть отфильтрована)

с какой целью?

Я думаю, вам нужно сделать шаг назад, потому что прямо сейчас я думаю, что вы спрашиваете «Мне нужно получить MAC-адрес IP-адреса в другой подсети». Это невозможно.

Похоже, вы пытаетесь разработать программное обеспечение для управления устройствами, подключенными к сети, и вы ищете решение для поиска услуг.


Update после комментария:
Это программное обеспечение для конфигурирования и обновления сетевых контроллеров автоматизации зданий. Многие из этих устройств будут прикреплены к компьютеру и удалены с него. Может быть несколько устройств с одним и тем же IP-адресом, прикрепленным к компьютеру Tech (один за другим, а не в одно и то же время), поэтому мы не можем полагаться на кеш ARP, чтобы выяснить MAC-адрес. Устройства будут находиться в той же подсети, что и компьютер (т. Е. Компьютер будет подключен к подсети устройств). Если вы знаете еще один способ: a) выполнить ping-устройство и b) получить его MAC-адрес, я благодарен :)

Итак, ваш процесс - это два шага?

  • Способ постановки, где устройства присоединены к управляющему компьютеру, будут обнаружены и сконфигурированы
  • В более поздний момент времени, устройства будут размещены и прикреплены к одной и той же подсети с управляющим компьютером.

Устройства поставляются с предварительно сконфигурированным с тем же IP-адресом?

Если вы можете выполнить ping-устройство в той же подсети, кэш-память arp должна иметь правильный MAC-адрес. Однако, если сценарий означает, что существует возможность подключения нескольких устройств к конкурированию за один и тот же IP-адрес, у вас возникнут проблемы.

Если вы ожидаете, что сможете продать эти устройства в среде кампуса, вы не сможете полагаться на все устройства, находящиеся в одной подсети, или находиться в той же подсети, что и контроллер. Подсети могут быть недоступны между зданиями.

Моим первым предложением для проектирования было бы, чтобы устройства приобретали свои IP-адреса через DHCP и включали имя или адрес контроллера (ов) в качестве опции DHCP. Контроллер реализуется как «сервер». Устройства могут собирать свои конфигурации с контроллера. Устройства могут регистрироваться контроллером во время работы.Множество вариантов внедрения безопасности с подписями конфигураций. Сертификат, прошедший проверку подлинности, и т. Д. И т. Д.


Обновление после обновления вопроса.

Я не уверен, как еще я могу получить эту точку. Объяснение сценария - хорошее начало.

Сказать, что Многие из этих устройств будут прикреплены к компьютеру и удалены с него. - своеобразный способ описания того, что вы разработали с тех пор.

Я перестану пытаться угадать, что вы делаете, и я перестану пытаться спасти вас от себя.

Да, если вы можете успешно выполнить ping IP-адрес в той же подсети, тогда кеш ARP должен содержать текущий MAC-адрес для этого IP-адреса. Я предлагаю вам протестировать это для каждой операционной системы, которую вы используете, поскольку могут быть капризы относительно доступа к кэшам.

+0

Это программное обеспечение для настройки и обновления сетевых контроллеров автоматизации зданий. Многие из этих устройств будут прикреплены к компьютеру и удалены с него. Может быть несколько устройств с одним и тем же IP-адресом, прикрепленным к компьютеру Tech (один за другим, а не в одно и то же время), поэтому мы не можем полагаться на кеш ARP, чтобы выяснить MAC-адрес. Устройства будут находиться в той же подсети, что и компьютер (т. Е. Компьютер будет подключен к подсети устройств). Если вы знаете другой метод, чтобы надежно a) выполнить ping-устройство и b) получить его MAC-адрес, я благодарен :) – OregonGhost

+0

Я обновил свой вопрос, возможно, это делает проблему более ясной. Тем не менее, вы говорите, что * Если вы можете выполнить ping-устройство в одной подсети, кэш-память arp должен иметь правильный адрес mac * - означает ли это, что если я сделаю ICMP-пинг на контроллер и после этого вызову SendARP, я надежно получить правильный MAC-адрес, даже если IP-адрес принадлежал другому MAC-адресу всего за несколько минут до этого? (Обратите внимание, что устройства не меняют адреса случайным образом, это всегда делается вручную (;) – OregonGhost

+1

Если вы выполняете ping для контроллера, а ping успешно завершается, а затем вы получаете MAC из кэша ARP, у него будет MAC-адрес ластлей адреса который ответил на пинг, поэтому он должен быть хорошим. –

1

То, что я делал в прошлом в аналогичной ситуации, это Ping на требуемый адрес, а затем выполнить из C# applitacion команду arp, чтобы получить желаемый MAC.

Каждый раз, когда вам нужно получить доступ к MAC, вы обновляете его, выполняя этот процесс.

Смежные вопросы