Skip to content

Instantly share code, notes, and snippets.

@vinhjaxt
Forked from cslarsen/sendeth.py
Created November 10, 2016 06:39
Show Gist options
  • Save vinhjaxt/352e635bc6d42fd1506d88e8e346ccfb to your computer and use it in GitHub Desktop.
Save vinhjaxt/352e635bc6d42fd1506d88e8e346ccfb 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