Skip to content

Instantly share code, notes, and snippets.

@teeks99
Created March 10, 2023 18:40
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 teeks99/e82b4997e3e05c569eadb2df936c1026 to your computer and use it in GitHub Desktop.
Save teeks99/e82b4997e3e05c569eadb2df936c1026 to your computer and use it in GitHub Desktop.
Test of loopback interfaces
import socket
import struct
import time
group = '224.1.1.4'
test_interfaces = [
'127.0.0.1',
# Fill in an interface of your own computer here
'192.168.42.42']
port = 15007
def send_no_join(interface):
print(f"No join test from {group} {interface}")
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_LOOP, 1)
sock.setsockopt(
socket.IPPROTO_IP, socket.IP_MULTICAST_IF, socket.inet_aton(interface))
data = f"multicast send - group: {group} interface: {interface}"
data = data.encode()
try:
sock.sendto(data, (group, port))
except socket.timeout:
pass
except OSError as e:
print(e)
def send_with_join(interface):
print(f"With join test from {group} {interface}")
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_LOOP, 1)
sock.setsockopt(
socket.IPPROTO_IP, socket.IP_MULTICAST_IF, socket.inet_aton(interface))
mreq = struct.pack(
"4s4s", socket.inet_aton(group),
socket.inet_aton(interface))
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
data = f"multicast send - group: {group} interface: {interface}"
data = data.encode()
try:
sock.sendto(data, (group, port))
except socket.timeout:
pass
except OSError as e:
print(e)
for test_interface in test_interfaces:
send_no_join(test_interface)
time.sleep(0.5)
for test_interface in test_interfaces:
send_with_join(test_interface)
time.sleep(0.5)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment