Skip to content

Instantly share code, notes, and snippets.

@M0r13n
Created June 8, 2024 11:56
Show Gist options
  • Save M0r13n/63f7a6b436248d5bdc1465e224984a68 to your computer and use it in GitHub Desktop.
Save M0r13n/63f7a6b436248d5bdc1465e224984a68 to your computer and use it in GitHub Desktop.

Multicast Experiments

Make sure that your machine allows incoming traffic on port 5007:

sudo ufw allow 5007 udp

Run receiver.py to listen for incoming UDP Multicast packets.

Run sender.py to send UDP Multicast packets.

Docker

Run ./from-docker.sh to run sender.py inside a Docker container.

FROM python:3.11-slim
WORKDIR /multi
COPY . .
CMD ["python", "./sender.py"]
docker build -t multicast_sender .
echo "Build done."
echo "Starting Container..."
docker run --rm --net host -it multicast_sender
#!/usr/bin/env python3
import socket
import struct
if __name__ == "__main__":
multicast_group = ('224.1.1.1', 5007)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 5)
sock.bind(multicast_group)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
group = socket.inet_aton(multicast_group[0])
mreq = struct.pack('4sL', group, socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
while True:
received = sock.recv(1500)
print(f'Received: {received.decode()}')
#!/bin/bash
import socket
import time
if __name__ == "__main__":
multicast_group = ('224.1.1.1', 5007)
message = f'Sending from {socket.gethostname()}'
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
while True:
print(f'Sending message: "{message}"')
sock.sendto(message.encode(), multicast_group)
time.sleep(1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment