-
-
Save Winterflower/9724469667f9e95c9c01 to your computer and use it in GitHub Desktop.
One way of sending raw Ethernet packets in Python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"""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