Это очень поздно и без ответа, но я хотел уточнить, что именно я сделал, на случай, если кто-то еще заинтересуется.
Я работал с очень странным встраиваемым оборудованием, которому не был назначен MAC-адрес при производстве. Это означает, что нам нужно было назначить один в программном обеспечении.
Очевидное решение состоит в том, чтобы пользователь выбрал MAC-адрес, который, как он знает, доступен в его сети, предпочтительно из локально администрируемого диапазона, что я и сделал. Однако я хотел выбрать достаточно безопасное значение по умолчанию, а также попытаться предупредить пользователя в случае возникновения конфликта.
В конце концов я прибегнул к выбору случайного значения по умолчанию в локально управляемом диапазоне, выбранном путем выполнения некоторых аппаратных показаний с умеренной энтропией. Я намеренно исключил начало и конец диапазона, полагая, что они с относительно большей вероятностью будут выбраны вручную. Вероятность того, что в любой данной сети будет только одно такое устройство, и уж точно меньше 20, поэтому вероятность конфликта очень мала, хотя и не настолько мала, как могла бы быть из-за несколько предсказуемых случайных чисел.
Учитывая низкую вероятность возникновения проблемы и несмотря на превосходные ответы выше, я решил обойтись без обнаружения конфликтов и ограничиться предупреждением пользователя, чтобы он обращал внимание на конфликты MAC-адресов.
Если бы я решил внедрить обнаружение конфликтов, то, учитывая, что я контролирую весь сетевой стек, я бы, вероятно, высматривал избыточные неизвестные или отсутствующие пакеты, а затем инициировал изменение MAC-адреса или предупреждал пользователя, когда это происходит.
Надеюсь, это поможет кому-то еще где-то — но, вероятно, нет!
person
Daniel Cassidy
schedule
04.08.2010