Raw IP packets on Linux
mike.ayers at tumbleweed.com
Sun Aug 15 09:09:10 CEST 2004
Mike Ayers <mike.ayers <at> tumbleweed.com> writes:
> What am I getting wrong here? What address type does this socket expect?
After further review, I find that AF_PACKET wants addresses that contain the
interface and protocol number. You can also specify an ethernet address, but it
will be ignored (in fact, you can only specify a subset of ethernet addresses,
as the address argument is parsed as 's').
Quick summary: socket( AF_PACKET, SOCK_DGRAM ) is useless.
Workaround: use socket( AF_PACKET, SOCK_RAW ) and create your own ethernet
headers, which (provided you're using true ethernet, which most of us are), is
just the 6 byte ethernet destination address followed by the 6 byte ethernet
source address (.i.e your own), followed by 0x0800 (IP) in two bytes. Really
pretty simple if you're already using raw sockets, eh?
More information about the Python-list