Можно ли такое сделать и с помощью чего ??
На большинстве сетевух можно.
Если скажешь какая сетевуха конкретно тебя интересует, я скажу что нужно доработать с ядре.
Надо добавить пару функций в ioctl, и ты из любой программы сможешь менять мак.
man ifconfig
ifconfig eth0 down
ifconfig eth0 hw ether 00:01:02:03:04:...
ifconfig eth0 up
что-то типа этого
Я подумал что в вопросе явно что-то не описано!
Какая система?
Откуда ты хочешь менять мак адреса?
с консоли?
или программным способом?кстати во FreeBSD у ifconfig параметра hw нет, есть lladdr...
глубинно происходит ioctl - SIOCSIFLLADDR,
Только он далеко не всеми сетевухами поддерживается.
Выставил я lladdr 12:34:56:78:90:12 - скушал, но сетка перестала работать ;). down, up - заработала сетка, ifconfig показывает 12:34:56:78:90:12, но когда пингую с другой машины и смотрю кэш arp, то вижу её родной мак, а не этот новый. Что это значит, моя сетевуха не поддерживает смену мак-адреса? Или надо в ядре что-то крутить и перекомпилить? (ioctl - как имненно? Допустим у меня он называется de0, tulip)
Ну во первых ARP записи живут долго... У меня около 20 минут... то есть если ты на одной тачке поменял мак, то с другой тачки пакеты ходить не будут, надо сперва прибить ARP запись... или с изменившейся тачки разослать всем что нибудь...Теперь по поводу драйвера...
Хм... помоему это не должно работать...
ifconfig не каких варнингов не выдает?
типа того:
ioctl (set lladdr)
?
Время жизни кэша arp я учёл, там всё в норме.
...дык и не работает фактически :)
и ворнингов нет никаких, тихо показывает себе новый мак-адрес, фактически продолжая использовать старый. Пинг сам себя с последующей проверкой кэша arp это подтверждает. Так и что делать с этим ioctl, сделайте одолжение, объясните чайнику, желательно степ-бай-степ :) (ката у меня de0: DEC 21142 [10-100Mb/s] ), может ещё кому пригодится.
Ну надо в pci/if_de.c добавить парочку ioctlВот подробнее...
находишь функцию tulup_ioctl,
Там идет switch по cmd...Находишь там такое место:
default: {
tulip_init(sc);
break;
}И перед этим добавляешь:
case SIOCSIFLLADDR:
/* Set HW addr for adapter! */
memcpy (sc->tulup_enaddr, ifr->ifr_addr.sa_data, 6);
tulup_init (sc);break;
case SIOCGIFLLADDR:
/* Get HW addr for adapter! */
ifr->ifr_addr.sa_len = 6;
ifr->ifr_addr.sa_family = AF_LINK;
memcpy (ifr->ifr_addr.sa_data, sc->tulup_enaddr, 6);break;
Вот, и тогда сможешь менять и получать эзернет адреса, только не гарантирую что изменения будут отражаться в ifconfig...
PS: только щас все табы порежуться... :( ну разберешься... :)