Skip to content

Instantly share code, notes, and snippets.

@cslarsen
Created April 27, 2014 07:14
Show Gist options
  • Save cslarsen/11339448 to your computer and use it in GitHub Desktop.
Save cslarsen/11339448 to your computer and use it in GitHub Desktop.

Revisions

  1. cslarsen created this gist Apr 27, 2014.
    30 changes: 30 additions & 0 deletions sendeth.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,30 @@
    """Demonstrates how to construct and send raw Ethernet packets on the
    network.
    You probably need root privs to be able to bind to the network interface,
    e.g.:
    $ sudo python sendeth.py
    """

    from socket import *

    def sendeth(src, dst, eth_type, payload, interface = "eth0"):
    """Send raw Ethernet packet on interface."""

    assert(len(src) == len(dst) == 6) # 48-bit ethernet addresses
    assert(len(eth_type) == 2) # 16-bit ethernet type

    s = socket(AF_PACKET, SOCK_RAW)

    # From the docs: "For raw packet
    # sockets the address is a tuple (ifname, proto [,pkttype [,hatype]])"
    s.bind((interface, 0))
    return s.send(src + dst + eth_type + payload)

    if __name__ == "__main__":
    print("Sent %d-byte Ethernet packet on eth0" %
    sendeth("\xFE\xED\xFA\xCE\xBE\xEF",
    "\xFE\xED\xFA\xCE\xBE\xEF",
    "\x7A\x05",
    "hello"))