If you’re working in C, you can send a raw Ethernet frame using socket(AF_PACKET, SOCK_RAW, ...)
, and passing it a pointer to a raw buffer that you’ve generated yourself (e.g. by following the frame layout at wikipedia ).
It’s been a long time since I’ve done this, so I’m not going to attempt to write a representative code snippet…