Skip to content

Instantly share code, notes, and snippets.

@pamaury
Created December 8, 2020 11:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pamaury/4b5d93bf5909dbdac3ef2da9052a73e5 to your computer and use it in GitHub Desktop.
Save pamaury/4b5d93bf5909dbdac3ef2da9052a73e5 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
import socket
import sys
import struct
if len(sys.argv) != 2:
print("usage: {} intf".format(sys.argv[0]))
print("interfaces:")
for idx, name in socket.if_nameindex():
print("{}: {}".format(idx, name))
sys.exit(1)
sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 1)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', 4242)) # bind all interfaces
group_addr = "ff02::4242:4242"
intf_index = socket.if_nametoindex(sys.argv[1])
mreq = struct.pack("=16si", socket.inet_pton(socket.AF_INET6, group_addr), intf_index)
sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq)
while True:
data, sender = sock.recvfrom(1500) # 1500 = max size
print("msg: {}".format(data))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment