EtherPuppet will create a virtual interface (TUN/TAP) between two machines through a TCP connection.
Everything seen by the real interface will be seen by the virtual one.
Everything sent to the virtual interface will be emitted by the real one.
It has been designed because one often has a small machine as his Internet gateway, and sometimes want to run some big applications that need raw access to this interface, for sniffing (Ethereal, etc.) or for crafting packets that do not survive being reassembled, NATed, etc.
It can even run on Linux embedded routers such as the Linksys WRT54G.
$ gcc -o etherpuppet etherpuppet.c