Skip to content

Instantly share code, notes, and snippets.

@daedalus
Forked from cslarsen/sendeth.py
Created June 9, 2017 19:34
Show Gist options
  • Select an option

  • Save daedalus/5fb325f828a15cc1ec5881a92f7ea795 to your computer and use it in GitHub Desktop.

Select an option

Save daedalus/5fb325f828a15cc1ec5881a92f7ea795 to your computer and use it in GitHub Desktop.
One way of sending raw Ethernet packets in Python
"""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"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment