>Программа почти написана. Осталось послать фрейм) имхо дело за флагами и последними
>аргументами sendto().Когда я говорил о другом решении, я имел в виду, что вполне возможно, писать ничего не нужно, так как всё уже написано. А то, что вы говорите, что sendto возвращает ошибку, но даже не указываете, какую именно и утверждаете, что сокет у вас сетевого уровня, когда он у вас канального, только укрепляет в мысли, что вы затеяли что-то такое, чего затевать не стоило. К тому же, могу ошибаться, давно с сырыми/пакетными сокетами ничего не делал, но вы уверены, что вот это: sock = socket(PF_PACKET,SOCK_PACKET,htons(ETH_P_ALL));
то, что нужно? Так как у меня в мане написано, что SOCK_PACKET - устаревшая штука и относится аж к Linux 2.0. И вообще, всё, что вы приводите подозрительно похоже на код из статьи в журнале ксакеп семилетней давности. Если это так, то это явно не лучший выбор документации: и в плане достоверности того, что печатали в сём чудном издании и в плане древности материала.
Если я вас так и не переубедил, почитайте, если ещё не читали:
man socket(2), packet(7), raw(7), ip(7) и далее по вкусу до полного просветления. Также, разумеется, вы вероятно хорошо разбираетесь в OSI, IP, Ethernet, знаете как работают эти протоколы и какие у них форматы данных, а также что делает ваше ядро, пока вы в пользовательском процессе принимаете и отсылаете пакеты и т.д.
В любом случае, удачи.