Для программного обеспечения для настройки ряда встроенных устройств мы должны найти устройства по 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, и, похоже, для этого нет альтернативы.
Я не уверен, как еще я могу получить эту точку. Дело не в том, как обнаружить или установить устройства.
Что такое встроенное устройство, и вы ожидаете его работы в корпоративной среде? – MattH