вторник, 23 марта 2010 г.

генерация случайного MAC адреса

Имеем серию (ну пару тысяч экземпляров) сетевых устройств. Чтобы сетевое устройство могло корректно существовать, ему необходим уникальный MAC адрес. Предположим, что наши устройства существуют в своем мирке, встречаясь только друг с другом, а не с внешним большим и злым миром. Значит нам необязательно назначать им адекватные, зарегестрированные в общемировых реестрах MAC адреса. Собственно назначение каких-либо адекватных MAC-ов сопряжено с кучей неприятностей на практике, не будем их касаться, попробуем для каждого устройства динамически (т.е. устройство само это делает) генерировать адекватный, с достаточной степенью уникальный MAC-адрес.

Что есть такого уникального в серии из кучи одинаковых железяк? А шут его знает. :) Но тем не менее, sshd умудряется генерировать для каждой из этих плат уникальные RSA и DSA ключи. Вот! Вот она уникальность! Как ей воспользоваться? Легко:

md5sum /etc/ssh_rsa_host_key | cut -f1 -d" " | tail -c 11 | sed -e :a -e 's/\([0-z]\{2\}\)\([0-z]\{2\}\)/\1:\2/;ta'

Ну принцип понятен (тут еще кое-что надо добавить, чтобы заработало). :)

Попроще, на awk:

md5sum /etc/ssh_rsa_host_key | cut -f1 -d" " | tail -c 10 | awk '{ split($1,M,""); printf("address 00:"); for (j=1; j<=7; j+=2) printf("%s%s:",M[j],M[j+1]); printf("%s%s",M[8],M[9]); }' > /etc/net/ifaces/eth0/iplink

Вместо /etc/ssh_rsa_host_key можно использовать что угодно другое, уникальное.

На мысль натолкнул один патентик, где осуществлялась генерация уникальных MAC адресов для wi-fi устройств.

Комментариев нет: